Middle+
De ce factori se asigură finalizarea corectă a nodului în funcție de prioritatea pod-ului?
sobes.tech AI
Răspuns de la AI
Închiderea corectă a unui nod se realizează prin următorii factori:
- Timeout-uri:
terminationGracePeriodSeconds: Definește timpul în care nodul va încerca să închidă corect podurile înainte de a le distruge forțat. În mod implicit, 30 de secunde.pod.spec.terminationGracePeriodSeconds: Poate suprascrie timeout-ul pentru un anumit pod.
# Exemplu de manifest pentru un pod cu un timeout de închidere mărit apiVersion: v1 kind: Pod metadata: name: my-pod-with-grace-period spec: containers: - name: my-container image: my-image terminationGracePeriodSeconds: 60 # Timeout mărit - Semnale:
- Kubernetes trimite semnalul
SIGTERMcontainerelor din pod. - Aplicația din container trebuie să poată captura
SIGTERMși să îl gestioneze corect (de exemplu, închiderea conexiunilor curente, salvarea stării). - Dacă aplicația nu se încheie după
SIGTERMînterminationGracePeriodSeconds, se trimiteSIGKILL.
- Kubernetes trimite semnalul
- Prioritatea podului (
priorityClassName):- În cazul în care resursele sunt insuficiente sau are loc evacuarea nodului, podurile cu prioritate mai mică sunt terminate primele.
- Acest lucru asigură că podurile critice (cu prioritate înaltă) funcționează mai mult timp și au mai mult timp pentru încheierea corectă dacă nodul devine inaccesibil.
# Exemplu de manifest pentru un pod cu o clasă de prioritate apiVersion: v1 kind: Pod metadata: name: my-priority-pod spec: containers: - name: my-container image: my-image priorityClassName: high-priority # Utilizarea clasei de prioritate - Hooks PreStop:
- Scripturi sau apeluri suplimentare care se execută în container chiar înainte de a trimite
SIGTERM. - Pot fi folosite pentru sincronizare, dezabonare de la servicii sau alte sarcini necesare pentru o închidere corectă.
# Exemplu de hook PreStop apiVersion: v1 kind: Pod metadata: name: my-pod-with-prestop spec: containers: - name: my-container image: my-image lifecycle: preStop: exec: command: ["/bin/sh", "-c", "echo 'Stopping container...' && sleep 5 && exit 0"] # Comandă exemplu - Scripturi sau apeluri suplimentare care se execută în container chiar înainte de a trimite
- Gestionarea punctelor finale (Endpoints):
- Kubernetes elimină IP-ul podului din obiectul Endpoints al serviciului la începutul închiderii, astfel încât traficul nou să nu fie direcționat către podul care se închide.
- Acest lucru permite conexiunilor existente să se încheie în timpul perioadei de grație.
În ansamblu, aceste mecanisme permit Kubernetes să gestioneze procesul de închidere a podurilor pe nod, luând în considerare prioritatea lor, oferindu-le șansa de a se închide corect și evitând distrugerea forțată acolo unde este posibil.