Sobes.tech
Middle

Какво се случва, ако тестът за жизнеспособност в Kubernetes не премине?

sobes.tech AI

Отговор от AI

Ако pod не премине liveness теста, Kubernetes ще изпълни действието, посочено в manifest файла на pod-а. По подразбиране това е рестартиране на контейнера.

Възможни действия при неуспех на liveness теста:

  • Рестартиране: Рестартиране на контейнера вътре в pod-а. Това е по подразбиране.
  • Нищо: Kubernetes няма да предприеме никакви действия при неуспех на liveness теста. Контейнерът ще остане в текущото си състояние (Running или Crashing).
  • Изпълнение на команда: Изпълнение на определена команда вътре в контейнера. Ако командата завърши с ненулев код за връщане, liveness тестът се счита за неуспешен.

Сценарий с действие по подразбиране (Рестартиране):

  1. kubelet на възела редовно проверява контейнера с помощта на liveness тест.
  2. Условие за liveness тест не е изпълнено (например, HTTP сървърът не отговаря, командата завършва с грешка).
  3. kubelet регистрира неуспеха на теста.
  4. След няколко неуспешни опита (настройвани с параметрите failureThreshold, initialDelaySeconds, periodSeconds, timeoutSeconds) kubelet определя, че контейнерът е дефектен.
  5. kubelet изпраща сигнал SIGKILL към дефектния контейнер.
  6. Контейнерът се прекратява.
  7. kubelet го рестартира в същия pod.
  8. Процесът на liveness теста се възобновява.

Важно е да се различават liveness тестът и readiness тестът. Readiness тестът определя дали контейнерът е готов да приема трафик. Неуспехът на readiness теста води до това, че Service не насочва трафик към този екземпляр на pod-а, но контейнерът не се рестартира. Неуспехът на liveness теста показва неизправност и изисква рестартиране.

# Пример за liveness тест в spec.containers
containers:
  - name: my-container
    image: my-image:latest
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15 # Забавяне преди първата проверка
      periodSeconds: 20      # Интервал между проверките
      timeoutSeconds: 5       # Време за изчакване на отговора
      failureThreshold: 3     # Брой неуспешни опити преди рестартиране