L'autoscalat horitzontal de pods (Horizontal Pod Autoscaling, HPA) és una funcionalitat de Kubernetes que permet ajustar automàticament el nombre de pods en una aplicació en funció de la càrrega de treball. Aquesta funcionalitat és essencial per assegurar que les aplicacions poden gestionar increments de trànsit i càrrega sense intervenció manual, millorant així la disponibilitat i el rendiment.
Conceptes Clau
- Mètriques de Càrrega
L'HPA utilitza mètriques per determinar quan escalar els pods. Les mètriques més comunes són:
- Utilització de CPU: Percentatge d'ús de la CPU.
- Utilització de Memòria: Percentatge d'ús de la memòria.
- Mètriques personalitzades: Qualsevol altra mètrica que es pugui definir, com ara el nombre de sol·licituds HTTP per segon.
- Objectiu de l'Escalat
L'objectiu de l'escalat és mantenir les mètriques de càrrega dins d'un rang desitjat. Per exemple, es pot configurar l'HPA per mantenir l'ús de la CPU al 50%.
- Controlador d'Autoscalat
El controlador d'autoscalat és el component de Kubernetes que monitoritza les mètriques i ajusta el nombre de pods segons sigui necessari.
Configuració de l'Autoscalat Horitzontal de Pods
Pas 1: Instal·lació del Servidor de Mètriques
Per utilitzar l'HPA, necessitem tenir el servidor de mètriques (Metrics Server) instal·lat al clúster. El servidor de mètriques recull les mètriques de recursos dels nodes i els pods.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Pas 2: Crear un Deployment
Primer, creem un deployment senzill per a una aplicació de mostra.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "200Mi" limits: cpu: "200m" memory: "400Mi"
Aplica el deployment:
Pas 3: Crear l'Autoscalador Horitzontal de Pods
Ara, creem l'HPA per al deployment nginx-deployment
. Configurarem l'HPA per escalar entre 1 i 10 rèpliques, mantenint l'ús de la CPU al 50%.
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 50
Aplica l'HPA:
Pas 4: Monitoritzar l'Autoscalat
Pots monitoritzar l'estat de l'HPA amb la següent comanda:
Aquesta comanda mostrarà les mètriques actuals i el nombre de rèpliques.
Exercici Pràctic
Objectiu
Configura un autoscalador horitzontal per a una aplicació que mantingui l'ús de la CPU al 60%.
Passos
- Crea un deployment per a una aplicació de mostra.
- Configura l'HPA per escalar entre 2 i 5 rèpliques.
- Genera càrrega a l'aplicació per veure l'HPA en acció.
Solució
Deployment
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment spec: replicas: 2 selector: matchLabels: app: sample template: metadata: labels: app: sample spec: containers: - name: sample image: sample-image:latest ports: - containerPort: 8080 resources: requests: cpu: "200m" memory: "300Mi" limits: cpu: "400m" memory: "600Mi"
HPA
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: sample-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: sample-deployment minReplicas: 2 maxReplicas: 5 targetCPUUtilizationPercentage: 60
Aplica els manifests:
Generar Càrrega
Utilitza una eina com kubectl run
per generar càrrega:
kubectl run -i --tty load-generator --image=busybox /bin/sh # Un cop dins del pod: while true; do wget -q -O- http://sample-deployment:8080; done
Resum
L'autoscalat horitzontal de pods és una eina poderosa per assegurar que les aplicacions poden gestionar increments de càrrega de manera eficient. Configurar correctament l'HPA implica entendre les mètriques de càrrega, definir objectius d'escalat i monitoritzar el rendiment de l'aplicació. Amb aquesta funcionalitat, Kubernetes pot ajustar automàticament el nombre de pods per mantenir un rendiment òptim.
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