Autoscaling (HPA, VPA, KEDA)
Kubernetes fournit plusieurs mécanismes d'autoscaling complémentaires. HPA scale horizontalement (nombre de replicas) selon des métriques. VPA ajuste les ressources allouées verticalement. KEDA étend HPA avec des sources de métriques externes (queues, crons, événements).
Horizontal Pod Autoscaler (HPA)
HPA surveille des métriques et ajuste le nombre de replicas d'un Deployment, ReplicaSet ou StatefulSet. Depuis v1.23, HPA v2 est stable et supporte nativement les métriques CPU, mémoire, et des métriques custom via le Metrics API.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70 # Scale si CPU moyen > 70%
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 512Mi
behavior: # Contrôle la vitesse de scale
scaleDown:
stabilizationWindowSeconds: 300 # Attendre 5min avant de scale down
policies:
- type: Percent
value: 25
periodSeconds: 60 # Max 25% de réduction par minute
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 30 # Doubler rapidement si besoin# Prérequis : metrics-server installé
kubectl top pods
kubectl get hpa
kubectl describe hpa web-hpaVertical Pod Autoscaler (VPA)
VPA analyse la consommation historique et recommande (ou applique) des requests/limits ajustées. Il nécessite une installation séparée (non inclus dans Kubernetes). Attention : en mode Auto, VPA recrée les pods pour appliquer les changements (interruption potentielle).
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: web-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: web
updatePolicy:
updateMode: "Off" # Off (recommandations seules) | Auto | Recreate
resourcePolicy:
containerPolicies:
- containerName: nginx
minAllowed:
cpu: 50m
memory: 64Mi
maxAllowed:
cpu: 2
memory: 2Gikubectl get vpa
kubectl describe vpa web-vpa # Voir les recommandations dans StatusVPA et HPA ne sont pas compatibles sur les mêmes métriques CPU/mémoire. Si HPA scale sur CPU, VPA doit exclure CPU de ses recommandations.
KEDA — Kubernetes Event-Driven Autoscaling
KEDA étend HPA pour scaler sur n'importe quelle métrique externe : longueur d'une queue SQS, topics Kafka, messages RabbitMQ, métriques Prometheus, cron schedules, etc. Il peut même scaler à zéro replicas (scale-to-zero), impossible avec HPA standard.
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: worker-scaledobject
spec:
scaleTargetRef:
name: worker
minReplicaCount: 0 # Scale to zero possible
maxReplicaCount: 50
triggers:
- type: rabbitmq
metadata:
host: amqp://rabbitmq.default:5672
queueName: tasks
queueLength: "10" # 1 replica par 10 messages en queue# Installer KEDA
helm install keda kedacore/keda --namespace keda --create-namespace
kubectl get scaledobjectsCluster Autoscaler
À distinguer des autoscalers de pods : le Cluster Autoscaler ajoute ou retire des noeuds du cluster selon les besoins. Il s'intègre aux APIs des cloud providers (ASG sur AWS, MIG sur GCP). Si des pods restent en Pending faute de ressources, le CA provisionne un nouveau noeud. Si des noeuds sont sous-utilisés, le CA les drains et les supprime.