El autoescalado de clúster en Kubernetes es una funcionalidad avanzada que permite ajustar automáticamente el tamaño del clúster en función de la demanda de recursos. Esta capacidad es crucial para mantener la eficiencia y la disponibilidad de las aplicaciones, especialmente en entornos dinámicos y de alta carga.

Conceptos Clave

  1. Cluster Autoscaler: Es el componente principal que se encarga de ajustar el tamaño del clúster. Añade o elimina nodos en función de las necesidades de recursos.
  2. Node Pools: Conjuntos de nodos que pueden ser escalados de manera independiente.
  3. Escalado Horizontal: Añadir o eliminar nodos en el clúster.
  4. Escalado Vertical: Ajustar los recursos (CPU, memoria) de los nodos existentes (no cubierto por el Cluster Autoscaler).

¿Cómo Funciona el Autoescalado de Clúster?

El Cluster Autoscaler monitorea continuamente los recursos del clúster y toma decisiones basadas en las siguientes condiciones:

  • Añadir Nodos: Si hay pods pendientes que no pueden ser programados debido a la falta de recursos, el Cluster Autoscaler añadirá nodos.
  • Eliminar Nodos: Si un nodo está infrautilizado y sus pods pueden ser reprogramados en otros nodos, el Cluster Autoscaler eliminará ese nodo.

Configuración del Cluster Autoscaler

Prerrequisitos

  • Un clúster de Kubernetes en funcionamiento.
  • Permisos adecuados para modificar el clúster y sus nodos.
  • Herramientas de línea de comandos como kubectl y acceso a la consola de administración del proveedor de nube (si se usa un clúster gestionado).

Paso a Paso

  1. Instalación del Cluster Autoscaler:

    • En clústeres gestionados (como GKE, EKS, AKS), el Cluster Autoscaler suele estar disponible como una opción de configuración.
    • Para clústeres autogestionados, se puede instalar el Cluster Autoscaler mediante un manifiesto de Kubernetes.
  2. Configuración del Cluster Autoscaler:

    • Definir los límites de escalado (mínimo y máximo número de nodos).
    • Configurar las políticas de escalado.

Ejemplo de Manifiesto para Cluster Autoscaler

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cluster-autoscaler
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cluster-autoscaler
  template:
    metadata:
      labels:
        app: cluster-autoscaler
    spec:
      containers:
      - name: cluster-autoscaler
        image: k8s.gcr.io/cluster-autoscaler:v1.20.0
        command:
        - ./cluster-autoscaler
        - --v=4
        - --stderrthreshold=info
        - --cloud-provider=gce
        - --nodes=1:10:my-node-pool
        resources:
          limits:
            cpu: 100m
            memory: 300Mi
          requests:
            cpu: 100m
            memory: 300Mi
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /etc/gcp/service-account.json
        volumeMounts:
        - name: ssl-certs
          mountPath: /etc/ssl/certs/ca-certificates.crt
          readOnly: true
        - name: gcp-service-account
          mountPath: /etc/gcp
          readOnly: true
      volumes:
      - name: ssl-certs
        hostPath:
          path: /etc/ssl/certs/ca-certificates.crt
      - name: gcp-service-account
        secret:
          secretName: my-gcp-service-account

Ejercicio Práctico

  1. Configurar un Cluster Autoscaler en un clúster gestionado:

    • Si estás usando GKE, EKS o AKS, habilita el Cluster Autoscaler desde la consola de administración del proveedor de nube.
    • Define los límites de escalado (mínimo y máximo número de nodos).
  2. Verificar el Funcionamiento:

    • Despliega una aplicación que consuma muchos recursos para forzar el escalado.
    • Observa cómo el Cluster Autoscaler añade nodos para satisfacer la demanda.
    • Reduce la carga y observa cómo el Cluster Autoscaler elimina nodos infrautilizados.

Solución del Ejercicio

  1. Habilitar el Cluster Autoscaler en GKE:

    gcloud container clusters update my-cluster 
    --enable-autoscaling
    --min-nodes=1
    --max-nodes=10
    --zone=us-central1-a
  2. Desplegar una Aplicación de Alta Carga:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: high-load-app
    spec:
      replicas: 10
      selector:
        matchLabels:
          app: high-load-app
      template:
        metadata:
          labels:
            app: high-load-app
        spec:
          containers:
          - name: high-load-app
            image: busybox
            command: ["sh", "-c", "while true; do echo 'High Load'; sleep 10; done"]
            resources:
              requests:
                cpu: "500m"
                memory: "512Mi"
    
  3. Verificar el Escalado:

    • Usa kubectl get nodes para ver los nodos añadidos.
    • Usa kubectl get pods para ver los pods distribuidos en los nuevos nodos.

Conclusión

El autoescalado de clúster es una herramienta poderosa para gestionar la capacidad y la eficiencia de los recursos en Kubernetes. Permite a los administradores de clústeres mantener un equilibrio entre la disponibilidad de recursos y el costo, ajustando automáticamente el tamaño del clúster según la demanda. Con una configuración adecuada, el Cluster Autoscaler puede mejorar significativamente la resiliencia y la eficiencia operativa de las aplicaciones desplegadas en Kubernetes.

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