====== Scaling sous Kubernetes ====== ===== Manuel ===== Pour définir par exemple à 4 le nombre de Pods pour le déploiement nommé **mydeploy01** : kubectl scale deployment mydeploy01 --replicas=4 ===== Autoscaling ===== Le [[informatique:kebernetes:install#installation_du_metrics_server_optionnel|Metrics Server]] est requis pour le scaling sur la base de la consommation de ressource. ==== Création d'un déploiement pour le test ==== 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 443/TCP 11d service/php-apache ClusterIP 10.101.210.196 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 ==== Création d'une règle d'autoscale pour le déploiement ==== 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 ==== Test de montée en charge et monitoring ==== 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