NPV-AM

Опубликовано: 20 июля 2026
Kubernetes Debugging

Kubernetes: debugging подов

Отладка подов в Kubernetes — одна из самых частых задач DevOps-инженера. Когда приложение падает или ведёт себя некорректно, важно быстро найти причину. Рассмотрим основные инструменты и техники.

Базовая диагностика

# Статус пода
kubectl get pod myapp -n production
kubectl describe pod myapp -n production

# Логи (текущие)
kubectl logs myapp -n production

# Логи (предыдущий контейнер при рестарте)
kubectl logs myapp -n production --previous

# Логи всех подов по лейблу
kubectl logs -l app=myapp -n production --all-containers

CrashLoopBackOff: анализ причин

CrashLoopBackOff — самая частая проблема. Под запускается, падает, перезапускается снова и снова. Алгоритм диагностики:

  1. Посмотрите kubectl describe pod — раздел Events покажет причину
  2. Проверьте логи текущего и предыдущего контейнера
  3. Убедитесь, что command и args указаны правильно
  4. Проверьте переменные окружения
  5. Проверьте readiness/liveness probes
# Частые причины CrashLoopBackOff:
# 1. Ошибка в приложении (посмотрите логи)
# 2. Неправильный command/args
# 3. Отсутствует файл или переменная окружения
# 4. NPE или OOMKill

# Проверка OOMKill
kubectl describe pod myapp | grep -A 5 "Last State"

# Проверка exit code
kubectl get pod myapp -o jsonpath='{.status.containerStatuses[*].lastState.terminated.reason}'

Ephemeral containers

Ephemeral контейнеры позволяют добавить отладочный контейнер к уже запущенному поду, не пересоздавая его. Это критично, когда проблема воспроизводится только в production:

# Добавление ephemeral контейнера
kubectl debug myapp -n production -it --image=busybox --target=myapp

# С кастомным именем
kubectl debug myapp -n production -it \
  --image=nicolaka/netshoot \
  --container=debugger \
  --target=myapp

Ephemeral контейнер наследует namespace, volumes и network основного контейнера. Это позволяет отлаживать сеть, проверять файловую систему и запускать утилиты.

kubectl debug: node-level

Для отладки проблем на ноде (не в поде):

# Отладочная нода
kubectl debug node/worker-1 -it --image=ubuntu

# Внутри отладочной нода можно:
# - Смотреть процессы
# - Проверять сетевые соединения
# - Анализировать файловую систему
# - Проверять диск и память
Ephemeral контейнеры требуют Kubernetes 1.23+ и включённую feature gate EphemeralContainers. В managed Kubernetes (EKS, GKE, AKS) они доступны по умолчанию.

Отладка сети

# Проверка DNS
kubectl exec myapp -it -- nslookup kubernetes.default

# Проверка сетевых соединений
kubectl exec myapp -it -- ss -tlnp

# Трафик между подами
kubectl exec myapp -it -- wget -qO- http://service-b.namespace:8080/health

# С помощью netshoot
kubectl debug myapp -it --image=nicolaka/netshoot -- tcpdump -i eth0 port 8080

Полезные команды

# Все поды с проблемами
kubectl get pods --field-selector=status.phase!=Running

# Поды с OOMKill
kubectl get pods -o json | jq '.items[] | select(.status.containerStatuses[]?.lastState.terminated.reason == "OOMKilled") | .metadata.name'

# Ресурсы пода
kubectl top pod myapp -n production

# Эвенты кластера (проблемы с scheduling)
kubectl get events --field-selector reason=FailedScheduling

Checklist при debugging

Заключение

Kubernetes предоставляет мощные инструменты для отладки: ephemeral containers, kubectl debug, детальные логи и эвенты. Ключ — последовательно исключать возможные причины и использовать правильные инструменты на каждом этапе.

← Назад к списку статей