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

  1. 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.
  2. Controlador de Autoescalado: Un componente de Kubernetes que monitorea las métricas y ajusta el número de réplicas de los pods.
  3. 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:

kubectl apply -f nginx-deployment.yaml

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.

kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10

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:

kubectl get hpa

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.

kubectl run -i --tty load-generator --image=busybox /bin/sh

Dentro del pod, ejecutamos un bucle infinito para generar carga:

while true; do wget -q -O- http://nginx-deployment; done

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

  1. Crear un Deployment: Crea un deployment con una imagen de tu elección.
  2. Configurar HPA: Configura HPA para escalar el deployment basado en la utilización de CPU.
  3. Generar Carga: Genera carga en los pods y observa cómo HPA ajusta el número de réplicas.

Solución

  1. 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:

kubectl apply -f myapp-deployment.yaml
  1. Configurar HPA:
kubectl autoscale deployment myapp-deployment --cpu-percent=50 --min=1 --max=10
  1. Generar Carga:
kubectl run -i --tty load-generator --image=busybox /bin/sh

Dentro del pod:

while true; do wget -q -O- http://myapp-deployment; done

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

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

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados