2. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Introducción
Esta presentación pretende ser una introducción al
mundo Multi/Hybrid Cloud.
El objetivo es afianzar una serie de conocimientos que
son básicos para entender los productos de cada uno de
los fabricantes/Proveedores Cloud en en esta área.
Habra una presentacion por Producto de cada Fabricante
3. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Agenda
✓ Que es Multi/hybrid Cloud
✓ Conceptos Básicos -Containers
✓ Docker y Características- Repositorios de Imágenes
✓ Orquestación Contenedores
✓ KUBERNETES (k8s)
✓ Multicloud Journey con Containers y k8s
✓ VM vs Container vs Serverless
4. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Que es Multi/hybrid Cloud
✓ Modelos Adopción Cloud
✓ Evolución Adopción cloud
✓ Hybrid / Multi-cloud / Hybrid Multi-cloud
✓ Journey to cloud
✓ Monitorización/Logging Multi Cloud
9. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Hybrid Cloud
✓ Combinación de una o más nubes públicas
y privadas con :
− Interoperabilidad
− Portabilidad de aplicaciones
− Portabilidad de datos
− Orquestación
✓ Todo ello con una Gestión común
10. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Multicloud
✓ Uso de diferentes nubes de múltiples
proveedores para múltiples tareas.
✓ Se logra una mayor flexibilidad, menores
costos, se evita Bloqueo del proveedor
✓ Imprescindible lograr políticas,
cumplimiento y administración consistentes
con los diferentes proveedores involucrados.
11. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Hybrid MultiCloud
Hybrid Multicloud reúne varias Cloud y
proporciona las herramientas para garantizar
la interoperabilidad entre los diversos servicios
en soluciones híbridas y Multicloud.
16. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Containers - Clave para MultiCloud
✓ En Multicloud uno de los objetivos es la
portabilidad
✓ Los contenedores son la respuesta a la
portabilidad que el mercado desea.
✓ Son también una nueva forma de evitar el
“Vendor Lock-in” al ser transportables
✓ La nube pública al final es “un producto”, y el
bloqueo como consecuencia de la adopción de
un producto siempre es una posibilidad.
17. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Kubernetes Multi-Hybrid Cloud
✓ Kubernetes es compatible con todas las nubes
✓ forma común de implementar WorkLoads.
✓ La Fundación Linux demostró una Hybrid-MultiCloud
✓ El proyecto Cloud-CI en CNCF mostró una
implementación ONAP con Kubernetes en varias cloud
públicas y privadas (incluida IBM Cloud) y Bare-Metal
ONAP Multi-Hybrid Cloud Real
https://www.onap.org/blog/2018/05/04/how-service-providers-can-use-kubernetes-to-sc
ale-nfv-transformation
20. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Containers vs Serverless
✓ Ambos tienen una arquitectura diseñada para aprovechar lo último en
cloud computing.
✓ Aunque no son lo mismo y tienen un propósito diferente:
✓ algunos puntos comunes:
− Gastos generales mínimos
− Alto rendimiento
− Requiere aprovisionamiento de infraestructura mínima
21. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Containers vs Serverless
Ventajas serverless
− Simplicidad de implementación solo cargas las funciones, y ya esta
− Se paga por la ejecución, Serverless es más barato que los contenedores.
− No hay que preocuparse por la escalabilidad.
− La actualización o modificación es más fácil de hacer que en containers.
Desventajas serverless
− Es una tecnología de "caja negra", no necesariamente sabe lo que está haciendo
− La complejidad crece exponencialmente a medida que crece la APP
− Siempre depende de un proveedor(Vendor lock-in)- Containers son Vendor -Agnostic
− Puede ser muy difícil de corregir algunos errores y monitorizar su ejecución en grandes
instalaciones
24. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
¿Proyecto Docker?
Docker es un proyecto de código abierto que automatiza el despliegue de
aplicaciones dentro de contenedores de software, proporcionando una capa
adicional de abstracción y automatización de Virtualización a nivel de
sistema operativo en Linux.
Docker utiliza características de aislamiento de recursos del kernel Linux,
tales como cgroups y espacios de nombres (namespaces) para permitir que
"contenedores" independientes se ejecuten dentro de una sola instancia de
Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.
Wikipedia
29. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ciclo de vida Docker
Arquitectura cliente-servidor
✓ El cliente - habla con el Docker daemon para gestionar contenedores:
− build
− ejecución
− Distribución
✓ Se comunican usando una API REST:
− Sockets UNIX
− Interfaz de red
✓ Containerd - Gestiona el ciclo de vida de los contenedores
− Start
− Stop
− Pause
− Delete
− Gestionar las imagenes
✓ Docker client (docker):
− Es cómo los usuarios interactúan con Docker
− Envía comandos a dockerd
31. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
¿Qué son los contenedores?
Un contenedor es una unidad de software estándar que empaqueta
el código y todas sus dependencias para que la aplicación se ejecute
de manera rápida y confiable de un entorno informático a otro.
Imagen Docker Contenedor Docker
34. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Imágenes
✓ Plantilla RO con instrucciones para crear un contenedor Docker
✓ La imagen se basa en otra imagen
✓ Se pueden crear nuestras propias imágenes
✓ Se usan las imágenes publicadas en un registro
✓ Dockerfile para construir imágenes
36. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Imágenes y Capas
✓ Cada capa es una instrucción en el Dockerfile de la imagen.
✓ Todas son, excepto la última, de RO.
✓ Las capas se apilan unas encima de otras.
✓ Los contenedores agregan nuevas capas de escritura encima de
las capas subyacentes
✓ los cambios realizados en un contenedor en ejecución se
realizan en la capa Contenedor
✓ las capas de las imágenes se guardan en /var/lib/docker
37. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Docker Registry - Docker Hub
✓ Guarda las Imágenes de Docker
✓ Registro público como Docker Hub
✓ Permite ejecutar tu propio private registry
✓ Artifactory , Nexus , AWS , Azure , GCP ..
38. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Contenedores
✓ Instancia ejecutable de una imagen
✓ Se Conectan los contenedores a redes
✓ se adjuntan al almacenamiento
✓ Se crea una nueva imagen basada en su estado actual
✓ Estan aislado de otros contenedores y de la máquina host
41. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
SandBox
✓ Aísla el stack de red , network interfaces,ports,route tables, DNS
✓ Un Sandbox puede tener múltiples EndPoints conectados a
diferentes redes que representan la configuración de red del
contenedor, como dirección IP, dirección MAC, rutas, DNS.
42. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Endpoint
✓ Virtual Network Interface, su responsabilidad es conectar el
sandbox con una red.
✓ Solo pueden estar conectados a una red a la vez,
✓ Un contenedor puede tener más de un endpoint para atacar a
diferentes redes
43. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Network
✓ Estandar https://en.wikipedia.org/wiki/IEEE_802.1D
✓ Proporciona conectividad entre un grupo de Endpoints que
pertenecen a la misma red y aislados del resto.
✓ Cada vez que se crea o actualiza una red, el controlador
correspondiente será notificado del evento.
✓ La red de Docker por defecto:
− 172.0.0.0/16 CIDR
45. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Networking Drivers
La instalación por defecto, crea tres redes automáticamente
$ docker network ls
NETWORK ID NAME DRIVER
7fca4eb8c647 bridge bridge
9f904ee27bf5 none null
cf03ee007fb4 host host
46. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Networking Drivers - Bridge
✓ Red interna privada “Default” creada por
Docker en el host.
✓ Los containers obtienen una IP interna y
pueden acceder entre sí.
✓ Cuando las App se ejecutan en
contenedores indeptes que necesitan
comunicarse.
49. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Networking Drivers - Host
✓ Añade el container al stack de red del host.
✓ No hay aislamiento entre host y contenedor.
✓ Un web srv en puerto 80 está disponible en
el puerto 80 de la máquina host.
✓ Las none y host no se pueden configurar en
Docker , Solo la Bridge.
50. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Networking Drivers - None
Ese contenedor carece de una interfaz de red.
Adjuntando a dicho contenedor y mirando su
stack, se vería esto: None
$ docker attach nonetcontainer
51. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Networking Drivers - macvlan
✓ Provee un dirección Hardware MAC para
cada controlador para un stack TCP/IP
completo
✓ Convierte al container en primera clase red
✓ Acarrea un overhead adicional a nivel de
gestión ya que es un elemento más de la
red
53. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Network Plugins
✓ Permite a los fabricantes extender la funcionalidad de sus dispositivos y
tecnologías de red a docker
✓ Funcionalidades como Specific IP Address Management, auto configuración de
red para Overlay , QoS, Load Balancing
55. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Tipos Almacenamiento
No Persistente ( Efímero)
− Almacenamiento local
− Los datos son efímeros
− Por defecto los containers usan local storage (graph storage)
− Unido al ciclo de vida del contenedor
Persistente
− volúmenes - ( no están ligados al container )
Los volúmenes son casi siempre la elección correcta.
56. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Volumen No Persistente
Consiste en almacenar datos en la capa de escritura de
un contenedor:
− Los datos no persistirán cuando ese contenedor no esté
− La capa grabable está acoplada al host donde se ejecuta.
− Reduce el rendimiento en comparación con el uso de volúmenes
− Storage locations:
− - Linux: /var/lib/docker/[STORAGE-DRIVER]/
− - Windows: C:ProgramDataDockerwindowsfilter
57. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Volumen Persistente
✓ Se usan para persistir datos
− Primero se crea el volumen
− Después se crea el container.
✓ Se monta en un directorio del container
✓ Al borrar el contenedor el volumen no se borra
✓ Drivers de terceros:
− Block storage (AWS EBS, OpenStack Cinder..)
− File storage ( NFS,SMB, Azure File, AWS EFS)
− Object storage ( AWS S3 , CEPH , Openstack Swift )
✓ Storage locations:
− Linux: /var/lib/docker/volumes/
− Windows: C:ProgramDataDockervolumes
58. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Persistente / efímero
Datos en Container
Se pierden cuando se termina
el contenedor
Datos Volumen del Host
Se pierden cuando se termina
el Host
Network Volume/Filesystem
Independientes del host y del
contenedor.
SOBREVIVEN AL HOST/CONTAINER
59. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Volúmenes - Storage Físico
✓ El directorio del Host se crea fuera del contexto de
Docker
✓ Los volúmenes son compartidos entre los container y no
se borran al eliminar estos
✓ estos datos no se incluyen en la imagen cuando se
actualice
61. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Introducción a Kubernetes
✓ ¿Que es Orquestación ?
✓ ¿Qué es Kubernetes? (K8s)
✓ Arquitectura de Kubernetes
✓ Componentes de Kubernetes
✓ ¿Por qué utilizar Kubernetes?
✓ Despliegue en Kubernetes (RUpdate, Canary, Blue/green)
62. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
¿Que es Orquestación?
✓ Consiste en hacer que todas las piezas funcionen juntas( Dir Orquesta)
✓ Gestionar el ciclo de vida de los contenedores, especialmente en
entornos grandes y dinámicos.
✓ Los Dev Teams utilizan la orquestación de contenedores para controlar y
automatizar Tareas de :
− Aprovisionamiento
− Implementación
− Redundancia
− Disponibilidad
63. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
¿Por qué necesitamos Orquestación?
Los Contenedores necesitan
✓ Discovery e intercomunicación entre ellos
✓ Hacer upgrades con Downtime 0
✓ Reportar uso de recursos y estado de "Salud"
✓ Ser colocados en sitios adecuados ( nodos )
✓ Hacer un escalado In/Out bajo demanda
✓ Resiliencia frente a fallos de HW y SW
64. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Clustering vs Orquestación
Clustering
✓ Agrupación de hosts (Bare metal o VM) interconectados con una red
✓ Se usa como un único recurso más que un grupo de máquinas dispares
Orquestación
✓ Consiste en hacer que todas las piezas funcionen juntas( Dir Orquesta)
✓ Programar e iniciar contenedores en los hosts adecuados
✓ Escalado , Failover , Rebalanceo de nodos ..
65. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
¿Qué es Kubernetes? (K8s)
✓ Hoy las aplicaciones tienen que estar disponibles 24/7 y los
desarrolladores esperan implementar nuevas versiones varias veces al
día.
✓ Los containers ayudan a empaquetar el software, permitiendo que las
aplicaciones se actualicen fácil y rápidamente sin Downtime.
✓ Kubernetes ayuda a que estas aplicaciones en contenedores se ejecuten
donde y cuando queramos.
✓ Kubernetes es una plataforma Open Source diseñada con la experiencia
de Google en la orquestación de contenedores.
68. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
¿Qué son los POD’s?
✓ Unidad básica de ejecución de una app en k8s
✓ Un pod representa procesos en el cluster
✓ Encapsula:
− 1 o varios container que comparten recursos
− Recursos almacenamiento
− Ip única
− Opciones de configuración del pod.
✓ Representa una unidad de despliegue para k8s
69. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Pods- Visión General
✓ Pods de Container Único
✓ Pods de Múltiples container
✓ Networking en los pods
✓ Almacenamiento en los Pods
✓ Controllers - Gestores de Pods
− Deployments
− Stateful Sets
− Daemon Set
✓ Plantillas Pod ( Pod Templates)
70. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Pods - Networking
✓ Al Pod se le asigna una dirección IP única.
✓ Cada container en un Pod comparte el
namespace, la IP y los puertos.
✓ Los containers dentro de un Pod se comunican
utilizando localhost.
✓ Cuando la comunicación es fuera del Pod, se
deben coordinar cómo usan los recursos de red
compartidos (como los puertos).
71. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Almacenamiento - Volúmenes
✓ Un Pod puede especificar un conjunto de
volúmenes de almacenamiento compartido.
✓ Los containers en el Pod pueden acceder a los
volúmenes compartidos.
✓ Permiten que los datos persistentes en un Pod
sobrevivan a un reinicio o caída.
72. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Persistent Volume Claim(PVC)
✓ Es una solicitud de almacenamiento, similar a un pod,
✓ Los PVC consumen recursos de volumen persistente en lugar
de cómo los pod consumen recursos de nodo.
✓ Los pods pueden solicitar niveles específicos de recursos
(memoria y CPU),
✓ Los PVC solo pueden solicitar tamaños específicos y modos de
acceso.
73. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
K8s Secrets
✓ Es un objeto en K8s que almacena y administra
información confidencial, como contraseñas,
tokens, claves ssh, etc.
✓ Se almacenan en etcd, la bd campo valor de
K8s.
✓ Se puede habilitar la encriptación para
almacenarlos en etcd.
74. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
K8s Labels
✓ Pares clave/valor que se adjuntan a los objetos,
como Pods.
✓ Especifican atributos de identificación de objetos
significativos y relevantes
✓ Organizan y seleccionar subconjuntos de objetos.
✓ Se adjuntan a los objetos en el momento de la
creación o en cualquier momento.
✓ Cada clave debe ser única para un objeto dado.
76. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Stateful App
¿Que es una Stateful Application?
✓ Es la que guarda datos sobre cada sesión de cliente hasta la próxima
solicitud.
✓ Estos datos se conocen como el estado de la aplicación.
✓ Estos se almacenan localmente o en un host remoto hasta el momento
en que el usuario cierra la sesión.
77. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Stateful App
1. Operaciones ordenadas con índice
operaciones críticas de pod, startup, scale-up, scale-down, rolling upgrades, termination.
2. ID / nombre de red estable y único en todos los reinicios
Garantiza que volver a generar un pod no hará que el clúster lo trate como un miembro nuevo.
3. Almacenamiento estable y persistente
Permite conectar el mismo disco persistente a un pod incluso si se reprograma en un nuevo nodo.
4. Servicio headless (sin IP única) para integraciones
Los clientes inteligentes conocen todos los pods y se conectan a cualquiera de ellos sin utilizar
ningún tipo de servicio de Load Balancer.
78. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Stateless App
¿Que es una Stateless Application?
✓ Aplicación que no guarda los datos del cliente generados en una sesión
✓ HTTP, por ejemplo, es inherentemente sin estado.
✓ Significa que cuando se desea un estado para una aplicación web, las
funciones con estado deben integrarse con páginas dinámicas.
✓ Las páginas pueden almacenar sesiones a través de variables de
dirección web y datos almacenados del servidor y del lado del cliente,
como a través de cookies.
80. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Deployments(Stateless)
✓ Describe un “Estado Deseado” en
implementación, y el controlador cambia el
estado real al estado deseado.
✓ Se utiliza en App que son stateless, ya que el
solo permite ReadWrite Once
✓ Puede definir implementaciones para crear
nuevos ReplicaSets o eliminar o adoptar todos
sus recursos con nuevas implementaciones.
81. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Replica Sets(Stateless)
✓ Un controlador puede crear y administrar
múltiples Pods manejando la replicación y el
despliegue y proporcionando capacidades de
self-healing en el clúster.
✓ Si un Nodo falla, el Controlador puede
reemplazar automáticamente el Pod
programando un reemplazo idéntico en un Nodo
diferente.
82. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
StatefulSets ( Stateful Apps)
✓ Facilita la creación de aplicaciones con estado.
✓ Óptimo para ejecutar una base de datos en
producción.
✓ Cada pod tiene el mismo ID de red y disco en todos los
reinicios, incluso si esto se crea en otro nodo.
✓ Escalar las cargas de trabajo y el upgrading de las
aplicaciones con estado.
83. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
StatefulSets ( Stateful Apps)
✓ HA implica ejecutar un único master (para
Writes) con 1+ réplicas ( read slaves).
✓ El maestro y las réplicas se implementan
juntos en un solo StatefulSet.
✓ El servicio master está asociado al pod 0.
✓ Los pods distintos de cero están conectados a
un servicio diferente "Servicio de réplica".
85. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Horizontal Pod Autoscaling
✓ HPA escala automáticamente el # de pods en
− Replication controller
− Deployment
− Replica Set
− StatefulSet (desde la 1.9)
✓ Basado en la utilización observada de la CPU
✓ Actualmente también de alguna otra métrica .
86. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Services
✓ Los pods son mortales y tienen un ciclo de vida.
✓ Cuando un Worker Node muere, los Pods que se
ejecutan en él también se pierden.
✓ Un ReplicaSet lleva dinámicamente el clúster al
estado deseado mediante la creación de nuevos Pods
para mantener su aplicación en funcionamiento.
87. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Services
✓ Abstracción que define un conjunto lógico de
Pods y una política para acceder a ellos.
✓ Está determinado por un LabelSelector
✓ Cada Pod tiene una IP única, estas no están
expuestas fuera del clúster sin un Servicio.
✓ Permiten que las aplicaciones reciban tráfico.
✓ Los servicios se pueden exponer de diferentes
maneras especificando un tipo en ServiceSpec
88. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Services
✓ Enruta el tráfico a
través de un conjunto
de pods.
✓ Permite que cuando
los pods mueren y se
repliquen no afecten
a la aplicación.
✓ Gestionan el
Discovery y el
enrutamiento entre
pods dependientes
93. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 1: Creación Primer Contenedor
Creación de un contenedor por defecto desde una imagen existente
en el Docker Hub.
La típica hello-world , ejecuta el contenedor, saca por pantalla la
ayuda y se cierra
$docker container run hello-world:latest
Ejecutamos un comando en el container
$docker container run busybox echo Hola amigos de Telefónica
$docker container run -it busybox sh
95. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 2: Creación de una Imagen
Creamos un directorio para el proyecto
− mkdir redis-test
− cd redis-test
Creación de una imagen que ejecuta redis-server
− FROM : Especificamos cual va a ser la Base Image
− RUN : Para ejecutar e instalar lo necesario
− CMD : Especificar un comando para ejecutar en el startup
96. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 2: Creación de una Imagen(2)
vim Dockerfile
FROM alpine
RUN apk add --update redis
CMD ["redis-server"]
$docker build -t lmtbelmonte/redis:latest .
97. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 3: Creación del contenedor
# Listamos las imagenes que existan en docker local
$ docker images
# recuperamos la imagen para ejecutar un contenedor
$ docker container run --name redis-tlf:1.0
#Listamos los contenedores
$ docker container ls
98. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Default Networking Driver
Bridge es es la red docker0 en todas las instalaciones de Docker.
Se puede cambiar con la opción docker run --network = <NETWORK>,
es parte del stack de red de un host y se puede ver :
$ip addr show
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group
default
link/ether 02:42:0a:c8:80:f0 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
99. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 4: Creación de redes
# Crear una nueva red
$ docker network create br1
# Crear un contenedor para usarlo con puerto 8081 -> 80 en la red por defecto
$ docker container run -d --name network-test03 -p 8081:80 nginx
# Crear un contenedor para usarlo con puerto 8082 -> 80 en la red br1
$ docker container run -d --name network-test04 -p 8082:80 --network br1 nginx
# comprobamos ejecución del contenedor y vemos que puerto (ps)
# Como vemos está mapeado el puerto 8081/8082-->80/tcp de los containers
# Comprobamos que está accesible con curl ( también con la IP)
$ curl localhost:8081/8082 ( aparecera la pagina de bienvenida de Nginx)
100. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 5: Inspección de Containers
# Inspeccionamos container network-test03/04 para ver red asignada
$ docker container inspect network-test03/04
# Creamos un container en br1 para hacer ping a los contenedores creados previamente
$ docker container run -it --name lmt-ping --network br1 centos
# Conectamos los containers a la misma red
$ docker network connect br1 network-test03
# re arrancamos container
$ docker container start -ia lmt-ping
# Hacemos ping desde lmt-ping a network-test03
ping 172.18.0.4
101. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 6: Red Bridge con Subnet/gateway
# Creación de una red bridge con su subnet y gateway
$docker network create --subnet 10.1.0.0/24 --gateway 10.1.0.1 br02
# ejecutamos ifconfig para ver el bridge interface for br02:
$ ip addr
# inspeccionamos la red br02
$ docker network inspect br02
# Purgamos todas las redes no usadas
$ docker network prune
102. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 7: Networking entre 2 Containers
# primero creamos la internal network:
docker network create -d bridge --internal localhost
# Creamos un contenedor con MySQL que este conectado a localhost utilizamos el flag -e
docker container run -d --name test_mysql
-e MYSQL_ROOT_PASSWORD=P4sSw0rd0
--network localhost mysql:5.7
# Creamos un container que pueda hacer ping al MySQL container:
docker container run -it --name ping-mysql
--network bridge
centos
103. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
EJ 7: Networking entre 2 Containers
# Connect ping-mysql to the localhost network:
docker network connect localhost ping-mysql
# Rearrancamos y nos attachamos ( -a) al container:
docker container start -ia ping-mysql
docker container run -it --name cant-ping-mysql centos
104. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Container Storage Interface
✓ Estándar para exponer sistemas de
almacenamiento (Block and File storage) en
contenedores a Orquestadores como
Kubernetes.
✓ Permite exponer nuevos sistemas de
almacenamiento en Kubernetes sin tener que
tocar el código central de Kubernetes.
105. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Operaciones Básicas Volúmenes
$ docker volume
create Crear un volumen.
inspect Información detallada de uno o más volúmenes.
ls Listar volúmenes.
prune (Purgar)Eliminar todos los volúmenes no usados.
rm ELiminar uno o varios volúmenes.
106. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 8: DB Mysql + Volumen persistente
1. Creamos un volumen persistente
$ docker volume create mysql_data
2. Creamos el contenedor con ese volumen
$ docker container run -d --name app-database
--mount type=volume,source=mysql_data,target=/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=P4ssW0rd0!
mysql:latest
107. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 8: Mysql + Volumen persistente
Connect ping-mysql to the localhost network:
docker network connect localhost ping-mysql
Rearrancamos y nos attachamos ( -a) al container:
docker container start -ia ping-mysql
109. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 9: Wordpress+Mysql+PersistentV
# Creación de dos contenedores independientes uno con wordpress y Apache y otro con Mariadb
# primero creamos dir wordpress y nos cambiamos al este dir
docker container run --name wordpressdb -v "$PWD/database":/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=Tele2021
-e MYSQL_DATABASE=wordpress -d mariadb:latest
# hacemos un pull de wordpress y ejecutamos el container
docker pull wordpress
docker container run --name wordpress -v "$PWD/html":/var/www/html
-e WORDPRESS_DB_PASSWORD=Tele2021
--link wordpressdb:mysql -p 80:80 -d wordpress
110. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 9: Wordpress+Mysql+PersistentV
# Accedemos a wordpress a través de la ip pública del host
http://<public IP>/wp-admin/install.php
# configuramos el site
# creamos uno de pruebas para ver como el volumen persiste
# Forzamos una caída del container
docker container stop wordpress
# comprobamos que el volumen sigue
# arrancamos el container y comprobmaos que es el mismo site
docker container start wordpress
114. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Arquitectura Kubernetes
El Máster es responsable de administrar el clúster.
− Coordina todas las actividades en su clúster
− Plannea las aplicaciones
− Mantiene el estado deseado de las aplicaciones
− Escala las aplicaciones
− Lanzar nuevas actualizaciones
No se deben ejecutar contenedores en el master
116. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Master - Api Server
✓ Válida y configura datos para los objetos de la
API que incluyen pods, servicios, controladores
de replicación y otros.
✓ Atiende las operaciones REST y proporciona la
interfaz para el estado compartido del clúster a
través del cual interactúan todos los demás
componentes.
117. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Master - etcd
✓ K8s Necesita una base de datos distribuida.
✓ etcd facilita el almacenamiento de datos en un
clúster y la observación de cambios en esos datos.
Kubernetes usa etcd como su base de datos.
✓ Guarda toda la configuración del clúster
✓ Guarda el estado real y el estado deseado
✓ Monitoriza los cambios del estado.
✓ Si divergen, Kubernetes realiza cambios para conciliar
el estado real y el estado deseado.
118. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Master - Scheduler
✓ Observa los Pods recién creados que no tienen ningún nodo
asignado.
✓ Por cada Pod que descubre, se hace responsable de encontrar
el mejor nodo para ejecutar ese Pod.
✓ Los nodos que cumplen los requisitos para un Pod se
denominan nodos factibles, sino se queda sin colocar
✓ Ejecuta un conjunto de funciones para calificar los Nodos
factibles y elige el de la puntuación más alta.
✓ Para las decisiones de colocación hay requisitos individuales y
colectivos, restricciones de HW/SW, políticas, Afinidad y
anti-afinidad, localidad de datos ..
120. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Master - Kube Controller Manager
✓ Daemon que incorpora los control loops básicos k8s.
✓ Un control loop es un bucle sin terminación que
regula el estado del sistema.
✓ Un controller observa el estado del clúster a través
del Apiserver y realiza cambios para llegar al desired
state.
✓ Los Controllers Básicos que vienen con k8s
− replication controller,
− endpoints controller,
− namespace controller,
− service accounts controller.
121. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Master - Cloud Controller Manager
✓ Permite que el código del cloud provider y el núcleo
de Kubernetes evolucionen de forma independiente.
✓ Se ejecuta junto con el Controller manager, el API
Server y el Scheduler.
✓ Se integra fácilmente con otros cloud providers
mediante el uso de complementos.
✓ Sus funciones son
− Node controller
− Route controller
− Service controller
122. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Componentes Nodo
El nodo es una VM/Física- worker en el clúster k8s.
− Tiene un Kubelet, agente para administrar
comunicarse con el master.
− Tiene instalado docker/rkt para los containers
− El clúster k8s en producción debe tener un
mínimo de tres nodos.
123. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Componentes Nodo
✓ Kubelet
− Ejecuta y gestiona los containers en el nodo y habla con API
✓ Kube-proxy
− Hace de balanceador entre los elementos de la App
✓ Container runtime
− Ejecutable que corre los containers(Docker, rkt, containerd )
127. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
K8s Volume Drivers
✓ Para poder utilizar el almacenamiento en cloud
de los diferentes proveedores.
✓ Utilizamos storage clases
✓ De esta forma tenemos almacenamiento
ilimitado sin necesidad de provisionar
previamente
✓ Ejemplo de un volumen AWS EBS tipo gp2 y con
expansión dinámica
https://kubernetes.io/docs/concepts/storage/storage-classes/
128. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
K8s Secrets
# Creación de un secreto para guardar la root password
$ kubectl create secret generic mysql-root-pass --from-literal=password=R00t
# Creación de usuario y pass de mysql
$ kubectl create secret generic mysql-user-pass --from-literal=username=callicoder
--from-literal=password=c@ll1c0d3r
# Listar los secretos
$ kubectl get secrets
# Describir los secretos
$ kubectl describe secrets
129. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
k8s Deployment.yml
✓ ApiVersion
− Versión del API de K8s que indica el path
✓ Kind
− Es el tipo de Objeto que se quiere crear
✓ Metadata
− id unica el objeto, nombre, UID, namespace
✓ spec
− Estado deseado y características que queramos que tenga.
✓ status
− Estado actual, se comprueba constantemente para que
coincida con el definido en el yaml
130. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 10: Creación de un Pod nginx
# Ejecutamos directamente desde la bash la
creación del fichero y ejecución
$ cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
EOF
# Creamos primero el fichero nginx.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
# Ejecutamos el comando kubectl para crearlo
$ kubectl create -f nginx.yml
lmtbelmonte@lmt:~/kubernetes$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 11m
131. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 11: Creación de un Deployment
# Creamos el objeto Deployment con kubectl
kubectl create -f nginx-deploy.yml
# Describimos el deployment en Yaml
kubectl get deployment nginx-deployment -o yaml
# Listamos los pods que ha creado el deployment
kubectl get pods --show-labels
# Etiquetamos los pods para agruparlos
kubectl label pods nginx-deployment-5c6892j6l9 env=prod
132. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
K8s HPA con StatefulSets
El soporte de autoscaling para Statefulsets
Horizontal Pod Autoscaling solo esta funcional
desde la versión 1.9 kubernetes.
133. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 12: Creación de un Service
# Creamos el objeto Service con kubectl
kubectl create -f nginx-service.yml
# Describimos el servicio en yaml
kubectl get service nginx-nodeport -o yaml
# Listamos los servicios que hay en el cluster
kubectl get services -o wide
134. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 13: Creación de un Service(2)
# Creamos un pod BusyBox para acceder al pod
kubectl create -f busybox-pod.yml
# Describimos el servicio
kubectl get pod -o yaml
# Listamos los pods que hay en elcluster
kubectl get pods -o wide
135. Fundamentos Multi/Hybrid Cloud MULTI-HYBRID-CLOUD-Fundamentals v1
Ej 14: App Stateful(Mysql+Replicas)
✓ 2 Config-map uno para el master y otro para
slaves
✓ 2 Servicios uno para R/W y otro para read-only
✓ Creamos la BD y una tabla test
✓ Insertamos valores de prueba “Hola Mundo” y
hacemos select
✓ Comprobamos que el servicio distribuye la carga
✓ Simulamos un fallo en el Health-check de un pod
✓ Comprobamos como la carga pasa al otro pod
✓ Borramos un Pod y comprobamos como los recrea
automáticamente
✓ Fusilamos un Nodo , vemos como hace un Cordon
y un Evict
✓ Escalamos los slaves para incrementar las
réplicas