El “qué” y el “por qué” de Kubernetes

Juan David Arguello
Bancolombia Tech
Published in
9 min readAug 2, 2024

La dinámica del mundo actual ha apalancado la generación de todo tipo de startups e iniciativas con una fuerte propuesta de valor tecnológico. Las herramientas de diseño UX/UI, los frameworks de desarrollo Frontend/Backend y la actual aparición de los Grandes Modelos de Lenguajes (LLM’s por sus siglas en inglés) han hecho que la construcción de prototipos de software sea más fácil que nunca.

La cuestión hoy en día no es si se puede hacer una aplicación web o móvil rápidamente, sino cuántas personas esperas que la utilicen. Es en este punto donde Kubernetes brilla con luz propia. Un conocimiento superficial de esta herramienta te permitirá desplegar soluciones básicas en poco tiempo, mientras que un conocimiento profundo permitirá que tu solución sea utilizada por miles de millones de personas en todo el mundo, al mismo tiempo, y al menor costo.

En este artículo te contaré diferentes temas de interés, incluyendo algunas de las funcionalidades principales de Kubernetes y cómo tú puedes llegar a dominarlo. Iniciaré por sus fundamentos y arquitectura. Luego, exploraremos juntos las estrategias multi-cloud que mejoran la experiencia de usuario en soluciones que abarcan clientes en diferentes partes del mundo. Después, analizaremos temas referentes a resiliencia y performance. Por último, te explicaré, de forma resumida, cuál podría ser tu roadmap para dominar Kubernetes y, ¿por qué no? ser considerado un experto a nivel mundial.

¿Qué es Kubernetes?

Kubernetes, comúnmente conocido como K8s, es una plataforma de código abierto para la automatización de despliegues, escalado y operaciones de aplicaciones contenerizadas.

Originalmente fue desarrollado por Google, ahora es mantenido por la Cloud Native Computing Foundation — CNCF (puedes conocer más haciendo click aquí). Se trata de una solución altamente popular en la industria TI por su versatilidad, sencillez de uso y robustez. Empresas de alto impacto como OpenAI, Mercedes Benz, Spotify, entre muchas otras, utilizan Kubernetes en el centro de su estrategia de desarrollo cloud.

Figura 1. Línea de tiempo.

Como se aprecia en la Figura 1, Kubernetes celebra en este año 2024 su décimo aniversario. Su existencia se apalancó gracias a la publicación de Golang y Docker dos años antes de su lanzamiento. Desde su donación al CNCF en el año 2015, se impulsó una serie de innovaciones importantes que han hecho de Kubernetes el corazón de la estrategia Cloud en todo el universo corporativo TI.

En Bancolombia, sin ser ajenos a este hecho, adoptamos los primeros clusters de Kubernetes desde el año 2017 a través de las soluciones enterprise ofrecidas por IBM Cloud. A partir del año 2018, construimos nuestros clusters empresariales en AWS. Desde entonces, empleamos Kubernetes como la estrategia central de masificación Cloud para la orquestación de nuestros servicios. Desde el año 2021, apoyamos y apalancamos fundaciones de código abierto de alto renombre como The Linux Foundation y el CNCF, entre otros.

Arquitectura de Kubernetes

Un clúster de Kubernetes se compone de dos tipos de servidores, también conocidos como nodos: Cluster node y Worker node.

El Cluster node es el nodo de orquestación. Se emplea para manejar los objetos, establecer configuraciones de red y recursos del clúster. Si eres desarrollador, ingeniero de software o ingeniero DevOps, tu enfoque principal será establecer las configuraciones base para el correcto funcionamiento de tu aplicación. Es decir que más del 90% de tus actividades las tendrás que concentrar sobre este nodo. Podrás detallar su arquitectura a continuación.

Figura 2. Arquitectura de un Cluster Node.

En la Figura 2 se resume todo el flujo de operación dentro del Cluster Node. En primera instancia, se puede apreciar que dentro del sistema operativo (área sombreada) conviven tres aplicaciones instaladas que garantizan la integridad y el correcto funcionamiento del clúster: Kubadm, Kubectl y el Kubelet, descritas a continuación.

  • Kubeadm: toolkit de administración con el que se define el ciclo de vida del clúster. Altamente útil cuando se requieren realizar tareas de actualización o de adición de nodos dentro de la red de Kubernetes (CNI).
  • Kubectl: línea de comandos usada por los usuarios, normalmente Ingenieros de software o Devops, para comunicarse con el clúster. Se emplea para crear nuevos recursos (sección de api-resources de la Figura 2), manejar configuraciones de red y tareas de monitoreo; como el acceso a logs y consumo de recursos del servidor, entre muchos otros.
  • Kubelet: se trata del agente que corre en todos los nodos, tipo clúster y worker, que asegura el correcto funcionamiento de los contenedores en el servidor. Supervisa constantemente que los pods, con las configuraciones establecidas en la base de datos (etcd), estén vigentes y en estado healthy.

