Pour définir par exemple à 4 le nombre de Pods pour le déploiement nommé mydeploy01 :
kubectl scale deployment mydeploy01 --replicas=4
Le Metrics Server est requis pour le scaling sur la base de la consommation de ressource.
Prenons par exemple le manisfeste de déploiement ci-dessous :
vim hpa-apache-deployment.yml
Contenu :
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: registry.k8s.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
Appliquer le manifeste :
kubectl apply -f hpa-apache-deployment.yml
Vérification du déploiement :
kubectl get all
Résultat :
NAME READY STATUS RESTARTS AGE pod/php-apache-598b474864-jqpbz 1/1 Running 0 17m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d service/php-apache ClusterIP 10.101.210.196 <none> 80/TCP 17m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/php-apache 1/1 1 1 17m NAME DESIRED CURRENT READY AGE replicaset.apps/php-apache-598b474864 1 1 1 17m
Nous allons définir ci-dessous une règle d'autoscale :
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
Explication
: Pour le déploiement php-apache, si la CPU montent à 50% on augmente le nombre de pods. Il faut minimum 1 pod et maximum 10 pourront être déployés.
Ci-dessous l'équivalent en fichier manifeste YAML :
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
maxReplicas: 10
metrics:
- resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
type: Resource
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
Résultat attendu :
horizontalpodautoscaler.autoscaling/php-apache autoscaled
Pour lister les règles d'autoscale :
kubectl get hpa
Résultat attendu :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 3m51s
Pour le test, nous allons augmenter la charge CPU des pods ainsi:
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
Pour voir monitorer :
kubectl get hpa
On peut voir la charge CPU monter et que d'autre pods on démarrés :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 101%/50% 1 10 4 7m21s