Presentacion Docker Kubernetes

Descargar como odp, pdf o txt
Descargar como odp, pdf o txt
Está en la página 1de 51

Conceptos y Administración básica de Docker y

Kubernetes.

Enero 29 a Febrero 11 de 2020.

Walter Argüello Cortés.

Asociación Colombiana de Ingenieros de Sistemas. ACIS.


Verificación de requisitos.


Conceptos básicos de aplicaciones y OS.

Edición y manipulación de archivos.

Destreza con la línea de comandos.

Instalación de software.

Procesos y servicios.

Filesystems

Red
Software a Instalar

https://download.virtualbox.org/virtualbox/6.1.2/VirtualBox-
6.1.2-135663-Win.exe

http://mirror.uta.edu.ec/centos/7.7.1908/isos/x86_64/Cent
OS-7-x86_64-Minimal-1908.iso
Contenido

1. Introducción a Docker

Instalación de Docker Engine


Creación de Containers
Control de Containers en Docker
Contrucción de containers y administración de Dockerfiles
Administración Docker Volumes (almacenamiento)
Gestión de red en Docker
Orquestación de contenedores
Seguridad de imágenes docker
Integración práctica
Contenido

2. Introducción a Kubernetes

¿Qué es Kubernetes?
Componentes
API
Objetos
Contenedores
Kubeadm, Kops, Docker Client y Minikube
Contenido

3. Conceptos básicos de Kubernetes

Arquitectura de Nodos
Replication Controller
Deployments
Servicios
Labels
Pod
WebUI
Contenido

4. Conceptos avanzados de Kubernetes

Service Discovery
ConfigMap
Ingress
External DNS
Volumes
Pod Presets
StatefulSets
AutoScaling
Affinity
Anti-affinity
Taints y Tolerations
Contenido

5. Administración de Kubernetes

Clúster de Administración
Certificates
Gestión de recursos
Cluster Networking
Kubernetes Master Services
Namespaces
User Management
RBAC
Mantenimiento de nodos
Federation
Proxies
Addons
Unidad 1: Introducción a Docker.

¿Qué son contenedores de Software?.


Instalación de Docker Engine
Creación de Containers
Control de Containers en Docker
Contrucción de containers y administración de Dockerfiles
Administración Docker Volumes (almacenamiento)
Gestión de red en Docker
Orquestación de contenedores
Seguridad de imágenes docker
Integración práctica
Unidad 1: ¿Qué son contenedores de
Software?.


Los contenedores sirven para "empaquetar aplicaciones"
(Servidores WEB, Bases de datos, ...).

No hay capa de virtualizacion involucrada.

Se incluyen librerías necesarias en el contenedor.

Éso elimina la instalación de dependencias en el sistema
operativo anfitrión.

Fácil despliegue.

Menos espacio usado y portabilidad simplificada.

Independencia del tipo de sistema operativo anfitrión.

Compatir imagenes en repos (Docker Hub).
Unidad 1: VM’s vs. Contenedores
Unidad 1: Instalación de Docker Engine

Ubuntu 16.04:
# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh

CentOS 7:
# yum install docker-engine
# systemctl status docker
# systemctl enable docker
Unidad 1: Instalación de Docker Engine

Verificación:

# docker images
# docker info
# docker version
Unidad 1: Instalación de Docker Engine

Imagenes vs. Containers



Similar a Objetos versus Classes.

Una imagen es un archivo inmutable, una definición, que
esencialmente es una instantánea de un contenedor.

Las imagenes son creadas con el comando build.

Las imagenes producen un contenedor, cuando son
iniciadas con el comando run.

# docker images
# docker ps
Unidad 1: Instalación de Docker Engine

Disponibilidad de Imagenes.

Docker Hub: https://hub.docker.com

Comunidad que se dedica a la creación y compartición de


imagenes docker.

# docker search apache

# docker pull <reponame>


Unidad 1: Instalación de Docker Engine

Imagenes intermedias (Layers).

Generadas cuando los comandos en el “DockerFile”, son


ejecutados durante “build”.

