El autoescalado horizontal de pods (Horizontal Pod Autoscaling, HPA) es una característica de Kubernetes que permite ajustar automáticamente el número de pods en una aplicación en función de la carga de trabajo. Esta capacidad es crucial para mantener el rendimiento y la disponibilidad de las aplicaciones en un entorno dinámico.
Conceptos Clave
- Métricas de Escalado: HPA utiliza métricas como la utilización de CPU, memoria u otras métricas personalizadas para decidir cuándo escalar.
- Controlador de Autoescalado: Un componente de Kubernetes que monitorea las métricas y ajusta el número de réplicas de los pods.
- Objetivo de Escalado: El valor deseado de la métrica que se utiliza para determinar si se debe escalar hacia arriba o hacia abajo.
Configuración del Autoescalado Horizontal de Pods
Paso 1: Instalar el Servidor de Métricas
El servidor de métricas es necesario para que HPA funcione, ya que proporciona las métricas de recursos utilizadas por los pods.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Paso 2: Crear un Deployment
Primero, creamos un deployment simple que utilizaremos para el autoescalado.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 resources: requests: cpu: "100m" limits: cpu: "200m"
Aplicamos el deployment:
Paso 3: Configurar el Autoescalado Horizontal
Ahora, configuramos el HPA para el deployment creado. En este ejemplo, escalaremos en función de la utilización de CPU.
Esto crea un HPA que ajustará el número de réplicas del deployment nginx-deployment
para mantener la utilización de CPU en aproximadamente el 50%. El número de réplicas puede variar entre 1 y 10.
Verificar el Autoescalado
Podemos verificar el estado del HPA con el siguiente comando:
La salida debería mostrar algo similar a esto:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-deployment Deployment/nginx-deployment 10%/50% 1 10 1 1m
Ejemplo Práctico
Para ver el autoescalado en acción, podemos generar carga en los pods. Utilizaremos una herramienta como kubectl run
para crear un pod que genere carga.
Dentro del pod, ejecutamos un bucle infinito para generar carga:
Después de un tiempo, deberíamos ver que el número de réplicas del deployment nginx-deployment
aumenta para manejar la carga adicional.
Ejercicio Práctico
Ejercicio 1: Configurar HPA para un Deployment
- Crear un Deployment: Crea un deployment con una imagen de tu elección.
- Configurar HPA: Configura HPA para escalar el deployment basado en la utilización de CPU.
- Generar Carga: Genera carga en los pods y observa cómo HPA ajusta el número de réplicas.
Solución
- Crear un Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:latest ports: - containerPort: 80 resources: requests: cpu: "100m" limits: cpu: "200m"
Aplicar el deployment:
- Configurar HPA:
- Generar Carga:
Dentro del pod:
Conclusión
El autoescalado horizontal de pods es una herramienta poderosa en Kubernetes que permite mantener el rendimiento y la disponibilidad de las aplicaciones ajustando automáticamente el número de pods en función de la carga de trabajo. En esta sección, hemos aprendido a configurar HPA, verificar su estado y generar carga para observar su funcionamiento. En el siguiente tema, exploraremos el autoescalado vertical de pods, que ajusta los recursos asignados a los pods en lugar de su número.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster