Ce face kubectl cordon / kubectl drain
Când trebuie să repornești o mașină din cluster, să îi faci upgrade de kernel/kubelet sau să o înlocuiești, nu o oprești brusc, ci folosești triada cordon → drain → uncordon:
1) kubectl cordon NOD marchează nodul ca SchedulingDisabled: pod-urile care rulează deja pe el rămân neatinse, dar niciun pod nou nu va mai fi plasat acolo.
2) kubectl drain NOD face mai întâi automat cordon, apoi evacuează grațios toate pod-urile de pe nod (respectând PodDisruptionBudget-urile definite), astfel încât controlerele (Deployment, StatefulSet) să le recreeze pe celelalte noduri sănătoase. 3) După ce mentenanța s-a încheiat, kubectl uncordon NOD permite din nou programarea de pod-uri pe acel nod.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
cordon NOD |
Marchează nodul ca SchedulingDisabled fără a opri pod-urile existente. |
drain NOD |
Blochează programarea și evacuează pod-urile de pe nod. |
uncordon NOD |
Reactivează nodul (Ready) după mentenanță. |
--ignore-daemonsets |
Aproape mereu necesar la drain: ignoră pod-urile DaemonSet (CNI, kube-proxy, node-exporter) care sunt legate de fiecare nod. |
--delete-emptydir-data |
Permite evacuarea pod-urilor care folosesc volume temporare emptyDir (datele din ele se pierd). |
--grace-period=SEC / --timeout=DURATĂ |
Perioada de grație la oprirea pod-urilor și timpul maxim total de așteptare. |
Exemple
Exemplul 1: Procedura completă de golire a unui nod pentru reboot și reactivare
kubectl drain worker-2 --ignore-daemonsets --delete-emptydir-data
kubectl get nodes
# ... efectuăm upgrade-ul / reboot-ul pe worker-2, apoi:
kubectl uncordon worker-2
Ieșire în terminal
node/worker-2 cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/cilium-9k4m2, kube-system/kube-proxy-7x2p1
evicting pod shop/api-6f9b8d7c4-x7k2p
pod/api-6f9b8d7c4-x7k2p evicted
node/worker-2 drained
NAME STATUS ROLES AGE VERSION
control-plane Ready control-plane 42d v1.31.1
worker-1 Ready <none> 42d v1.31.1
worker-2 Ready,SchedulingDisabled <none> 42d v1.31.1
node/worker-2 uncordoned
Greșeli frecvente
- După
kubectl uncordon, pod-urile care s-au mutat pe alte noduri nu revin singure pe nodul proaspăt repornit; doar pod-urile nou create vor ajunge acolo. - Dacă un
PodDisruptionBudget(PDB) areminAvailableegal cu numărul curent de replici,kubectl drainva rămâne blocat așteptând până la--timeout.
Comenzi înrudite
kubectl get: Listează una sau mai multe resurse, într-un tabel sau în format YAML/JSON.kubectl describe: Afișează detaliile complete ale unei resurse, inclusiv evenimentele recente asociate.kubectl top: Afișează consumul curent de CPU și memorie al nodurilor și pod-urilor.kubectl rollout: Monitorizează lansarea unei versiuni noi, revine la o revizie anterioară (undo) sau repornește treptat pod-urile.