web-dev-qa-db-fra.com

Kubernetes Rolling Update n'obéissant pas aux réplicas 'maxUnavailable' lors du redéploiement dans des conditions de mise à l'échelle automatique

En résumé, la plupart de nos applications sont configurées avec la variable strategy suivante dans la rubrique Déploiement - 

  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate

Horizonatal Pod Autoscaler est configuré comme suit. 

spec:
  maxReplicas: 10
  minReplicas: 2

Désormais, lorsque notre application a été redéployée, au lieu d’exécuter une mise à jour progressive, elle a immédiatement arrêté 8 de nos pods et a abandonné le nombre de pods à 2, qui correspond au nombre minimal de répliques disponibles. Cela s'est passé en une fraction de seconde, comme vous pouvez le voir ici.

 enter image description here

Voici la sortie de kubectl get hpa

 enter image description here

Comme maxUnavailable est de 25%, ne devrait-il pas y avoir environ 2 à 3 gousses tombées au maximum? Pourquoi autant de pods se sont-ils écrasés en même temps? Il semble que la mise à jour roulante soit inutile si elle fonctionne de cette façon.

Qu'est-ce que je rate ?

8
bholagabbar

Après avoir examiné cette question, j'ai décidé de l'essayer avec l'environnement de test où je voulais vérifier si cela ne fonctionnait pas.

J'ai configuré le metrics-server pour récupérer le serveur de mesures et définir un HPA. J'ai suivi les étapes suivantes pour configurer HPA et déployer:

Comment activer le serveur KubeAPI pour les métriques HPA Autoscaling

Une fois, je travaille avec HPA et max 10 pods sur le système, j'ai mis à jour les images en utilisant:

[root@ip-10-0-1-176 ~]# kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-Apache   Deployment/php-Apache   49%/50%   1         10        10         87m

[root@ip-10-0-1-176 ~]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
load-generator-557649ddcd-6jlnl   1/1     Running   0          61m
php-Apache-75bf8f859d-22xvv       1/1     Running   0          91s
php-Apache-75bf8f859d-dv5xg       1/1     Running   0          106s
php-Apache-75bf8f859d-g4zgb       1/1     Running   0          106s
php-Apache-75bf8f859d-hv2xk       1/1     Running   0          2m16s
php-Apache-75bf8f859d-jkctt       1/1     Running   0          2m46s
php-Apache-75bf8f859d-nlrzs       1/1     Running   0          2m46s
php-Apache-75bf8f859d-ptg5k       1/1     Running   0          106s
php-Apache-75bf8f859d-sbctw       1/1     Running   0          91s
php-Apache-75bf8f859d-tkjhb       1/1     Running   0          55m
php-Apache-75bf8f859d-wv5nc       1/1     Running   0          106s
[root@ip-10-0-1-176 ~]# kubectl set image deployment php-Apache php-Apache=hpa-example:v1 --record
deployment.extensions/php-Apache image updated

[root@ip-10-0-1-176 ~]# kubectl get pods
NAME                              READY   STATUS              RESTARTS   AGE
load-generator-557649ddcd-6jlnl   1/1     Running             0          62m
php-Apache-75bf8f859d-dv5xg       1/1     Terminating         0          2m40s
php-Apache-75bf8f859d-g4zgb       1/1     Terminating         0          2m40s
php-Apache-75bf8f859d-hv2xk       1/1     Terminating         0          3m10s
php-Apache-75bf8f859d-jkctt       1/1     Running             0          3m40s
php-Apache-75bf8f859d-nlrzs       1/1     Running             0          3m40s
php-Apache-75bf8f859d-ptg5k       1/1     Terminating         0          2m40s
php-Apache-75bf8f859d-sbctw       0/1     Terminating         0          2m25s
php-Apache-75bf8f859d-tkjhb       1/1     Running             0          56m
php-Apache-75bf8f859d-wv5nc       1/1     Terminating         0          2m40s
php-Apache-847c8ff9f4-7cbds       1/1     Running             0          6s
php-Apache-847c8ff9f4-7vh69       1/1     Running             0          6s
php-Apache-847c8ff9f4-9hdz4       1/1     Running             0          6s
php-Apache-847c8ff9f4-dlltb       0/1     ContainerCreating   0          3s
php-Apache-847c8ff9f4-nwcn6       1/1     Running             0          6s
php-Apache-847c8ff9f4-p8c54       1/1     Running             0          6s
php-Apache-847c8ff9f4-pg8h8       0/1     Pending             0          3s
php-Apache-847c8ff9f4-pqzjw       0/1     Pending             0          2s
php-Apache-847c8ff9f4-q8j4d       0/1     ContainerCreating   0          4s
php-Apache-847c8ff9f4-xpbzl       0/1     Pending             0          1s

De plus, j'ai gardé le travail en arrière-plan, qui transmettait la sortie kubectl get pods toutes les secondes dans un fichier. À aucun moment jusqu'à ce que toutes les images soient mises à niveau, le nombre de pods n'est jamais inférieur à 8. 

Je pense que vous devez vérifier comment vous configurez votre mise à niveau progressive. Utilisez-vous un déploiement ou un réplicas? J'ai conservé la stratégie rolling update identique à celle que vous avez maxUnavailable: 25% et maxSurge: 25% avec le déploiement et cela fonctionne bien pour moi.

2
Prafull Ladha