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
- 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.
- Node Pools: Conjuntos de nodos que pueden ser escalados de manera independiente.
- Escalado Horizontal: Añadir o eliminar nodos en el clúster.
- 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
-
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.
-
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
-
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).
-
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
-
Habilitar el Cluster Autoscaler en GKE:
gcloud container clusters update my-cluster
--enable-autoscaling
--min-nodes=1
--max-nodes=10
--zone=us-central1-a -
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"
-
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.
- Usa
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
- ¿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