kubectl rollout în Kubernetes (kubectl)

Deployment-uri și scalare kubectl 1.2+ (restart din 1.15)

Monitorizează lansarea unei versiuni noi, revine la o revizie anterioară (undo) sau repornește treptat pod-urile.

Sintaxă comandă
kubectl rollout status|history|undo|restart|pause|resume RESURSĂ/NUME [--to-revision=N]

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 restart nu recită imaginea dacă tag-ul este identic și imagePullPolicy este IfNotPresent; folosește tag-uri imutabile pe versiune sau Always.

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.