Ce face kubectl rollout
Când modifici șablonul de pod dintr-un Deployment, StatefulSet sau DaemonSet (de exemplu schimbi imaginea ori o variabilă de mediu), Kubernetes pornește un rollout: înlocuiește pod-urile vechi cu cele noi treptat (rolling update), fără întreruperea serviciului. Comanda kubectl rollout îți dă control complet asupra acestui proces.
În pipeline-urile CI/CD se folosește imediat după kubectl apply comanda kubectl rollout status: ea blochează execuția până când toate replicile noi sunt Ready și returnează cod de eroare dacă deploy-ul se blochează (de exemplu din cauza unui ImagePullBackOff sau a unui readinessProbe eșuat).
Dacă noua versiune are un bug, kubectl rollout undo te întoarce în câteva secunde la revizia anterioară, iar kubectl rollout restart recrează pe rând toate pod-urile fără a schimba imaginea (util după reînnoirea unui Secret sau ConfigMap montat).
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
status TIP/NUME [--timeout=DURATĂ] |
Urmărește progresul lansării până la finalizare (sau eșec după timeout). |
history TIP/NUME [--revision=N] |
Listează reviziile păstrate sau afișează detaliile unei revizii anume. |
undo TIP/NUME [--to-revision=N] |
Revine la revizia anterioară (sau la revizia N specificată). |
restart TIP/NUME |
Declanșează o repornire treptată (rolling restart) a tuturor pod-urilor. |
pause / resume TIP/NUME |
Pune pe pauză și reia un rollout pentru a grupa mai multe modificări într-una singură. |
Exemple
Exemplul 1: Așteptarea finalizării unui deploy în CI/CD și revenirea în caz de eroare
kubectl rollout status deployment/api --timeout=2m
# Dacă versiunea nouă are probleme, revenim imediat la revizia precedentă:
kubectl rollout undo deployment/api
Ieșire în terminal
Waiting for deployment "api" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "api" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "api" rollout to finish: 1 old replicas are pending termination...
deployment "api" successfully rolled out
deployment.apps/api rolled back
Exemplul 2: Inspectarea istoricului de revizii și repornirea fără downtime
kubectl rollout history deployment/api
kubectl rollout restart deployment/api
Ieșire în terminal
deployment.apps/api
REVISION CHANGE-CAUSE
1 <none>
2 Upgrade la v1.4.1
3 Upgrade la v1.4.2 (fix #412)
deployment.apps/api restarted
Greșeli frecvente
- După
kubectl rollout undo, starea din cluster nu mai corespunde cu fișierul YAML din Git; nu uita să faci revert și la commit-ul din depozit. rollout restartnu recită imaginea dacă tag-ul este identic șiimagePullPolicyesteIfNotPresent; folosește tag-uri imutabile pe versiune sauAlways.
Comenzi înrudite
Obiectul Deployment: Gestionează aplicații stateless replicabile: menține numărul de pod-uri, le înlocuiește când cad și face rolling updates.kubectl set image: Actualizează imaginea unui container dintr-un Deployment, DaemonSet sau StatefulSet (și alte comenzi kubectl set).kubectl scale: Modifică manual numărul de replici al unui Deployment, StatefulSet sau ReplicaSet.kubectl events: Listează și urmărește evenimentele din cluster ordonate cronologic, cu filtrare după obiect sau severitate.