Como se aprecia en la Figura 2, el Kubectl recibe las instrucciones del ingeniero de software, o DevOps, en formato YAML, a través de comandos shell para la creación, eliminación o configuración de los api-resources especificados. El Kubectl informa al Kube-apiserver sobre las especificaciones del usuario, almacena la configuración en la base de datos (etcd); sincronizándose, via Kube-scheduler, para el agendamiento de los recursos en los worker nodes disponibles que hayan sido previamente vinculados al clúster.

Caso de negocio: Tu360 Inmobiliario

Para mayor entendimiento sobre la interacción de los Cluster y Worker nodes durante el despliegue de una aplicación web, tomaremos como ejemplo la aplicación de Bancolombia: Tu360 Inmobiliario. Esta plataforma ofrece créditos para compra de vivienda nueva o usada (para conocer más, haz click aquí). A modo de ejemplo, desplegaremos los siguientes desarrollos.

  • Simulador crediticio: servicio libre (no requiere autenticación) que permite a clientes potenciales estimar el valor de créditos de vivienda y leasing habitacional.
  • Servicio de información: microservicio que identifica clientes potenciales, los valida respecto al sistema de autenticación de la Sucursal Virtual Personas — SVP (servicio externo) y emite un token de regreso que se almacena en el frontend para identificar al cliente en procesos posteriores.
  • Servicio de crédito: verifica con respecto al Servicio de información el token emitido. Recibe los parámetros de la solicitud del crédito, lo valida con respecto a los datos de la SVP y otro microservicio externo de evaluación de riesgos crediticios. Emite un concepto de valoración sobre la solicitud de crédito del cliente.
Figura 3. Arquitectura de Kubernetes aplicada a caso de negocio Tu360 Inmobiliario. Nota: esta es una arquitectura con fines netamente académicos y no representa la realidad del negocio.

Como se aprecia en la Figura 3, Kubernetes, por defecto, distribuye los servicios, también conocidos como pods, dentro de cada uno de los Worker Nodes disponibles. El Kube-scheduler dentro del Cluster Node evalúa la cantidad de nodos y sus recursos para distribuir los pods de forma equitativa y automática. En este ejemplo, se aprecia un namespace por servicio, cada uno con 4 réplicas que garantizan una distribución de la carga proveniente de los usuarios. La decisión del número de réplicas depende de la carga que se espera que reciba la aplicación.

Estrategia Multi-cloud: Performance y Resiliencia

Kubernetes es una herramienta de orquestación agnóstica a la nube. Es decir, puede implementarse con cualquier Cloud Provider (AWS, Azure y GCP, entre otros) o incluso en ambientes on-premise.

Si recuerdas, en la sección anterior, analizamos los detalles de la arquitectura de un clúster. Allí, te habrás percatado que todas las configuraciones de los despliegues, recursos y objetos se almacenan en la base de datos etcd. Es aquí donde reposa el corazón de la estrategia multi-cloud.

A partir de simples snapshots de esta base de datos, podemos aplicar estrategias de DR (“Disaster-Recovery”, por sus siglas en inglés); migración de todas nuestras aplicaciones de un proveedor nube a otro o, incluso, establecer configuraciones de replicación continua que permitan la orquestación de múltiples clústers alojados en diferentes nubes al mismo tiempo. Con esto logramos tener regiones y zonas de disponibilidad en diferentes partes del mundo y permitir a los usuarios tener la mejor experiencia con bajos niveles de latencia y alta disponibilidad.

Ahora, para ver esta estrategia en acción, tomáremos como referencia el ejemplo anterior (Caso de negocio: Tu360 Inmobiliario) y lo evolucionáremos con una estrategia multi-cloud altamente resiliente.

Figura 4. Estrategia Multi-cloud Tu360 Inmobiliario. Nota: esta es una arquitectura con fines netamente académicos y no representa la realidad del negocio.

Como puedes apreciar en la Figura 4, se trata de una arquitectura tipo High-Availability cluster con dos regiones: Colombia (on-premise) y EEUU (AWS). Los pods están distribuidos de tal forma que se garantiza la comunicación por un mismo nodo y en una misma región. Esto no es “casualidad”.

