Parfois, vous pouvez vous retrouver dans une situation où vous devez redémarrer votre Pod. Par exemple, si votre pod est en état d'erreur.
En fonction de la politique de redémarrage, Kubernetes lui-même essaie de redémarrer et de le réparer.
Mais si cela ne fonctionne pas et si vous ne trouvez pas la source de l'erreur, le redémarrage manuel du pod Kubernetes est le moyen le plus rapide de faire fonctionner à nouveau votre application.
Comment redémarrer les pods dans Kubernetes
Malheureusement, il n'y a pas de commande kubectl restart pod dans ce but. Voici quelques façons de redémarrer vos pods :
- Le pod de déploiement redémarre
- Mise à l'échelle du nombre de répliques
Laissez-moi vous montrer les deux méthodes en détail.
Méthode 1 :redémarrage du pod de déploiement
À partir de la version 1.15 de Kubernetes, vous pouvez effectuer un redémarrage continu de vos déploiements.
Le contrôleur tue un pod à la fois et s'appuie sur le ReplicaSet pour faire évoluer les nouveaux pods jusqu'à ce que tous les pods soient plus récents que l'heure de redémarrage. À mon avis, c'est la meilleure façon de redémarrer vos pods car votre application ne tombera pas en panne.
Remarque : Les adresses IP individuelles des pods seront modifiées.
Prenons un exemple. Vous avez un déploiement nommé my-dep qui se compose de deux pods (car le réplica est défini sur deux).
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 13s
Obtenons les détails du pod :
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 47s 172.16.213.255 kworker-rj2 <none> <none>
my-dep-6d9f78d6c4-rkhrz 1/1 Running 0 47s 172.16.213.35 kworker-rj1 <none> <none>
Déployons maintenant le redémarrage du déploiement de my-dep avec une commande comme celle-ci :
kubectl rollout restart deployment name_of_deployment
Vous souvenez-vous du nom du déploiement des commandes précédentes ? Utilisez-le ici :
[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted
Vous pouvez observer le processus d'arrêt des anciens pods et de création de nouveaux en utilisant kubectl get pod -w
commande :
[email protected]:~# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 5s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 69s
my-dep-6d9f78d6c4-rkhrz 1/1 Terminating 0 69s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 69s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-557548758d-svg7w 1/1 Running 0 3s
my-dep-6d9f78d6c4-8j5fq 1/1 Terminating 0 71s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 72s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
Si vous vérifiez les pods maintenant, vous pouvez voir que les détails ont changé ici :
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-557548758d-kz6r7 1/1 Running 0 42s 172.16.213.43 kworker-rj1 <none> <none>
my-dep-557548758d-svg7w 1/1 Running 0 38s 172.16.213.251 kworker-rj2 <none> <none>
Méthode 2. Mise à l'échelle du nombre de répliques
Dans un environnement CI/CD, le processus de redémarrage de vos pods en cas d'erreur peut prendre beaucoup de temps car il doit recommencer tout le processus de construction.
Un moyen plus rapide d'y parvenir est d'utiliser l'kubectl scale
commande pour changer le numéro de réplica à zéro et une fois que vous avez défini un nombre supérieur à zéro, Kubernetes crée de nouveaux réplicas.
Essayons. Vérifiez d'abord vos pods :
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 11m
my-dep-557548758d-svg7w 1/1 Running 0 11m
Obtenez les informations de déploiement :
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 12m
Maintenant, définissez le numéro de réplique sur zéro :
[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled
Et puis remettez-le à deux :
[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled
Vérifiez les pods maintenant :
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-d2pmd 1/1 Running 0 10s
my-dep-557548758d-gprnr 1/1 Running 0 10s
Vous avez redémarré avec succès les pods Kubernetes.
Utilisez l'une des méthodes ci-dessus pour faire fonctionner votre application rapidement et en toute sécurité sans impact sur les utilisateurs finaux.
Après avoir fait cet exercice, assurez-vous de trouver le problème principal et de le résoudre car le redémarrage de votre pod ne le fera pas résoudre le problème sous-jacent.
J'espère que vous aimez cette astuce Kubernetes. N'oubliez pas de vous abonner pour en savoir plus.
Rakesh Jain
DevOps Professionnel | RHCA | Jenkins | Gite | Docker | Kubernetes | Ansible | Prométhée | Grafane | Nuage AWS