2. Raúl Requero García
Arquitecto FullStack en Vizzuality
CTO en MrLooquer (https://mrlooquer.com)
Formador
Twitter: @rrequero
Linkedin: www.linkedin.com/in/requerogarciaraul
Quien soy
3. ¿Porque usar containers?
Server
Host OS
Binarios / librerías
APP
1
APP
2
APP
3
APP
4
Despliegue tradicional
Server
Host OS
APP
1
Despliegue con VMs
Hypervisor
Guest OS
Binarios /
libreríasVM
APP
3
Guest OS
Binarios /
librerías
APP
2
Guest OS
Binarios /
librerías
4. ¿Porque usar containers?
Server
Host OS
APP
1
Despliegue con Contenedores
(Docker)
Docker Engine
Binarios /
librerías
APP
2
Binarios /
librerías
APP
3
Binarios /
librerías
Contenedor
5. Beneficios de usar containers
● Creación y despliegues agiles
● CI & CD: Uso de herramientas de integración continua para la generación y despliegue
● Fácil Rollback
● Separación del mundo Dev y Ops: Desacopla la implementación de la infraestructura
● Métricas: No solo tenemos las del sistema operativo si no también de la aplicación
● Consistencia entre entornos: Se ejecuta lo mismo en todos los entornos
● Aumenta la abstracción: No nos preocupamos de donde se va a ejecutar
● Es más fácil separar conceptos
● Aislamiento de recursos: Rendimiento predecible
● Utilización de recursos: Gran eficiencia
6. ¿Porque usar kubernetes?
● Orquestación y gestión de contenedores: Aplicaciones reales despliegan
muchos contenedores y en distintas máquinas
● Permite crear servicios de aplicaciones que abarcan varios contenedores
● Gestión de volúmenes, red, seguridad, etc
● Distintos niveles de abstracción (Pods)
● Replicación y Autoescalado
● DNS
● Monitorización
● Control de recursos
● etc
7. Un poco de historia
● Creado por Google
● Su precursor fue Borg (Todo Google funciona en contenedores)
● En 2014, Google abrió el proyecto
● En 2015, Google dona el proyecto a la Cloud Native Computing Foundation
8. Que es kubernetes
Es una plataforma de código abierto, extensible y portátil para la gestión de
cargas de trabajo y servicios en contenedores.
Actualmente el ecosistema de kubernetes está creciendo rápidamente y la
plataforma está disponible en numerosos proveedores y formatos
9. Que es kubernetes
● Plataforma de contenedores
● Plataforma de microservicios
● Plataforma cloud portable
10. Conceptos en kubernetes (Cluster)
● Node: Son los nodos de máquinas que están disponibles en el cluster
● Master: Es el nodo que controla y gestiona el cluster. Aquí se originan las
tareas
11. Conceptos en kubernetes (Workloads)
● Pod: Es un conjunto de contenedores desplegados en un nodo. Comparten
la dirección ip, red, etc. Abstraen la red y el almacenamiento de los
contenedores permitiendo más portabilidad entre los nodos.
● Deployment: Controla que los pods esten correctamente y se asegura que
siempre haya el número de réplicas configurado. Además ofrece otras
funcionalidades como rolling-update (actualizar la imagen de un pod sin
necesidad de volver a crear todo)
12. Conceptos en kubernetes (Workloads)
● HPA (HorizontalPodAutoscaler): Este servicio se encarga de escalar un
deployment según la configuración fijada al crearlo y las métricas recogidas
(CPU y otras)
13. Conceptos en kubernetes (Network)
● Service: El Service expone las funcionalidades de los pods. En él
configuramos los puertos que queremos exponer y expone el pod en una ip
que no cambia.
● ClusterIP: Expone el pod en la red interna
● NodePort: Asigna un puerto reservado y redirecciona toda el tráfico
desde ese puerto en todos los nodos al servicio. Se puede acceder
desde: [nodeIP]:[nodePort]
● LoadBalancer: (Google Cloud) Crea un LoadBalancer y asigna una IP
estática al servicio
14. Conceptos en kubernetes (Network)
● Ingress: El ingress crea un load balancer que se puede utilizar para enrutar
el tráfico HTTP(s) a los servicios internos. Se puede utilizar para exponer
varios servicios a una única IP externa.
15. Conceptos en kubernetes (Security)
● Secret: Los secrets son objetos seguros para almacenar passwords, ssh
keys, etc y que pueden ser leídas por el pod que las requiere en el momento
de su despliegue.
● ConfigMap: Se utilizan para guardar ficheros de configuración que se
utilizarán en los pods. Por ejemplo el fichero de configuración de un nginx.
16. Conceptos en kubernetes (Storage)
● Volumes: Conceptualmente, un volumen es un directorio que es accesible
para todos los contenedores de un pod. Todo lo que no se escriba en un
volumen desaparecerá cada vez que el pod/container se destruya.
● PersistantVolumes: Son volúmenes cuyo ciclo de vida es gestionada por
kubernetes. Son recursos que existen independientemente de los pods.
● PersistantVolumenClaim: Es el mecanismo para reclamar un volumen para
un pod.
17. Conceptos en kubernetes (Storage)
NODE
SERVICE
INGRESS
DEPLOYMENT
POD
APP CRON
POD
APP CRON H
P
A
VOLUME VOLUME
PV PV
18. Herramientas
Gestión:
● kubectl: Es una interfaz de línea de comandos para la API de Kubernetes.
Con ella podemos realizar todo lo posible.
● Dashboard: Aplicación web
● API: API Rest
Aplicaciones:
● Helm: Gestor de paquetes para kubernetes - https://helm.sh/
● cert-manager: Aplicación para la gestión automática de certificados -
https://github.com/jetstack/cert-manager
Al principio, las aplicaciones se desplegaban en un solo host, o varios, donde se utilizaba el gestor de paquetes del sistema operativo host para instalarlas. Además al tener las aplicaciones en un mismo host podíamos tener problemas de configuración, seguridad en los procesos, etc.
El siguiente paso fue crear máquinas virtuales (vmware, etc) para intentar salvar estos problemas pero estas imágenes no son portables y además son muy pesadas.
Ahora gracias a la virtualización a nivel de sistema operativo podemos crear entornos de despliegue donde cada contenedor es aislado, tiene su propio sistema de archivos, no ve los procesos de otros contenedores (Seguridad) y además podemos limitar el uso de recursos por contenedor. Además estos contenedores están desacoplados del sistema de archivos y de la infraestructura. son portables a cualquier proveedor.
Además los contenedores son ligeros y rápidos y además al no estar acoplados a los requisitos de infraestructura y ser autocontenidos podemos crearlos en el momento de la compilación /implementación en lugar de en el momento de producción. Esto nos permite utilizar el mismo contenedor que se está utilizando y generando en el desarrollo en los entornos de producción.
Kubernetes se centra en los contenedores. Además orquesta la red, infraestructura de almacenamiento en función de las cargas de trabajo. Todo esto es lo que ofrece un Platform as a Service (Paas) pero con la flexibilidad de la infrastructure as a service (Iaas) y permite la portabilidad entre distintos proveedores de cloud