Esta es la muestra de algunas de las posibilidades que se dan desde un punto de vista administrativo para mejorar el performance de una aplicación. Para lograr este comportamiento, se pueden emplear configuraciones que se conocen en Kubernetes como: “Taints & Tolerations” y “Pod affinity”, entre otros.

Existen algunos casos a nivel corporativo documentados, donde se exploran los beneficios de este tipo de estrategias, como el siguiente caso de Mercado Libre, donde estiman incrementos de performance cercanos al 95%.

Adicional, al manejar dos regiones diferentes (una on-premise y otra cloud), se pueden aplicar estrategias de Disaster-Recovery automático que permitan restablecer las soluciones expuestas de una región a otra sin disminuir drásticamente la disponibilidad de los servicios de cara al cliente.

¿Cómo dominar Kubernetes?

Acabamos de tener un abrebocas que nos ha permitido entender qué es Kubernetes y su importancia en el mundo TI. Ahora, vemos porque hay una organización de alto renombre, como el CNCF, que desarrolla innovaciones de computación Cloud centradas en esta herramienta.

Llegados a este punto, la pregunta natural que podríamos hacernos es: “¿ahora qué?, ¿cómo puedo profundizar en este tema?”. Algunas de las respuestas que he encontrado, te las compartiré a continuación.

En primer lugar, entender que existe un programa, a nivel mundial, que reconoce a las personas como expertas en Kubernetes, conocido como “Kubestronaut”. Llegar a ser reconocido como tal, significa que deberías de haber aprobado satisfactoriamente cinco certificaciones: dos de carácter introductorio (associate) y tres certificaciones prácticas de alto nivel.

  1. KCNA: certificación pre-profesional diseñada para candidatos que desean demostrar su conocimiento en la teoría fundacional de Kubernetes y del ecosistema Cloud.
  2. KCSA: certificación pre-profesional donde los candidatos demuestran su conocimiento teórico en la implementación de estrategias que incrementen los índices de seguridad en clústers de Kubernetes.
  3. CKA: certificación oficial donde los candidatos demuestran su dominio práctico en temas referentes a creación y configuración de clústers, manejo de redes, actualización de versiones del clúster y actividades de troubleshooting, entre muchas otras.
  4. CKAD: certificación oficial enfocada en la demostración de habilidades de despliegue de soluciones en Kubernetes, configuración de multi-container pods, estrategias de observabilidad y manejo de logs, entre otros.
  5. CKS: certificación oficial en la que los candidatos buscan demostrar sus habilidades en el aseguramiento de clústers de Kubernetes, aplicaciones contenerizadas y minimización de vulnerabilidades en arquitecturas de microservicios.

Para las primeras dos certificaciones, existe mucho material y video-tutoriales online disponibles. Para las últimas tres certificaciones (CKA, CKAD y CKS) el material empieza a ser cada vez menos abundante. Además de la documentación oficial de Kubernetes, existen cuatro libros que podrían serte de gran utilidad:

  1. Muschko, B. “Certified Kubernetes Application Developer (CKAD) Study Guide”. 2nd Edition. O’Rilley Media, Inc. Url: https://www.oreilly.com/library/view/certified-kubernetes-application/9781492083726/
  2. Muschko, B. “Certified Kubernetes Administrator (CKA) Study Guide”. O’Rilley Media, Inc. Url: https://www.oreilly.com/library/view/certified-kubernetes-administrator/9781098107215/
  3. Muschko, B. “Certified Kubernetes Security Specialist (CKS) Study Guide”. O’Rilley Media, Inc. Url: https://www.oreilly.com/library/view/certified-kubernetes-security/9781098132965/
  4. Arundel, J & Domingus, J. “Cloud Native DevOps with Kubernetes”. Marzo 2019. O’Rilley Media, Inc. Url: https://www.oreilly.com/library/view/cloud-native-devops/9781492040750/

Conclusiones

En el presente artículo logramos, no sólo explorar algunas de las funcionalidades básicas de Kubernetes, sino también algunas de las estrategias que esta herramienta provee para que nuestras aplicaciones sean de alto rendimiento y con altos índices de disponibilidad.

También, logramos entender su importancia en el mundo TI, tratándose del corazón de las diferentes soluciones de software que consumimos en nuestro día a día. Es por ello que existen diferentes certificaciones en The Linux Foundation y el Cloud Native Computing Foundation — CNCF que permitirán llevar tus capacidades al límite y, en caso de conseguir las 5 certificaciones, ser considerado como una de las 300 personas, a nivel mundial, expertas en Kubernetes; también conocidas como Kubestronaut.

¿Tienes alguna pregunta adicional? Déjamela en los comentarios

--

--