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:
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:
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.
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.
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.
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.
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.
¿ 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.
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.
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 !.