Как дебажить поды в Kubernetes?

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

Ответ

Для отладки подов в Kubernetes я использую комбинацию стандартных команд kubectl и дополнительных инструментов. Вот мой типичный подход:

  1. Проверка состояния и событий:

    kubectl describe pod <pod-name> -n <namespace>

    Это первое, что я делаю, чтобы увидеть состояние контейнеров, события (Events) и возможные проблемы с подами, секретами или конфигурациями.

  2. Просмотр логов:

    # Логи текущего контейнера
    kubectl logs <pod-name> -n <namespace>
    # Логи предыдущего экземпляра контейнера (если он перезапускался)
    kubectl logs <pod-name> --previous -n <namespace>
    # Логи конкретного контейнера в мультиконтейнерном поде
    kubectl logs <pod-name> -c <container-name> -n <namespace>
    # Логи в реальном времени
    kubectl logs -f <pod-name> -n <namespace>
  3. Интерактивный доступ для исследования:

    # Запуск оболочки в контейнере пода
    kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
    # Если bash недоступен, пробую sh
    kubectl exec -it <pod-name> -n <namespace> -- /bin/sh

    Внутри контейнера проверяю процессы (ps aux), сетевые соединения (netstat -tulpn или ss -tulpn), монтирования (mount), переменные окружения (env) и наличие ожидаемых файлов.

  4. Отладка с временным контейнером (Ephemeral Container): Для образов без оболочки (например, scratch) или когда нужно добавить инструменты отладки, использую:

    kubectl debug -it <pod-name> --image=busybox:latest --target=<container-name> -n <namespace>

    Это позволяет присоединить временный контейнер с отладочными утилитами к пространству имен целевого пода.

  5. Проброс портов для локального тестирования:

    kubectl port-forward pod/<pod-name> 8080:80 -n <namespace>

    Затем обращаюсь к сервису через localhost:8080, чтобы проверить его работу извне кластера.

  6. Дополнительные инструменты:

    • Lens IDE: Для визуального анализа состояния кластера, подов и логов.
    • k9s: Терминальный дашборд для быстрой навигации и выполнения команд.
    • Centralized Logging: Если настроен стек EFK (Elasticsearch, Fluentd/Fluent Bit, Kibana) или Loki/Grafana, ищу логи там для агрегированного представления.

Ключевой момент — начинать с describe и logs, чтобы понять контекст, а затем углубляться с помощью exec или debug.