Llevamos unos años de transición hacia el cloud. Esto significa un gran volumen de negocio en movimiento, que los grandes de internet (Amazon, Google, Microsoft, IBM…) quieren captar a casi cualquier precio. En esta batalla encarnizada por nuestro software, empezamos perdiendo los developers… si elegíamos un proveedor de Cloud y luego queríamos cambiar a otro era a costa de nuestro sudor y de nuestra sangre.
Afortunadamente para nosotros, uno de estos Big Players estaba perdiendo la guerra: Google. El mercado del Cloud estaba repartiéndose desigualmente a favor de Amazon (principalmente) y Azure (Microsoft). Google Cloud no terminaba de despegar, y eso hizo que Google se replanteara su estrategia. En lugar de competir como proveedor de Cloud, iba a hacer un movimiento que siempre le había dado resultado: pensar en los developers. Así surgió Kubernetes, un sistema Open Source para automatizar el despliegue automático de aplicaciones, su escalado y que nos ayuda a gestionar las aplicaciones basadas en contenedores.
Hoy en día, Kubernetes es el estándar de facto. Todos los proveedores Cloud (Amazon, Azure, Google Cloud, Bluemix…) implementan Kubernetes. Ahora los desarrolladores tienen el poder de cambiar de proveedor sin demasiado dolor. Además, Kubernetes ha favorecido la aparición de nuevos paradigmas y herramientas para la gestión automatizada de aplicaciones escalables basadas en Cloud, como por ejemplo el concepto de Infraestructure as a Code, implementado por Terraform.io
En este seminario introduciremos Kubernetes, veremos sus puntos más interesantes y guiaremos a los asistentes a través de un ejemplo basado en un proyecto real.
1. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
2. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Who’s that guy
• Director de Innovación en Ingeniería del Software
en Instituto Tecnológico de Informática @ITI_TIC
• 7 años con proyectos comerciales
• Actualmente en proyectos de I+D
• Big Data, Machine Learning, Cloud Computing, Cyber
Physical Systems, Embedded Systems…
• Ex-CTO en www.onlyeco.com
• Buscador de viajes ecosostenibles
• Actualmente EcoDeveloper Advocate
• Formador y ponente
https://www.linkedin.com/in/fjbarrena
https://twitter.com/DogDeveloper
https://github.com/fjbarrena
3. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
i+d en el iti
4. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
kubernetes
the cloud king
5. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
qué es kubernetes
• Kubernetes es un orquestador open source de contenedores
Docker, desarrollado por Google
• Ejecuta y administra aplicaciones dockerizadas en un clúster de
CPUs o GPUs
• Permite múltiples acciones, como:
• Programación de despliegues
• Escalado automático
• Monitorización de contenedores
• Etc…
• Es ””interoperable”” entre proveedores cloud (Amazon, Azure,
Google Cloud, Rackspace…)
• Y por eso se ha convertido en el estándar de facto para desarrollos
basados en cloud
6. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Como lleváis
docker??
7. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
docker (recordatorio)
• Docker es una plataforma de software que permite empaquetar
aplicaciones y todas sus dependencias para poder desplegarlas
fácilmente
• Estos paquetes reciben el nombre de contenedores
8. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Docker image
• Docker permite describir un contenedor (en realidad es una
imagen) a través de un fichero de descripción Dockerfile
9. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Docker image
• Una imagen es un paquete que incluye todo lo necesario para
ejecutar una aplicación
• Código
• Runtime
• Libraries
• Environment variables, archivos de configuración, etc.
• Una imagen de Docker es de solo lectura
• Las imágenes son en realidad un conjunto de capas que se van
superponiendo las unas a las otras
• Cada instrucción, es una nueva capa
• Cuando una imagen se modifica, una nueva capa se crea
10. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Docker image
11. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Docker container
• Un contenedor es una instancia ejecutable de una imagen
• Es decir, a partir de una imagen puedo generar N contenedores
que ejecuten el contenido de esa imagen
• Los contenedores son:
• Aislados por defecto (no se ven los unos a los otros)
• Configurables:
• Almacenamiento
• Visibilidad
• Redes
• Volúmenes, etc.
• Lo que defino es una imagen, lo que ejecuto es un contenedor
12. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
ventajas de docker
13. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
video de algo que de la impresión de escalar
14. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
La
arquitectura
15. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Por qué es importante kubernetes
• Kubernetes es una herramienta muy potente para desplegar
aplicaciones en producción
• Tanto en entornos cloud, como en entornos on-premise
• Se ha convertido en el core de los principales IaaS / PaaS
• Se han construido un montón de aplicaciones que corren,
monitorizan o usan Kubernetes
• No se trata de una solución propietaria de Google
• Forma parte de la Cloud Native Foundation (www.cncf.io)
• Participan en su desarrollo
• Google
• Red Hat
• Meteor
• CoreOS
• Huawei, etc.
16. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
17. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Por qué es importante kubernetes
18. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Donde puedo usar kubernetes
• En Bare Metal. A pecho palomo, yo me lo guiso yo me lo como. Me
compro un clúster de máquinas físicas y me lo instalo.
• Suerte amigos
• Virtualización On Premise. Utilizando algún proveedor, como por
ejemplo OpenStack, VMWare o CloudStack
• Soluciones Cloud. Lo más sencillo. Que me lo gestione otro
• Google Container Engine
• OpenShift
• CoreOS
• EKS (de Amazon)
• CloudFoundry
• AKS (de Azure), etc.
19. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Características principales de k8
• Escalado y autoescalado
• Aumenta o disminuye el número de contenedores necesarios en función
del uso de CPU
• Escalado vertical
• El escalado puede ser manual o automático
• Permite describir reglas para configurar el escalado
20. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
El escalado No es mágico
• Kubernetes nos permite escalar nuestra aplicación
• Pero para eso nuestra aplicación debe estar diseñada teniendo en
cuenta que va a escalar
• La clave para desarrollar aplicaciones escalables fácilmente es:
• Los contenedores que escalan no deben contener estado
• Las aplicaciones deben seguir un paradigma de desacoplamiento
frontend/backend
• Si es posible, utilizad tecnologías de frontend en el cliente (React,
Angular,Vue…)
• Desarrollad vuestros contenedores como si pudieran morir en cualquier
momento
21. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Pero paco, si las cpus las usamos así como vamos a…
Francisco Javier Barrena Castillo - @DogDeveloper
22. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
23. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Características principales de k8
• Descubrimiento de servicios y balanceo de carga
• K8s asigna a los contenedores su propias direcciones IP
• También un nombre DNS único para un conjunto de contenedores
• K8s se ocupa del balanceo de carga, solo tenemos que configurarlo
• Autorreparación
• Shit happens. Los contenedores caen.
• En caso de fallo, K8s se ocupa de reiniciarlo automáticamente
• A veces no son los contenedores los que caen, a veces es el propio K8s
• Incluso en estos casos, K8 se autorrepara
• Bueno… con alguna salvedad que veremos después
24. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Características principales de k8
• Despliegues y rollbacks automáticos
• Cuando actualizamos un contenedor, o cambia su configuración, K8
despliega los cambios de forma progresiva
• Mientras efectúa los cambios, monitoriza la salud de los contenedores,
asegurando que no mata todas las instancias al mismo tiempo
• En caso de fallo, hace un rollback a los contenedores de la versión anterior
• Planificación
• K8s se encarga de decidir qué nodo ejecutará qué contenedor
• Esta decisión se hace en función de los recursos que requiera, y a otras
restricciones (generalmente de localidad)
• Mezcla cargas de trabajo críticas y best-effort para favorecer la utilización y
el ahorro de recursos
• Se puede configurar el planificador en base a nuestras necesidades
25. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Características principales de k8
• Gestión y configuración de secrets
• Los contenedores Docker son geniales, pero son demasiado transparentes
• Históricamente, si un contenedor necesita una contraseña, esta se
suministra como parámetro de entrada
26. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
27. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Características principales de k8
• Gestión y configuración de secrets (cont.)
• En K8s esa información se almacena en secrets
• Tanto la configuración de la aplicación, como los secrets, se despliegan y
se actualizan sin tener que reconstruir la imagen Docker, ni exponer la
información
• Orquestación del almacenamiento
• Uno de los puntos calientes de estas arquitecturas descopladas y
distribuidas es la gestión del almacenamiento
• K8s implementa un sistema de volúmenes que permite configurar el
almacenamiento, y asociarlo a los contenedores.
• Ese almacenamiento puede ser de varios tipos, puede ser local, estar en
AWS o en un sistema de almacenamiento en red como NFS
28. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
instalación de kubernetes
29. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
30. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
instalación de kubernetes para trastear
• Si vas a trastear con Kubernetes, mejor en Windows o en Mac
• Es mucho más sencillo configurar un entorno de desarrollo o pruebas
• Si estás en Ubuntu…
• Te lo vas a tener que currar más
• Si quieres saber cómo se instala en Ubuntu tenemos un curso que
empieza en unas pocas semanas…
• Kubernetes, from zero to hero
• https://www.iti.es/oferta-formativa/kubernetes/
• 24 horas de curso
• Descuentos para asociados
31. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes en mac
• Kubernetes funciona sobre Docker
• Así que primero hay que instalar Docker Desktop
• https://www.docker.com/products/docker-desktop
• Descargar y seguir las instrucciones
• Una vez instalado y arrancado, pulsamos sobre el icono de la
ballenita de Docker
32. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes en mac
• Pulsamos sobre la opción ‘Kubernetes’. Aparecerá una ventana de
confirmación para la activación de Kubernetes
• Si no funciona al pinchar sobre Kubernetes
• Shit happens…
• Pinchamos sobre Preferences, y seleccionamos la pestaña
‘Kubernetes’
33. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes en mac
34. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes en mac
35. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes en mac
36. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes en mac
37. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Arquitectura básica de kubernetes
38. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Arquitectura
39. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Como funciona kubernetes
• Kubernetes es un sistema muy complejo, especialmente si lo
comparamos con sus predecesores como Docker Swarm
• Para entender bien como funciona Kubernetes por dentro,
debemos conocer los conceptos y principios subyacentes
40. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
El estado deseado
• El Desired State es un de los conceptos más core de Kubernetes
• La idea está en que tú defines el estado deseado de un
contenedor (en realidad de un Pod, luego veremos lo que es)
• Kubernetes siempre tratará de que tu contenedor se encuentre en
el estado deseado
• De modo, que si falla o el contenedor deja de funcionar,
Kubernetes recreará el contenedor basándose en la definición del
estado deseado
• ¿Quién se encarga de velar por los contenedores? Kubernetes
Master, como parte del Kubernetes Control Plane.
• Kubernetes ofrece un CLI (kubectl) que nos permite modificar el
estado deseado de un contenedor por línea de comandos
41. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Ejemplo de Deployment.yaml
42. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes objects
43. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes objects
• El estado de las entidades del sistema de cualquier instante de
tiempo se representa con Kubernetes Objects
• Al mismo tiempo, actúan como una capa adicional de abstracción
de Docker
• De modo que podemos interactuar directamente con instancias de
Kubernetes Objects, en lugar de con contenedores
• Esto es interesante porque, aunque K8s se desarrolló específicamente
para Docker, no se cierra la posibilidad de que admita más tipos de
contenedores (de hecho, ya lo hace)
• Con Kubernetes Objects nos aseguramos de que, sea cual sea el sistema
de contenedores subyacente, nuestra configuración no cambiará
• Lo Kubernetes Objects básicos son los siguientes
44. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
pod
• Un Pod es la unidad mínima de despliegue de K8s en un nodo
• Contiene uno o más contenedores que deben ejecutarse juntos
• Puedo definir un Pod como quiera, incluso con contenedores que no
tendrían porqué ejecutarse juntos
• El modelo es abierto, me permite configurar lo que quiera
• Pero la idea de un Pod es que contenga contenedores relacionados, para
aprovechar el principio de localidad
• Además, es la unidad mínima de replicamiento, por lo que también tiene
sentido desde ese punto de vista
• Un Pod comparte almacenamiento y dirección IP
• Los Pods son efímeros. Cuando un Pod se cae o se cierra, toda la
información que contienen desaparece
45. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Definición de un pod
46. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Creación y gestión de un pod
• Creación de un pod (asumiendo fichero nginx.yaml)
• Listar todos los pods
47. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Creación y gestión de un pod
• Obtener en qué nodo del clúster se ejecutan los pods
• Eliminar un pod
48. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Creación y gestión de un pod
• Obtener los logs de un pod
• Conectarme a un pod (entrar a la consola)
49. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
labels
• Los Labels nos permiten etiquetar los recursos de K8s, como por
ejemplo un Pod, con información del tipo clave/valor
• Sirven para seleccionar recursos, como por ejemplo visualizar los
Pods que tienen un label con un determinado valor
50. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
labels
• Los labels se definen en el fichero YAML, en la sección metadada,
aunque también podemos añadir labels a elementos ya creados
• Podemos mostrar los labels así
51. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
labels
• Los labels se definen en el fichero YAML, en la sección metadada,
aunque también podemos añadir labels a elementos ya creados
• Podemos mostrar los labels así
52. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
volumes
• Los Pods son efímeros
• La información que almacenemos en ellos no es persistente
• Pensad en que los Pods son la RAM de Kubernetes
• Un volumen es un almacenamiento persistente que se puede
asociar a un Pod
• Pensad en que los volúmenes son los discos duros de Kubernetes
• En realidad, el concepto de volumen está totalmente fusilado del
propio Docker
• Los volúmenes se definen en el mismo fichero YAML del Pod
53. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
volumes
54. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
volumes
• En la sección volumes se definen los volúmenes disponibles
• En la sección volumeMounts indicamos los puntos de montaje
• Existen varios tipos de volúmenes
• hostPath
• Corresponde a un directorio o fichero del nodo donde se crea el Pod
• En nuestro ejemplo, se ha montado en el directorio /home del contenedor
• Solo es interesante cuando el Pod no va a estar en multinodo ya que
• La información no se replica entre nodos
• Por tanto, el contenido puede variar (y variará) dependiendo del nodo donde se aloje
POD 1
10.1.1.1
Fichero1.zip
POD 2
10.1.1.3
Fichero2.zip
https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
55. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
volumes
• Existen varios tipos de volúmenes (continuación)
• gitRepo (deprecated L)
• El contenido corresponde con el clone a un repositorio de GitHub
• Súper interesante para CI/CD
• Aún está disponible, pero en futuras versiones será eliminado
• La alternativa, crear un emptyDir y hacer el clone del repositorio a mano
• emptyDir
• El contenido de este volumen se elimina cuando el pod se cierra o se cae
• Útil para compartir información entre contenedores de un mismo pod
• azureDisk, awsElasticBlockStore, gcePersistentDisk
• nfs
• El contenido de este volumen se engancha a un NFS (Network File System)
• Similar a emptyDir, pero los datos se mantienen cuando el Pod se cierra
• Similar a hostPath, pero sin la restricción de multinodo al ser un sistema en red
https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
56. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
volumes
• Existen varios tipos de volúmenes (continuación)
• secret
• Volumen pensado para el paso de información sensible
• Se pueden almacenar secrets en Kubernetes API y montarlos como ficheros para usarlos en los
Pods directamente
• Esto es interesante porque no acoplamos el sistema de secrets de Kubernetes a nuestra
aplicación
• Para ella se trata de un fichero ’normal’
• Implementados sobre tmpfs (RAM-backed filesystem), por lo que la información nunca es
almacenado de modo permanente
• Requiere de la creación previa de un secret. Se puede crear a través del siguiente comando
https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
57. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
volumes
• Existen varios tipos de volúmenes (continuación)
• secret (continuación)
• La definición del volumen podría ser la siguiente à
• Los secrets se consumen directamente así !
https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
58. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
¿me vale solo con un pod?
Pod 1
Frontend
Pod 3
Backend
Pod 2
Backend
10.1.1.1
10.1.1.2
10.1.1.3
59. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
¿me vale solo con un pod?
Pod 1
Frontend
Pod 3
Backend
Pod 4
Backend
10.1.1.1
10.1.1.22
10.1.1.3
60. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
¿me vale solo con un pod?
Pod 1
Frontend
Pod 5
Backend
Pod 4
Backend
10.1.1.1
10.1.1.22
10.1.1.53
61. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
service
• Un servicio define un conjunto lógico de Pods y sus políticas de
acceso
• Si hay más de un pod, balancea la carga entre ellos
• Se trata de una abstracción que define un conjunto de Pods que
implementan típicamente un microservicio
• Los servicios ofrecen una dirección virtual (CLÚSTER-IP) y un
nombre que identifica al conjunto de Pods que representa
• Se implementa con IPTABLES; por lo que estos nombres solo valen dentro
de kubernetes
• Si los quiero también fuera, tengo que instanciar y configurar un DNS…
• La conexión al servicio se puede realizar desde otros pods o desde
el exterior
62. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
service
63. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
service
• Existen diferentes implementaciones de servicios
• ClusterIP
• NodePort
• LoadBalancer
• Cada una tiene sus características, y seleccionaremos la que
queramos en función de nuestras necesidades
64. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
clusterip
• Permite únicamente el acceso interno entre distintos servicios
• Es el tipo por defecto
• Insisto, ¡no permite acceso externo al servicio!
• Aunque hay trukis… (creando un proxy)
• Permite acceso desde el exterior si configuramos nosotros un
proxy
65. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
clusterip
66. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
nodeport
• Abre un puerto para que el servicio sea accesible desde el exterior
• Por defecto, el puerto generado está entre el 30.000 y el 40.000
• Para acceder al servicio, usamos la IP del Kubernetes Master y el
puerto asignado
• Es una multiplexación a nivel de puerto con la IP del Kubernetes
Master
67. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
nodeport
68. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
nodeport
69. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
nodeport
70. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
loadbalancer
• ‘Solo’ disponible para proveedores Cloud
• Provisiona un balanceador de carga para el servicio
• El tipo de balanceador dependerá del proveedor cloud donde tengamos
Kubernetes
71. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
loadbalancer
• Es posible configurar K8s para poder usar LoadBalancer en Bare
Metal
• Para conseguirlo se debe utilizar Ingress, aunque tiene algunas
restricciones
• Solo soporta tráfico HTTP
• Solo para los puertos 80 y 443
• La prioridad de Kubernetes no es el On Premise, son los vendors
de servicios Cloud
• Te lo puedes montar como nos lo montábamos antes,
configurando nuestro propio balanceador de carga como un
Pod+Servicio más de Kubernetes
https://medium.com/@maniankara/kubernetes-tcp-load-balancer-service-on-premise-non-cloud-f85c9fd8f43c
72. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
namespaces
• Instalar un clúster de Kubernetes On Premise (por ejemplo, sobre
bare metal o sobre Open Stack) no es sencillo
• Hay un montón de consideraciones de sistemas que hay que tener en
cuenta
• No es cómodo ni óptimo, por tanto, tener múltiples clústers de
Kubernetes corriendo en una empresa
• Es más caro de instalar
• Es más caro de mantener
• La única justificación puede ser la de aislar el entorno, y la visibilidad, para
diferentes proyectos
• Un namespace es un clúster de K8s virtual que corre sobre un
clúster físico.
• De este modo no tenemos que mantener múltiples clústers de K8s
73. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
namespaces
• Podemos consultar los namespaces activos en nuestro clúster
físico a través del siguiente comando
74. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
namespaces
• K8s tiene por defecto 3 namespaces
• default:
• namespace por defecto para elementos que no tengan definido ningún namespace concreto
• kube-system
• Namespace para los elementos creados por el Kubernetes System. Solo para administración
del clúster.
• kube-public
• Namespace accesible por todos los usuarios
• Incluso por aquellos que no están autenticados
• Se utiliza habitualmente para el uso del propio clúster físico, en los casos en que se quiera
compartir algún recurso entre namespaces
• Por ejemplo, todos mis namespaces necesitan un Kafka, porque es una tecnología que forma parte de
mi stack tecnológico
• En vez de instanciar un Kafka en cada namespace, puedo instanciarlo en kube-public
• De ese modo, el resto de namespaces tendrán acceso a Kafka
• Otro ejemplo: Sonar
75. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
namespaces
• Un namespace se puede definir en un fichero YAML o por línea de
comandos
76. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes controllers
• Estos son los conceptos básicos de Kubernetes
• Son los building blocks sobre los cuales se construyen el resto de
elementos
• Como construir cosas from the scratch es duro, K8s proporciona un
conjunto de objetos preconfigurados que se encargan de
mantener el estado deseado y ofrecen características adicionales.
• Los Controllers más útiles son:
• ReplicaSet
• Deployment
• StatefulSet
• DaemonSet
• Job
77. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Replica set
• ReplicaSet asegura que siempre se ejecute un número de réplicas
de un determinado pod.
• Asegura que hay un conjunto mínimo de pods que están siempre
funcionando y disponibles
• Útil para:
• Evitar caídas de servicio
• Tolerancia a errores
• Escalabilidad dinámica
• Como todo en K8s, los ReplicaSets se definen en un fichero YAML
78. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Replica set
Número de pods
mínimos que van a
estar siempre en
ejecución
Seleccionamos los
pods que vamos a
replicar y controlar
Definición de pods.
No todos tienen
porque aplicar al
ReplicaSet, solo
aquellos que
seleccionemos
79. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Replica set
• Registrar un ReplicaSet en K8s
• Obtener todos los ReplicaSets
80. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
deployment
• El deployment es la unidad de más alto nivel que podemos
gestionar en Kubernetes
• Permite definir diferentes funciones
• Control de réplicas
• Escalabilidad de pods
• Actualizaciones
• Despliegues automáticos
• Rollback a versiones anteriores
• En realidad es un wrapper de un ReplicaSet
• ¿cómo se define?
• Con un YAML (kilométrico), por supuesto
81. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
deployment
Cuántos ReplicaSets antiguos queremos
conservar para poder hacer rollback
Modo de actualización
• RollingUpdate: actualiza los pods a la
nueva versión
• Recreate: elimina los pods antiguos y
crea los nuevos
82. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
deployment
• Como se aplica un deployment en Kubernetes
• Como se consultan
83. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
deployment
• Como se escalan con una regla estática
• Como se escalan con una regla dinámica
• Nota: asume que está activada la opción de horizontal pod
autoscaling en tu clúster
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
84. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes dashboard
• Salvo que seas Sergio Talens, la consola se te va a
hacer bola
• Para un consumo de la información más amable
(aunque menos eficaz), se pueden instalar
herramientas externas al Core de Kubernetes
• Existen muchas herramientas, la mayoría de ellas
libres, pero una de las más extendidas es
Kubernetes Dashboard
• La instalación y (especialmente) acceso al
Kubernetes Dashboard es ’peculiar’
• A continuación un paso a paso…
85. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes dashboard
• Abrimos la consola e instalamos Kubernetes Dashboard
• Arrancamos la UI usando el siguiente comando
• Para acceder al Dashboard copiamos la siguiente dirección
86. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes dashboard
87. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Kubernetes dashboard
88. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Listamos los secrets disponibles en k8s
89. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
obtenemos el token secret
90. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
introducimos el token…
91. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Y ya tenemos acceso al dashboard…
92. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
video de algo que de la impresión de escalar
93. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Nos queda muuuuucho que ver
LOGGING
MONITORING
SECURITY
AUTHENTICATION
NETWORKING
CI/CD
SERVICE MESH
TOOLS
TESTING
SERVERLESS REMOTE DEBUGGING REMOTE PROFILING
94. Copyright 2019-2020 Instituto Tecnológico de Informática (ITI). Prohibida la reproducción total o parcial sin permiso del ITI
Francisco Javier Barrena Castillo - @DogDeveloper
Gracias