A volte potresti trovarti in una situazione in cui devi riavviare il tuo Pod. Ad esempio, se il tuo Pod è in stato di errore.
A seconda del criterio di riavvio, Kubernetes stesso tenta di riavviarlo e risolverlo.
Ma se non funziona e se non riesci a trovare l'origine dell'errore, riavviare manualmente Kubernetes Pod è il modo più veloce per far funzionare di nuovo la tua app.
Come riavviare i Pod in Kubernetes
Sfortunatamente, non esiste nessun comando kubectl restart pod per questo scopo. Ecco un paio di modi per riavviare i tuoi Pod:
- Il Pod di rollout si riavvia
- Ridimensionamento del numero di repliche
Lascia che ti mostri entrambi i metodi in dettaglio.
Metodo 1:il rollout Pod si riavvia
A partire da Kubernetes versione 1.15, puoi eseguire un riavvio in sequenza delle tue distribuzioni.
Il controller uccide un pod alla volta e si affida a ReplicaSet per aumentare la scalabilità di nuovi pod fino a quando tutti i pod non sono più recenti dell'ora di riavvio. A mio parere, questo è il modo migliore per riavviare i pod poiché l'applicazione non verrà interrotta.
Nota: Gli IP dei singoli pod verranno modificati.
Facciamo un esempio. Hai una distribuzione denominata my-dep che consiste in due pod (poiché la replica è impostata su due).
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 13s
Prendiamo i dettagli del 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>
Ora eseguiamo il riavvio per la distribuzione my-dep con un comando come questo:
kubectl rollout restart deployment name_of_deployment
Ricordi il nome della distribuzione dai comandi precedenti? Usalo qui:
[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted
Puoi guardare il processo di chiusura dei vecchi pod e di creazione di nuovi utilizzando kubectl get pod -w
comando:
[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
Se controlli i Pod ora, puoi vedere che i dettagli sono cambiati qui:
[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>
Metodo 2. Ridimensionamento del numero di repliche
In un ambiente CI/CD, il processo di riavvio dei pod in caso di errore potrebbe richiedere molto tempo poiché è necessario ripetere l'intero processo di compilazione.
Un modo più rapido per raggiungere questo obiettivo è utilizzare la kubectl scale
comando per modificare il numero di replica su zero e una volta impostato un numero maggiore di zero, Kubernetes crea nuove repliche.
Proviamolo. Controlla prima i tuoi Pod:
[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
Ottieni le informazioni sulla distribuzione:
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 12m
Ora, imposta il numero di replica su zero:
[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled
E poi riportalo a due:
[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled
Controlla i pod ora:
[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
Hai riavviato correttamente i Kubernetes Pods.
Utilizza uno dei metodi sopra indicati per far funzionare la tua app in modo rapido e sicuro senza influire sugli utenti finali.
Dopo aver eseguito questo esercizio, assicurati di trovare il problema principale e risolverlo poiché il riavvio del pod non risolvere il problema sottostante.
Spero che questo suggerimento di Kubernetes ti piaccia. Non dimenticare di iscriverti per saperne di più.
Rakesh Jain
DevOps professionale | RHCA | Jenkins | Git | Docker | Kubernetes | Abile | Prometeo | Grafana | AWS Cloud