Hola Kubernetes, adiós downgrade !

Izaark
6 min readJan 27, 2020

--

Este es el primer post de una serie de artículos en los que se hablará de kubernetes, que van desde cómo crear nuestro primer pod y terminando en implementaciones con API Gateway y microservicios. Importante: Para usar kubernetes, necesitamos conocer varias tecnologías que van de la mano con k8s, que a lo largo del post se irán mencionando.

Antes de empezar cabe mencionar a Sergio Rodríguez Calvo ya que tiene un post en español del cual me guíe para realizar el mío.

¿ Qué es Kubernetes ?

Kubernetes o también conocido como “k8s(el número 8 son las letras que lleva entre la k y s) es un sistema de código abierto para el deployment automático, escalamiento y administración de aplicaciones en contenedores.

¿ Cuándo usar k8s ?

Kubernetes nos sirve al momento de tener una arquitectura basada en microservicios, si tú tienes un monolito y vamos, sé que tienes uno, k8s no es necesario, con tener la aplicación en un contenedor con docker es suficiente para ti ;) ahora bien, si tienes un monolito pero aun así quieres usar kubernetes también se puede.

Estructura de un cluster de k8s:

Fig. 1: Cluster corriendo 3 contenedores controlados por master

Master : Es el encargado de coordinar actividades del cluster como estados de salud, escalamiento y despliegue de actualizaciones.

Node: Es una máquina en donde uno tiene alojado sus aplicaciones, puede ser en una maquina física o en alguna virtual como en GCP, sería una compute engine o en AWS una EC2.

Echemos un vistazo al nodo:

Fig. 2: Una máquina (node) corriendo 4 contenedores

Pod: Es el nombre que se le da a la aplicación corriendo dentro de un contenedor, como se puede ver cada pod tiene diferentes ip, se recomienda tener una aplicación de docker por pod ya que cada uno debe de contener un microservicio .

Volume: Es la información que deseas almacenar y que sea persistente, sin importar actualizaciones del contenedor.

Veamos un poco de cloud !

Para crear nuestro cluster usaremos Kubernetes Engine (GKE) de GCP, nota: esto tiene un costo, una vez que se termine la prueba de ejemplo se debe eliminar.

Fig. 3: Una vez dentro de la consola de GCP buscamos kubernetes

Usaremos Container Registry de GCP para almacenar nuestra Imagen de docker con la que trabajaremos, recomiendo almacenar aquí tus imágenes de docker, puedes tener la cantidad de imágenes privadas que desees.

Fig. 4: Container Registry de GCP

Importante: Para poder user GKE se debe tener instalado el SDK de GCP y para los comandos de kubernetes instalaremos la herramienta kubectl.

Antes de abrir nuestra hermosa terminal, es importante conocer estos comandos de GCP y k8s:

gcloud container clusters create <cluster-name> — crea un nuevo cluster

gcloud container clusters get-credentials <cluster-name> — obtiene los permisos para nuestro cluster

gcloud container clusters delete <cluster-name> — elimina el cluster

kubectl cluster-info — obtiene información del cluster

kubectl apply -f <.yaml> aplica una configuración a partir de un archivo yaml

kubectl get <resource-name> — lista los recursos

kubectl get all — lista todos los recursos disponibles

kubectl describe <resource-name> — muestra el detalle de cada recurso

kubectl logs — imprime los logs de un contenedor dentro del pod

Ahora sí, veamos el poder k8s !

Creamos nuestro cluster llamado ‘cluster-01’, esto tarda un poco, los datos con que se crea el cluster son por default, pero también se pueden configurar, una vez creado nos saldrá en la consola de GCP, se obtienen los permisos para ingresar al cluster y si todo está correcto nos debe salir en donde está corriendo k8s.

Fig. 5: Creación de cluster
Fig. 6: Cluster en GKE
Fig. 7: Así se ven los 3 nodos (Compute Engine )creados en GCP
FIG. 8: Obteniendo permisos para el cluster
Fig. 9: Información del cluster

Una vez que nuestro cluster este corriendo correctamente, es hora de crear nuestro primer pod, para esto nos guiaremos del siguiente repositorio el cual es una aplicación de prueba en django, una vez dentro veremos una carpeta llamada “deployment”, dentro tendremos 2 archivos, uno llamado “deployment.yaml” el cual es para ejecutar nuestra imagen de docker y correr nuestro contenedor y “service.yaml” que nos sirve para exponer en una IP nuestra aplicación.

Fig. 10: Crea un deployment con la imagen que tenemos en Container Registry
Fig. 11: Expone en una IP nuestra aplicación

Regresando a la terminal, aplicamos una configuración con los archivos descritos, se muestran todos los recursos disponibles, se verifica que todo este ejecutando correctamente, se checa los logs de los pods y se hace una petición a la IP: 35.237.50.7 que nos da el LoadBalancer.

Fig. 12: Se especifica la carpeta donde están los dos recursos a crear
Fig. 13: Muestra los servicios disponibles
Fig. 14: El pod con terminación “qsqdf” esta corriendo exitosamente
Fig. 15: El pod con terminación “rgtdr” esta corriendo exitosamente
Fig. 16: Petición al la IP que nos da el LoadBalancer

¿ Y dónde está la parte de: “Adiós downgrade” ?

Bien, ahora nuestra app necesita un cambio y quiero que me regrese, la ciudad, país, LinkedIn del usuario, bien solo agregamos esos datos, se sube un nueva imagen a container registry y se cambia en “deployments.yaml” la versión que en esta caso ya es la: 1.0.stage.

Fig. 17: Se añaden 3 campos al objeto
Fig. 18: Actualización del archivo deployment.yaml
Fig. 19: Se realizan cambios, en este caso sólo cambio el archivo deployment.yaml

Pero que está pasando en la Fig. 20, bueno se están terminado los pods y así mismo se crearon otros, es decir cundo k8s detecta cambios, en este caso es una actualización de la imagen, k8s solo terminara esos pods hasta que los nuevos estén listos y entonces jamas, repito, jamas habrá downgrade siempre estará una versión de tu app hasta que los pods nuevos estén listos.

Fig. 20: Se terminan los pods qsqdf y rgtdr y se ejecutan el 288wk y cnhpl
Fig. 21: Se verifica que todo se este ejecutando correctamente
Fig. 22: Una vez mas se hace la petición, y ya se reflejan los cambios

Conclusión

Cómo se aprecio en el ejemplo solo se uso una app, es decir un monolito, al ser un ejemplo es viable pero como lo mencione en un principio son varias configuraciones para solo tener todo esto en una app. Personalmente me encanta k8s, ahora lo estoy usando par arquitecturas de microservicios.

¡ Bien ahora que ya creaste tu primer despliegue y entiendes por que ya no hay downgrade, estas listo para que a ti también te encante kubernetes !.

--

--

Izaark

Software Craftsman && Software Engineer && Full Stack Developer && Cloud Architect. More about of me in: Izaark.com.mx