Какие контейнеры в Kubernetes используются для проверки команд и состояния основного контейнера?

Ответ

В Kubernetes для проверок используются специальные типы контейнеров в рамках Pod: Init Containers и, что более точно для вашего вопроса, Ephemeral Containers (эфемерные контейнеры). Однако, классический и наиболее распространённый способ проверки команд — это контейнеры с пробками (Probes).

  1. Liveness Probe (Проба жизнеспособности): Проверяет, работает ли контейнер. Если проверка fails, kubelet перезапускает контейнер.

    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
  2. Readiness Probe (Проба готовности): Проверяет, готов ли контейнер принимать трафик. Если проверка fails, контейнер удаляется из эндпоинтов сервиса.

    readinessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 2
  3. Startup Probe (Проба старта): Используется для медленно стартующих приложений. Отключает проверки liveness/readiness до успешного старта.

  4. 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). Вот это реально удобно, ёпта.

  1. Liveness Probe (Проба жизнеспособности): Эта штука проверяет, не сдох ли твой контейнер. Если проверка провалится, kubelet его просто перезапустит, и всё. Просто, как три копейки.

    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
  2. Readiness Probe (Проба готовности): А вот эта уже умнее. Она смотрит, готов ли контейнер трафик принимать. Если нет — его выкидывают из списка эндпоинтов сервиса, чтобы не портить статистику. Доверия ебать ноль к неготовым контейнерам, правильно же?

    readinessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 2
  3. Startup Probe (Проба старта): Это для тех приложений, которые стартуют, как черепаха в сиропе. Пока эта проба не пройдёт, остальные проверки (liveness/readiness) даже не начнутся. Терпения ноль ебать, но что поделать.

  4. Ephemeral Containers (для отладки): А вот это, бля, просто песня! Временные контейнеры, которые ты можешь воткнуть в уже работающий Pod, чтобы посмотреть, что там творится. Особенно выручает, когда в основном контейнере нет даже curl или dig, один голый бинарник. Сам от себя охуел, когда впервые попробовал.

    # Добавление эфемерного контейнера для отладки
    kubectl debug -it <pod-name> --image=busybox:latest --target=<container-name>

Короче, суть в чём: для автоматических проверок по расписанию — это Probes, твои верные сторожа. А если приспичило вручную поковыряться в работающем поде — тебе на помощь Ephemeral Containers. Всё гениальное просто, как хуй с горы.