L'autoscalat vertical de pods (Vertical Pod Autoscaling, VPA) és una funcionalitat de Kubernetes que permet ajustar automàticament els recursos (CPU i memòria) assignats als pods en funció de les seves necessitats reals. Això és especialment útil per optimitzar l'ús de recursos i assegurar que les aplicacions tinguin els recursos necessaris per funcionar de manera eficient.
Conceptes Clau
- Vertical Pod Autoscaler (VPA): Component de Kubernetes que ajusta automàticament les sol·licituds i límits de recursos dels pods.
- Recomanacions de Recursos: Suggeriments generats pel VPA basats en l'ús històric de recursos.
- Actualitzacions de Recursos: Canvis aplicats als pods per ajustar les sol·licituds i límits de recursos segons les recomanacions del VPA.
Com Funciona el VPA
- Monitorització: El VPA monitoritza l'ús de recursos dels pods.
- Recomanació: Basant-se en les dades recollides, el VPA genera recomanacions per ajustar les sol·licituds i límits de recursos.
- Actualització: El VPA aplica les recomanacions als pods, ajustant els recursos segons sigui necessari.
Configuració del VPA
Instal·lació del VPA
Per utilitzar el VPA, primer cal instal·lar-lo al clúster de Kubernetes. Pots fer-ho utilitzant el següent manifest YAML:
apiVersion: v1 kind: Namespace metadata: name: vpa --- apiVersion: v1 kind: ServiceAccount metadata: name: vpa-recommender namespace: vpa --- apiVersion: v1 kind: ServiceAccount metadata: name: vpa-updater namespace: vpa --- apiVersion: v1 kind: ServiceAccount metadata: name: vpa-admission-controller namespace: vpa --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: vpa-recommender rules: - apiGroups: [""] resources: ["pods", "nodes", "services", "endpoints", "events", "namespaces"] verbs: ["get", "list", "watch"] - apiGroups: ["extensions", "apps"] resources: ["replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["autoscaling.k8s.io"] resources: ["verticalpodautoscalers"] verbs: ["get", "list", "watch"] --- # (El manifest continua amb la configuració de rols i permisos per a cada component del VPA)
Creació d'un VPA
Un cop instal·lat el VPA, pots crear un objecte VPA per a una aplicació específica. Aquí tens un exemple de manifest YAML per crear un VPA:
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ó del Manifest
- apiVersion: La versió de l'API de Kubernetes que s'utilitza.
- kind: El tipus de recurs, en aquest cas,
VerticalPodAutoscaler
. - metadata: Informació sobre el VPA, incloent el nom.
- spec: Especificacions del VPA.
- targetRef: Referència a l'objecte que el VPA ha de monitoritzar (en aquest cas, un
Deployment
). - updatePolicy: Política d'actualització.
Auto
permet que el VPA actualitzi automàticament els recursos dels pods.
- targetRef: Referència a l'objecte que el VPA ha de monitoritzar (en aquest cas, un
Exercici Pràctic
Objectiu
Configurar un VPA per a una aplicació de mostra i observar com ajusta els recursos dels pods.
Passos
-
Desplegar una Aplicació de Mostra:
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 image: nginx resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi"
-
Crear un VPA per a l'Aplicació:
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"
-
Observar les Recomanacions del VPA:
Després d'un temps, pots veure les recomanacions del VPA utilitzant el següent comandament:
kubectl describe vpa my-app-vpa
Solució
Després de seguir els passos anteriors, hauràs configurat un VPA per a la teva aplicació de mostra. El VPA ajustarà automàticament els recursos dels pods basant-se en l'ús real de recursos.
Errors Comuns i Consells
- No Instal·lar Correctament el VPA: Assegura't de seguir tots els passos d'instal·lació del VPA correctament.
- Política d'Actualització Incorrecta: Si no vols que el VPA actualitzi automàticament els recursos, pots utilitzar
updateMode: "Off"
i aplicar les recomanacions manualment. - Monitorització Insuficient: El VPA necessita temps per recollir dades suficients abans de generar recomanacions precises. Sigues pacient i permet que el VPA monitoritzi l'ús de recursos durant un període de temps adequat.
Conclusió
L'autoscalat vertical de pods és una eina poderosa per optimitzar l'ús de recursos en un clúster de Kubernetes. Configurant correctament el VPA, pots assegurar-te que les teves aplicacions tenen els recursos necessaris per funcionar de manera eficient, sense malgastar recursos. En el proper tema, explorarem l'autoscalat de clúster per ajustar automàticament el nombre de nodes en funció de la càrrega de treball.
Curs de Kubernetes
Mòdul 1: Introducció a Kubernetes
- Què és Kubernetes?
- Arquitectura de Kubernetes
- Conceptes i Terminologia Clau
- Configuració d'un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Mòdul 2: Components Bàsics de Kubernetes
Mòdul 3: Gestió de Configuració i Secrets
Mòdul 4: Xarxes en Kubernetes
Mòdul 5: Emmagatzematge en Kubernetes
Mòdul 6: Conceptes Avançats de Kubernetes
Mòdul 7: Monitorització i Registre
- Monitorització amb Prometheus
- Registre amb Elasticsearch, Fluentd i Kibana (EFK)
- Controls de Salut i Probes
- Servidor de Mètriques
Mòdul 8: Seguretat en Kubernetes
- Control d'Accés Basat en Rols (RBAC)
- Polítiques de Seguretat de Pods
- Seguretat de Xarxa
- Seguretat d'Imatges
Mòdul 9: Escalabilitat i Rendiment
- Autoscalat Horitzontal de Pods
- Autoscalat Vertical de Pods
- Autoscalat de Clúster
- Optimització del Rendiment
Mòdul 10: Ecosistema i Eines de Kubernetes
Mòdul 11: Estudis de Cas i Aplicacions del Món Real
- Desplegament d'una Aplicació Web
- CI/CD amb Kubernetes
- Execució d'Aplicacions Stateful
- Gestió Multi-Clúster