Ir al contenido principal

Dominando las Primitivas de Kubernetes: La Clave para Aplicaciones Autónomas. Bloque 2. Tema 2.5 del CKA.


Kubernetes se ha convertido en el estándar para la orquestación de contenedores, no solo por su capacidad de ejecutar aplicaciones en clústeres distribuidos, sino también por los mecanismos avanzados que ofrece para garantizar que estas aplicaciones sean autosuficientes, es decir, capaces de recuperarse automáticamente de fallos y de escalar según sea necesario. En este artículo, profundizaremos en las primitivas clave que Kubernetes utiliza para gestionar estas aplicaciones autosuficientes y cómo se configuran para mantener una alta disponibilidad y rendimiento en tus cargas de trabajo.

Definición:

 Una primitiva es un componente básico o unidad fundamental que se utiliza para construir y gestionar aplicaciones dentro del clúster. Son las piezas esenciales sobre las que se estructura y organiza todo el sistema, como los Pods, Service, ReplicaSet, Deployment, StatefulSet, DaemonSet, Jobs y Cronjobs.

Estas primitivas son los recursos que Kubernetes pone a disposición para gestionar las cargas de trabajo (workloads) y otros aspectos del sistema.    

Primitivas de Kubernetes para Aplicaciones Autosuficientes

Las primitivas de Kubernetes son los bloques fundamentales que permiten construir y desplegar las cargas de trabajo de las aplicaciones. Entre estas se encuentran recursos como Pods, Servicios, ReplicaSets, Deployments, StatefulSets y CronJobs. Cada uno de estos recursos tiene su rol en la orquestación de aplicaciones, desde la ejecución básica hasta la programación avanzada, escalado y recuperación automática.

Ejemplo de ReplicaSets y la Recuperación de Pods Fallidos

Una de las primitivas más importantes es el ReplicaSet, que garantiza que el número deseado de réplicas de un Pod esté siempre en ejecución. Si un Pod falla, Kubernetes detectará este fallo y creará uno nuevo para cumplir con el estado deseado. Esto asegura que la carga de trabajo no se vea interrumpida por fallos ocasionales de los Pods o de los nodos donde se ejecutan.

yaml:

apiVersion: apps/v1 kind: ReplicaSet metadata: name: example-replicaset spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: my-app-image:v1

Este ejemplo asegura que siempre haya 3 réplicas del Pod en ejecución, y si una falla, Kubernetes la reemplazará de inmediato.

Autosuficiencia Mediante Pruebas de Salud (Health Checks)

Las pruebas de salud son fundamentales para garantizar que los contenedores estén funcionando correctamente. Kubernetes proporciona tres tipos principales de probes (sondas) que permiten monitorear el estado de las aplicaciones y asegurarse de que se comportan como se espera:

  1. Startup Probe: Se utiliza para verificar si una aplicación se ha inicializado completamente antes de recibir tráfico.
  2. Readiness Probe: Monitorea si el contenedor está listo para manejar solicitudes. Si falla, Kubernetes dejará de enviar tráfico a ese Pod hasta que vuelva a estar listo.
  3. Liveness Probe: Verifica si un contenedor está funcionando correctamente. Si falla, Kubernetes reiniciará el contenedor automáticamente.
Ejemplo de Liveness Probe con Exec

A continuación, un ejemplo de cómo configurar una liveness probe que ejecuta un comando dentro del contenedor. Si el comando devuelve un código de salida diferente de cero, Kubernetes considerará que el contenedor está fallando y lo reiniciará.

yaml:

spec: containers: - name: my-container image: my-app-image livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5

Este probe ejecutará el comando cat /tmp/healthy cada 5 segundos, verificando si el archivo existe. Si no existe o el comando falla, Kubernetes reiniciará el contenedor.

Programación de Pods y Escalado Automático

La programación de Pods en Kubernetes es el proceso mediante el cual el Scheduler decide en qué nodo del clúster debe ejecutarse cada Pod, basándose en la disponibilidad de recursos y otras restricciones. Este proceso asegura una distribución uniforme de las cargas de trabajo, minimizando el impacto de posibles problemas de hardware o de infraestructura.

Cluster Autoscaler y Horizontal Pod Autoscaler (HPA)

El Cluster Autoscaler es responsable de ajustar la cantidad de nodos en el clúster según la demanda. Si Kubernetes detecta que no hay suficientes recursos disponibles para ejecutar nuevas réplicas de Pods, el Cluster Autoscaler añadirá más nodos automáticamente.

Por otro lado, el Horizontal Pod Autoscaler (HPA) ajusta el número de réplicas de Pods basándose en el uso de recursos, como CPU o memoria. Esto es crucial en aplicaciones que experimentan picos de tráfico, ya que el HPA aprovisionará más Pods para manejar el aumento de la carga.