# docker history <image>


Unidad 1: Instalación de Docker Engine

Imagenes y TAGS.

docker search ubuntu


#!/bin/bash

image_name=${1:-library/debian}

pages=$(( $(curl https://registry.hub.docker.com/v2/repositories/${image_name}/tags/ -s | jq -r '.count') / 10 + 1))

i=0

while [ $i -le $pages ] ;


do
i=$(( i + 1 ))
curl -sgG "https://registry.hub.docker.com/v2/repositories/${image_name}/tags/?page=$i" 2>/dev/null|jq -r '."results"[]["name"]'
done

docker pull ubuntu:14.04


Unidad 1: Instalación de Docker Engine

Hello World.

# docker pull hello-world

# docker run hello-world

# docker ps

# docker ps -a

# docker ps --help
Unidad 1: Instalación de Docker Engine

Hello World.

Background:

# docker run ubuntu ls

Interactivo:

# docker run -i -t ubuntu bash (docker ps en otra terminal)


Unidad 1: Instalación de Docker Engine

docker run -i -t ubuntu bash

docker start <id>

docker stop <id>

docker attach <id>

Ctrl + p + q
Unidad 1: Instalación de Docker Engine

docker run –name acis ubuntu

docker exec -it <id> <comando>


Unidad 1: Instalación de Docker Engine

Los contenedores son efímeros.

Un contenedor se ejecuta y modifica data, pero una vez


termina su ejecución, la data nueva y todos los cambios,
también se esfuman.
Unidad 1: Instalación de Docker Engine

Los contenedores siempre ejecutan un programa o


servicio principal predeterminado.

docker run nginx


Unidad 1: Instalación de Docker Engine

Crear una imagen a partir de un contenedor.

docker commit <id> acisimg

docker images

docker run -it <id> acisimg bash


Unidad 1: Instalación de Docker Engine

Cambiar el programa predeterminado del contenedor.

docker run -it ubuntu bash

apt-get update
apt-get install apache2
service apache2 status
service apache2 start
^p^q

docker commit –change=’CMD [“apache2ctl”, “-D


FOREGROUND”]’ -c “EXPOSE 85” <id> acisapache2
Unidad 1: Instalación de Docker Engine

Cambiar el programa predeterminado del contenedor.

docker run -d -p 5000:80 acisapache2

docker ps

docker run -d -p 5001:80 acisapache2


Unidad 1: Instalación de Docker Engine

Dockerfiles

FROM ubuntu:12.04
MAINTAINER Walter Arguello
RUN apt-get update && apt-get install -y apache2 && apt-get clean && rm -rf
/var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data


ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]


Unidad 1: Instalación de Docker Engine

Construccion de imagenes docker

docker build -t webserver /root/docker


Unidad 1: Instalación de Docker Engine

Inclusión de archivos en imagen

COPY index.html /var/www/html/index.html

docker build -t webserver /root/docker

docker run -d -p 81:80 webserver


Unidad 1: Instalación de Docker Engine

Redes - bridge, host y none

docker network list

docker network inspect bridge

docker run -d -p 81:80 webserver


docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123 docker.io/mysql

docker run -dit ubuntu

docker network inspect bridge

docker inspect <id>


Unidad 1: Instalación de Docker Engine

Redes – conectar y desconectar

docker network disconnect <id> bridge

docker network inspect bridge

docker network connect <id> bridge

docker stop $(docker ps -q)

docker network create --internal interna


Unidad 1: Instalación de Docker Engine

Redes – Red Host

docker run -it --network host ubuntu

apt-get install net-tools

apt-get install iputils-ping

ifconfig
Unidad 1: Instalación de Docker Engine

Redes – Red None

docker run -it --network none ubuntu


Unidad 1: Instalación de Docker Engine

Ver logs relacionados con un contenedor

docker logs <id>


Unidad 1: Instalación de Docker Engine

Eliminar los contenedores detenidos

docker container prune


Unidad 1: Instalación de Docker Engine

Almacenar imagenes en hub.docker.com

docker tag <id> walterarguellocortes/webserver

docker login –username=walterarguellocortes

docker push walterarguellocortes/webserver


Unidad 1: Instalación de Docker Engine

Volumenes en Docker
Unidad 1: Instalación de Docker Engine

Volumenes en Docker

docker volume ls

docker volume create volume1

docker volume inspect volume1


Unidad 1: Instalación de Docker Engine

Usando los volumenes en un contenedor

docker run -dit -v volume1:/data ubuntu

docker attach <id>

Crear contenido y salir.

docker rm <id>

La data deberá estar en el volumen.


Unidad 1: Instalación de Docker Engine

Montando el volumen en otro directorio

docker run -it -v volume1:/database ubuntu


Unidad 1: Instalación de Docker Engine

Crear filesystem para Volumenes.

lvcreate -L +4G -n dockerlv rootvg

mkfs.xfs /dev/rootvg/dockerlv

Incluir en /etc/fstab

docker volume rm <id>

systemctl stop docker

mount -a

docker volume create volume2


Unidad 1: Kubernetes

¿Qué es Kubernetes?

Arquitectura

Componentes.
Unidad 1: ¿Qué es Kubernetes?

Proyecto de Google (2.014) basado en “Borg”

Open Source

Sistema de orquestacion de contenedores:

Distribucion inteligente de contenedores en nodos


Administración de cargas de trabajo
Facilita la gestión
Ofrece Alta Disponibilidad
Modular y Flexible
Unidad 1: Arquitectura

Kubernetes es un cluster.

Master (etcd, scheduler)


Nodos (kubelet, kube-proxy)
Unidad 1: Pods

Conjuntos de contenedores
Unidad mínima de definición para Kubernetes.
Unidad 1: Scheduler

Se encarga de la distribución de pods en nodos del


cluster según criterios de disponibilidad, recursos, etc.
Unidad 1: Instalación de Kubernetes
Master:
Asigne el hostname:
hostnamectl set-hostname 'k8s-master'

Deshabilite SELinux:
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Deshabilite el firewall:
systemctl stop firewalld

Actualice el archivo /etc/hosts:


192.168.1.30 k8s-master
192.168.1.40 k8s-node1
192.168.1.50 k8s-node2

Configure el repo para kubernetes:


[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Unidad 1: Instalación de Kubernetes

Master:
Instale el software:
yum install kubeadm docker

Inicie los servicios


systemctl restart docker && systemctl enable docker
systemctl restart kubelet && systemctl enable kubelet

Inicialice el Master:
kubeadm init
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Verifique:
kubectl get nodes
Kubectl get pods –all-namespaces

Hacer kube-dns disponibe:


export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Verifique nuevamente.
Unidad 1: Instalación de Kubernetes
En cada nodo:
Asigne el hostname:
hostnamectl set-hostname 'k8s-master'

Deshabilite SELinux:
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Deshabilite el firewall:
Systemctl stop firewalld

Deshabilitar swap
Habilitar net.bridge.bridge-nf-call-iptables = 1

Actualice el archivo /etc/hosts:


192.168.1.30 k8s-master
192.168.1.40 k8s-node1
192.168.1.50 k8s-node2

Configure el repo para kubernetes:


[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Unidad 1: Instalación de Kubernetes

En cada nodo:
Instale el software:
yum install kubeadm docker

Inicie los servicios:


systemctl restart docker && systemctl enable docker
systemctl enable kubelet
Deshabilitar swap

Junte al nodo al cluster:


kubeadm join --token a3bd48.1bc42347c3b35851 192.168.1.30:6443

En el Master:
Verifique:
kubectl get nodes
Unidad 1: Instalación de Kubernetes

webapp.yaml:

apiVersion: v1
kind: Pod
metadata:
name: webapp
labels:
app: webapp
spec:
containers:
- name: webserver
image: walterarguellocortes/webserver
ports:
- containerPort: 80
- name: database
image: docker.io/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: abc123
ports:
- containerPort: 3306

kubectl apply -f /root/kubernetes/ webapp.yaml

También podría gustarte