Sobes.tech
Middle+

Jakie czynniki wpływają na poprawne zakończenie pracy węzła w zależności od priorytetu poda?

sobes.tech AI

Odpowiedź od AI

Prawidłowe zamknięcie węzła osiąga się dzięki następującym czynnikom:

  1. Timeouty:
    • terminationGracePeriodSeconds: Określa czas, w którym węzeł będzie próbował poprawnie zakończyć pracę podów przed ich wymuszoną destrukcją. Domyślnie 30 sekund.
    • pod.spec.terminationGracePeriodSeconds: Można nadpisać timeout dla konkretnego poda.
    # Przykład manifestu poda z wydłużonym czasem zamknięcia
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-with-grace-period
    spec:
      containers:
      - name: my-container
        image: my-image
      terminationGracePeriodSeconds: 60 # Wydłużony timeout
    
  2. Sygnały:
    • Kubernetes wysyła sygnał SIGTERM do kontenerów poda.
    • Aplikacja w kontenerze powinna umieć przechwycić SIGTERM i obsłużyć go poprawnie (np. zamknąć bieżące połączenia, zapisać stan).
    • Jeśli aplikacja nie zakończy się po SIGTERM w terminationGracePeriodSeconds, zostanie wysłany SIGKILL.
  3. Priorytet poda (priorityClassName):
    • W przypadku wyparcia (np. przy braku zasobów lub ewakuacji węzła) pody o niższym priorytecie kończą się jako pierwsze.
    • Zapewnia to, że krytyczne (wysokoprioritetowe) pody będą działać dłużej i będą miały więcej czasu na poprawne zamknięcie, jeśli węzeł stanie się niedostępny.
    # Przykład manifestu poda z określeniem klasy priorytetu
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-priority-pod
    spec:
      containers:
      - name: my-container
        image: my-image
      priorityClassName: high-priority # Użycie klasy priorytetu
    
  4. Hooki PreStop:
    • Dodatkowe skrypty lub wywołania wykonywane w kontenerze bezpośrednio przed wysłaniem SIGTERM.
    • Mogą służyć do synchronizacji, odsubskrybowania od usług lub innych zadań niezbędnych do poprawnego zamknięcia.
    # Przykład hooka 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"] # Przykładowa komenda
    
  5. Zarządzanie punktami końcowymi (Endpoints):
    • Kubernetes usuwa IP poda z obiektu Endpoints Service podczas rozpoczęcia zamknięcia, aby nowy ruch nie był kierowany do zamykającego się poda.
    • Pozwala to na zakończenie istniejących połączeń w czasie okresu grace.

Ogólnie te mechanizmy pozwalają Kubernetes zarządzać procesem zamykania podów na węźle, uwzględniając ich priorytet, dając im szansę na poprawne zamknięcie i unikając wymuszonego niszczenia tam, gdzie jest to możliwe.