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.
Voici la sortie de kubectl get hpa
-
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 ?
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.