Middle
Какво се случва, ако тестът за жизнеспособност в Kubernetes не премине?
sobes.tech AI
Отговор от AI
Ако pod не премине liveness теста, Kubernetes ще изпълни действието, посочено в manifest файла на pod-а. По подразбиране това е рестартиране на контейнера.
Възможни действия при неуспех на liveness теста:
- Рестартиране: Рестартиране на контейнера вътре в pod-а. Това е по подразбиране.
- Нищо: Kubernetes няма да предприеме никакви действия при неуспех на liveness теста. Контейнерът ще остане в текущото си състояние (
RunningилиCrashing). - Изпълнение на команда: Изпълнение на определена команда вътре в контейнера. Ако командата завърши с ненулев код за връщане, liveness тестът се счита за неуспешен.
Сценарий с действие по подразбиране (Рестартиране):
- kubelet на възела редовно проверява контейнера с помощта на liveness тест.
- Условие за liveness тест не е изпълнено (например, HTTP сървърът не отговаря, командата завършва с грешка).
- kubelet регистрира неуспеха на теста.
- След няколко неуспешни опита (настройвани с параметрите
failureThreshold,initialDelaySeconds,periodSeconds,timeoutSeconds) kubelet определя, че контейнерът е дефектен. - kubelet изпраща сигнал
SIGKILLкъм дефектния контейнер. - Контейнерът се прекратява.
- kubelet го рестартира в същия pod.
- Процесът на 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 # Брой неуспешни опити преди рестартиране