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
- Vertical Pod Autoscaler (VPA): Es el componente de Kubernetes que ajusta automáticamente las solicitudes y límites de recursos de los pods.
- Recomendaciones de Recursos: VPA proporciona recomendaciones sobre los recursos óptimos para los pods basándose en el uso histórico.
- 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
llamadomy-app
. - updatePolicy: La política de actualización, que puede ser
Off
,Initial
,Recreate
oAuto
.
- targetRef: Referencia al objeto que se va a escalar, en este caso un
Ejemplo Práctico
Supongamos que tienes un despliegue llamado my-app
y quieres habilitar el autoescalado vertical. Aquí tienes los pasos:
- 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"
- Aplicar el Deployment:
- 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"
- Aplicar el VerticalPodAutoscaler:
Monitoreo y Verificación
Para verificar que VPA está funcionando correctamente, puedes usar los siguientes comandos:
- Verificar el estado del VPA:
- Verificar las recomendaciones de recursos:
Ejercicio Práctico
Ejercicio
-
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
- Imagen:
-
Configura un
VerticalPodAutoscaler
paratest-app
en modoAuto
.
Solución
- 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"
- 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"
- Aplicar los recursos:
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
- ¿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