Někdy se můžete dostat do situace, kdy budete muset svůj Pod restartovat. Například pokud je váš modul v chybovém stavu.
V závislosti na zásadách restartování se Kubernetes sám pokusí restartovat a opravit to.
Pokud to však nefunguje a nemůžete najít zdroj chyby, ruční restartování Kubernetes Pod je nejrychlejší způsob, jak aplikaci znovu uvést do provozu.
Jak restartovat Pody v Kubernetes
Bohužel neexistuje žádný příkaz kubectl restart pod pro tento účel. Zde je několik způsobů, jak můžete své Pody restartovat:
- Restartuje se zaváděcí modul
- Škálování počtu replik
Dovolte mi, abych vám obě metody podrobně ukázal.
Metoda 1:Restartuje se zaváděcí modul
Počínaje verzí Kubernetes 1.15 můžete provést postupný restart vašich nasazení.
Ovladač zabíjí jeden modul po druhém a spoléhá na ReplicaSet, aby zvětšil nové moduly, dokud nebudou všechny moduly novější než čas restartování. Podle mého názoru jetoto nejlepší způsob, jak restartovat moduly, protože aplikace nespadne.
Poznámka: IP adresy jednotlivých modulů budou změněny.
Vezměme si příklad. Máte nasazení s názvem my-dep, které se skládá ze dvou modulů (protože replika je nastavena na dva).
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 13s
Pojďme získat podrobnosti o modulu:
[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>
Nyní spustíme restart pro nasazení my-dep pomocí příkazu jako je tento:
kubectl rollout restart deployment name_of_deployment
Pamatujete si název nasazení z předchozích příkazů? Použijte jej zde:
[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted
Proces ukončování starých podů a vytváření nových můžete sledovat pomocí kubectl get pod -w
příkaz:
[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
Pokud nyní zkontrolujete Pody, můžete zde vidět, že se podrobnosti změnily:
[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>
Metoda 2. Změna měřítka počtu replik
V prostředí CI/CD může proces restartování podů v případě chyby trvat dlouho, protože musí znovu projít celým procesem sestavení.
Rychlejší způsob, jak toho dosáhnout, je použití kubectl scale
příkaz ke změně čísla repliky na nulu a jakmile nastavíte číslo vyšší než nula, Kubernetes vytvoří nové repliky.
Pojďme to zkusit. Nejprve zkontrolujte své moduly:
[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
Získejte informace o nasazení:
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 12m
Nyní nastavte číslo repliky na nulu:
[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled
A pak to nastavte zpět na dvě:
[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled
Zkontrolujte moduly nyní:
[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
Úspěšně jste restartovali Kubernetes Pods.
K rychlému a bezpečnému zprovoznění aplikace bez dopadu na koncové uživatele použijte kteroukoli z výše uvedených metod.
Po provedení tohoto cvičení se prosím ujistěte, že jste našli hlavní problém a opravte jej, protože restartování modulu nebude opravte základní problém.
Doufám, že se vám tento tip Kubernetes líbí. Nezapomeňte se přihlásit k odběru pro více.
Rakesh Jain
DevOps Professional | RHCA | Jenkins | Git | Docker | Kubernetes | Ansible | Prometheus | Grafana | AWS Cloud