Outils pour utilisateurs

Outils du site


informatique:kebernetes:kube_scale

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 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
informatique/kebernetes/kube_scale.txt · Dernière modification: 2023/12/19 09:22 par benoit