bash:

kubectl autoscale deployment my-app-deployment --cpu-percent=50 --min=2 --max=10

Este comando configura el HPA para que mantenga entre 2 y 10 réplicas de Pods, escalando automáticamente según el uso de CPU.

Especificación de Recursos y Scheduling de Pods

Kubernetes permite configurar solicitudes y límites de recursos para garantizar que los Pods solo se programen en nodos que puedan satisfacer sus necesidades de CPU y memoria.

Ejemplo de Configuración de Recursos
yaml:

resources: requests: memory: "256Mi" cpu: "200m" limits: memory: "512Mi" cpu: "500m"

En este ejemplo, el contenedor solicita 200 milicores de CPU y 256 MiB de memoria, y tiene un límite máximo de 500 milicores de CPU y 512 MiB de memoria. Estos valores permiten a Kubernetes gestionar de manera eficiente los recursos del clúster y evitar la sobrecarga de los nodos.

Estrategias de Actualización y Autosuficiencia

Kubernetes también ofrece estrategias avanzadas de actualización, como RollingUpdate y Recreate, que aseguran que las actualizaciones de la aplicación se realicen sin interrupciones o con el menor impacto posible.

  • RollingUpdate: Reemplaza los Pods de manera gradual, uno por uno, minimizando el impacto en el servicio.
  • Recreate: Elimina todos los Pods antiguos antes de lanzar los nuevos, útil cuando no es posible que diferentes versiones convivan al mismo tiempo.
  • Rollback: Permite volver rápidamente a una versión anterior si algo sale mal durante el despliegue.
bash:

kubectl rollout undo deployment my-deployment

Este comando deshace el último despliegue y restaura la versión anterior de la aplicación.

Comentarios

Entradas populares de este blog

Autenticación y Autorización (Kubernetes).

La autenticación en Kubernetes es un aspecto crítico para la seguridad y control de acceso dentro de un clúster. Kubernetes proporciona varios mecanismos de autenticación para usuarios y cuentas de servicio, que deben pasar a través del API Server para realizar cualquier operación. En este artículo, revisaremos cómo funciona la autenticación y cómo puedes usar herramientas como kubectl y curl para interactuar de manera segura con el clúster. En primer lugar, ¿Qué es la autenticación y la autorización? •     Autenticación:  Es el proceso de verificar quién es un usuario. Responde a la pregunta "¿Quién eres?". •     Autorización: El proceso de determinar qué acciones puede realizar un usuario autenticado. Responde a la pregunta "¿Qué puedes hacer?". Primer paso: Autenticación. La autenticación en Kubernetes es el proceso mediante el cual el sistema verifica la identidad de los usuarios y cuentas de servicio que intentan acceder al clúster.  ...

Tip 1. Exámen CKA. Economiza y optimiza tu tiempo; Usa --help con el paginador Less en la ayuda.

📘 Domina los comandos --help y el uso de less en el examen CKA Durante el examen CKA (Certified Kubernetes Administrator) , uno de los recursos más potentes y completamente permitidos es el uso del --help en los comandos de Kubernetes. Además, puedes combinarlo con el paginador less para buscar y navegar fácilmente entre opciones. ✅ ¿Está permitido usar --help ? Sí, está 100% permitido . Puedes usar el --help de cualquier comando disponible en el entorno del examen: kubectl --help kubeadm init --help kubelet --help kubectl explain pod.spec.containers Estos comandos muestran la ayuda y las opciones disponibles directamente desde el sistema, sin necesidad de ir a la documentación. 🔍 ¿Cómo usar less para buscar rápidamente? Cuando la salida del comando es larga, puedes usar | less para verla de forma paginada y navegar más cómodamente. kubeadm init --help | less Una vez dentro de less , puedes buscar cualquier texto escribiendo /texto . Por ejemplo: /pod-networ...

TLS Bootstrapping en Kubernetes: Qué es, cómo funciona y por qué importa en el examen CKA

                                                       Uno de los conceptos que a menudo pasan desapercibidos en la administración de Kubernetes —pero que resultan clave tanto en entornos reales como en el examen CKA— es el TLS Bootstrapping . En este artículo entenderás qué es, cómo funciona, qué lo diferencia del kubeadm join tradicional y cómo puede aparecer en el examen. ¿Qué es TLS Bootstrapping? TLS Bootstrapping es el proceso por el cual el kubelet , el agente que corre en cada nodo, obtiene automáticamente un certificado TLS firmado por el clúster para autenticarse con el kube-apiserver . En otras palabras: permite que un nuevo nodo se una de forma segura al clúster sin necesidad de copiar manualmente los certificados. ¿Por qué es necesario? Cuando añades un nuevo nodo worker, su kubelet necesita autentic...