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

«Какие контейнеры в Kubernetes используются для проверки команд и состояния основного контейнера?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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.