Sobes.tech
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:

  1. 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
    
  2. Semnale:
    • Kubernetes trimite semnalul SIGTERM containerelor 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 în terminationGracePeriodSeconds, se trimite SIGKILL.
  3. 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
    
  4. 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
    
  5. 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.