Ответ
В Kubernetes для проверок используются специальные типы контейнеров в рамках Pod: Init Containers и, что более точно для вашего вопроса, Ephemeral Containers (эфемерные контейнеры). Однако, классический и наиболее распространённый способ проверки команд — это контейнеры с пробками (Probes).
-
Liveness Probe (Проба жизнеспособности): Проверяет, работает ли контейнер. Если проверка fails, kubelet перезапускает контейнер.
livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 -
Readiness Probe (Проба готовности): Проверяет, готов ли контейнер принимать трафик. Если проверка fails, контейнер удаляется из эндпоинтов сервиса.
readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 10 periodSeconds: 2 -
Startup Probe (Проба старта): Используется для медленно стартующих приложений. Отключает проверки liveness/readiness до успешного старта.
-
Ephemeral Containers (для отладки): Это временные контейнеры, которые можно добавить в запущенный Pod для инспекции его состояния, когда отладка через
kubectl execнедостаточна (например, если основной контейнер не имеет отладочных утилит).# Добавление эфемерного контейнера для отладки kubectl debug -it <pod-name> --image=busybox:latest --target=<container-name>
Таким образом, для автоматической проверки команд используются Probes, а для ручной отладки — Ephemeral Containers.
Ответ 18+ 🔞
Да ты посмотри, какая красота! В Kubernetes, бля, для проверок есть целая куча специальных контейнеров в Pod'ах: Init Containers и, что точнее для твоего вопроса, Ephemeral Containers (эфемерные, то есть временные). Но если честно, классика жанра и самый частый способ — это контейнеры с пробками (Probes). Вот это реально удобно, ёпта.
-
Liveness Probe (Проба жизнеспособности): Эта штука проверяет, не сдох ли твой контейнер. Если проверка провалится, kubelet его просто перезапустит, и всё. Просто, как три копейки.
livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 -
Readiness Probe (Проба готовности): А вот эта уже умнее. Она смотрит, готов ли контейнер трафик принимать. Если нет — его выкидывают из списка эндпоинтов сервиса, чтобы не портить статистику. Доверия ебать ноль к неготовым контейнерам, правильно же?
readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 10 periodSeconds: 2 -
Startup Probe (Проба старта): Это для тех приложений, которые стартуют, как черепаха в сиропе. Пока эта проба не пройдёт, остальные проверки (liveness/readiness) даже не начнутся. Терпения ноль ебать, но что поделать.
-
Ephemeral Containers (для отладки): А вот это, бля, просто песня! Временные контейнеры, которые ты можешь воткнуть в уже работающий Pod, чтобы посмотреть, что там творится. Особенно выручает, когда в основном контейнере нет даже
curlилиdig, один голый бинарник. Сам от себя охуел, когда впервые попробовал.# Добавление эфемерного контейнера для отладки kubectl debug -it <pod-name> --image=busybox:latest --target=<container-name>
Короче, суть в чём: для автоматических проверок по расписанию — это Probes, твои верные сторожа. А если приспичило вручную поковыряться в работающем поде — тебе на помощь Ephemeral Containers. Всё гениальное просто, как хуй с горы.