Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
informatique:kebernetes:kube_scale [2023/12/19 08:53] benoit [Manuel] |
informatique:kebernetes:kube_scale [2023/12/19 09:22] (Version actuelle) benoit [Création d'une règle d'autoscale pour le déploiement] |
||
---|---|---|---|
Ligne 10: | Ligne 10: | ||
Le [[informatique:kebernetes:install#installation_du_metrics_server_optionnel|Metrics Server]] est requis pour le scaling sur la base de la consommation de ressource. | 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 <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 | ||
+ | |||
+ | ==== 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 | ||