El autoescalado vertical de pods (Vertical Pod Autoscaling, VPA) es una característica de Kubernetes que permite ajustar automáticamente los recursos (CPU y memoria) asignados a los pods en función de sus necesidades actuales. Esto es especialmente útil para aplicaciones que tienen patrones de uso de recursos variables y pueden beneficiarse de ajustes dinámicos para mejorar el rendimiento y la eficiencia.

Conceptos Clave

  1. Vertical Pod Autoscaler (VPA): Es el componente de Kubernetes que ajusta automáticamente las solicitudes y límites de recursos de los pods.
  2. Recomendaciones de Recursos: VPA proporciona recomendaciones sobre los recursos óptimos para los pods basándose en el uso histórico.
  3. Modos de Operación:
    • Recomendación: Solo proporciona recomendaciones sin aplicar cambios.
    • Auto: Aplica automáticamente las recomendaciones.
    • Recreate: Elimina y recrea los pods con los nuevos recursos.
    • Initial: Solo ajusta los recursos al crear nuevos pods.

Instalación del Vertical Pod Autoscaler

Para utilizar VPA, primero necesitas instalarlo en tu clúster de Kubernetes. Puedes hacerlo utilizando los siguientes comandos:

kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/vpa-release-0.9.2/vpa-v0.9.2.yaml

Este comando descarga e instala los componentes necesarios para VPA.

Configuración del Vertical Pod Autoscaler

Una vez instalado, puedes configurar VPA mediante un objeto VerticalPodAutoscaler. Aquí tienes un ejemplo de configuración:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       my-app
  updatePolicy:
    updateMode: "Auto"

Explicación del YAML

  • apiVersion: La versión de la API de VPA.
  • kind: El tipo de recurso, en este caso VerticalPodAutoscaler.
  • metadata: Información sobre el objeto, como el nombre.
  • spec: La especificación del VPA.
    • targetRef: Referencia al objeto que se va a escalar, en este caso un Deployment llamado my-app.
    • updatePolicy: La política de actualización, que puede ser Off, Initial, Recreate o Auto.

Ejemplo Práctico

Supongamos que tienes un despliegue llamado my-app y quieres habilitar el autoescalado vertical. Aquí tienes los pasos:

  1. Crear el Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app-image
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"
          limits:
            cpu: "1"
            memory: "1Gi"
  1. Aplicar el Deployment:
kubectl apply -f my-app-deployment.yaml
  1. Crear el VerticalPodAutoscaler:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       my-app
  updatePolicy:
    updateMode: "Auto"
  1. Aplicar el VerticalPodAutoscaler:
kubectl apply -f my-app-vpa.yaml

Monitoreo y Verificación

Para verificar que VPA está funcionando correctamente, puedes usar los siguientes comandos:

  • Verificar el estado del VPA:
kubectl describe vpa my-app-vpa
  • Verificar las recomendaciones de recursos:
kubectl get vpa my-app-vpa -o yaml

Ejercicio Práctico

Ejercicio

  1. Crea un despliegue llamado test-app con las siguientes especificaciones:

    • Imagen: nginx
    • Solicitudes de recursos: CPU: 200m, Memoria: 256Mi
    • Límites de recursos: CPU: 500m, Memoria: 512Mi
    • Réplicas: 3
  2. Configura un VerticalPodAutoscaler para test-app en modo Auto.

Solución

  1. Deployment YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      labels:
        app: test-app
    spec:
      containers:
      - name: test-app-container
        image: nginx
        resources:
          requests:
            cpu: "200m"
            memory: "256Mi"
          limits:
            cpu: "500m"
            memory: "512Mi"
  1. VerticalPodAutoscaler YAML:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: test-app-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       test-app
  updatePolicy:
    updateMode: "Auto"
  1. Aplicar los recursos:
kubectl apply -f test-app-deployment.yaml
kubectl apply -f test-app-vpa.yaml

Conclusión

El autoescalado vertical de pods es una herramienta poderosa para optimizar el uso de recursos en Kubernetes. Permite ajustar dinámicamente las solicitudes y límites de recursos de los pods, mejorando la eficiencia y el rendimiento de las aplicaciones. Asegúrate de monitorear y ajustar las configuraciones según las necesidades específicas de tus aplicaciones para obtener los mejores resultados.

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