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
Deploymentllamadomy-app. - updatePolicy: La política de actualización, que puede ser
Off,Initial,RecreateoAuto.
- 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-appcon 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
VerticalPodAutoscalerparatest-appen 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
