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
kubectly 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-accountEjercicio 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 nodespara ver los nodos añadidos. - Usa
kubectl get podspara 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
