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

  1. 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.

  1. 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%.

  1. 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:

kubectl apply -f nginx-deployment.yaml

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:

kubectl apply -f nginx-hpa.yaml

Pas 4: Monitoritzar l'Autoscalat

Pots monitoritzar l'estat de l'HPA amb la següent comanda:

kubectl get hpa

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

  1. Crea un deployment per a una aplicació de mostra.
  2. Configura l'HPA per escalar entre 2 i 5 rèpliques.
  3. 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:

kubectl apply -f sample-deployment.yaml
kubectl apply -f sample-hpa.yaml

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

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

Mòdul 8: Seguretat en Kubernetes

Mòdul 9: Escalabilitat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2024. Tots els drets reservats