Сегодня попробуем ответить на такой вопрос:
Что происходит в Kubernetes, когда под не проходит liveness probe
Большинство кандидатов отвечают: «Он перезапускается». Но это — только верхушка айсберга.
Под капотом Kubernetes:
1. Когда liveness probe проваливается kubelet сообщает об этом API Server, который записывает Pod как unhealthy в etcd.
2. Дальше kubelet через containerd/CRI-O убивает контейнер и проверяет restartPolicy:
если можно — перезапускает, если нет — Pod считается завершённым.
3. Контроллер ReplicaSet видит, что живых Pod’ов меньше, и создаёт новый.
4. Scheduler выбирает подходящий узел, а kube-proxy убирает сбойный Pod из маршрутов сервиса.
5. В kubectl describe pod появляются события, но если Prometheus не следит за ними — узнаете о проблеме только от пользователей.
Сеньор-уровень — это не про YAML, а про понимание того, что конкретно происходит.
#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Одним из популярных вопросов на собесе является вопрос про разницу между Liveness, Readiness и Startup пробы. Давайте разберёмся, что каждая из этих проб делает, когда и как их использовать.
1. Что такое Liveness Probe
Цель: проверка, жив ли контейнер. Если контейнер не отвечает на пробу, Kubernetes перезапустит его.
Когда использовать: всегда используйте Liveness пробу, чтобы обнаружить ситуации, когда приложение зависает или перестаёт функционировать. Это поможет Kubernetes перезапустить контейнер и избежать длительных сбоев.
Пример: если ваше приложение зависает из-за дедлока или других внутренних проблем, Liveness проба поможет автоматически перезапустить контейнер.
2. Что такое Readiness Probe
Цель: проверка готовности контейнера принимать трафик. Если контейнер не готов, Kubernetes не будет направлять трафик к этому контейнеру.
Когда использовать: используйте Readiness пробу, когда приложению нужно время для инициализации, например, для подключения к базе данных или загрузки конфигураций.
Пример: если веб-серверу нужно 10 секунд для подключения к базе данных, настройте Readiness пробу, чтобы Kubernetes не отправлял запросы до завершения этого процесса.
3. Что такое Startup Probe
Цель: проверка того, успешно ли контейнер стартовал. Полезно для контейнеров с долгим временем старта.
Когда использовать: используйте Startup пробу для контейнеров, которые требуют длительного времени для инициализации, чтобы избежать преждевременных перезапусков.
Пример: если ваше приложение загружает большую модель машинного обучения, настройте Startup пробу, чтобы Kubernetes не пытался перезапустить контейнер до окончания загрузки.
Опции конфигурации проб
1. initialDelaySeconds
Указывает время, которое Kubernetes будет ждать после старта контейнера до первой проверки.
Пример: если вашему приложению нужно 10 секунд для начала работы, установите
initialDelaySeconds: 10.2. periodSeconds
Интервал между проверками после первой.
Пример: если вы хотите проверять контейнер каждые 30 секунд, установите
periodSeconds: 30.3. failureThreshold
Указывает, сколько последовательных неудачных проверок Kubernetes допускает до того, как перезапустит контейнер.
Пример: если ваше приложение иногда теряет соединение, установите
failureThreshold: 3, чтобы избежать перезапусков при временных сбоях.4. timeoutSeconds
Время, которое Kubernetes будет ждать от контейнера, прежде чем считать проверку неудачной.
Пример: если приложение может задерживаться с ответом, установите
timeoutSeconds: 5, чтобы дать достаточно времени на обработку запроса.Как избежать конфликтов при настройке проб
Если настроены все три типа проб, важно убедиться, что они не конфликтуют. Например, если настроена Startup проба, то Liveness и Readiness пробы будут выполняться только после её успешного завершения. Это помогает избежать перезапуска контейнера на этапе инициализации, если приложение запускается медленно.
#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3