Как происходит диагностика проблем в Kubernetes?

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

Ответ

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

1. Проверка состояния Pod'а и его контейнеров:

# 1.1. Общий статус подов в неймспейсе
kubectl get pods -n my-namespace
# 1.2. Детальная информация о проблемном поде (Events - ключевой раздел!)
kubectl describe pod/my-app-pod -n my-namespace
# 1.3. Просмотр логов контейнера. Флаг --previous если контейнер перезапустился
kubectl logs pod/my-app-pod -n my-namespace --previous
# 1.4. Если в поде несколько контейнеров, указываем имя
kubectl logs pod/my-app-pod -c my-app-container -n my-namespace

2. Проверка работоспособности приложения внутри пода:

# 2.1. Выполнить команду в работающем контейнере (например, проверить доступность порта)
kubectl exec pod/my-app-pod -n my-namespace -- curl -I http://localhost:8080/health
# 2.2. Для глубокой отладки запускаю временный контейнер с утилитами (debug)
kubectl debug -it pod/my-app-pod -n my-namespace --image=nicolaka/netshoot --target=my-app-container

3. Проверка сетевой связности и сервисов:

# 3.1. Убедиться, что Service существует и имеет Endpoints
kubectl get svc,ep my-service -n my-namespace -o wide
# 3.2. Проверить DNS-разрешение внутри кластера
kubectl run dns-test --image=busybox:1.28 --rm -it --restart=Never -- nslookup my-service.my-namespace

4. Проверка потребления ресурсов и лимитов:

# 4.1. Текущее использование CPU/Memory
kubectl top pods -n my-namespace
# 4.2. Проверить, не достигнут ли лимит ресурсов (OOMKilled)
kubectl describe pod/my-app-pod | grep -A 5 -B 5 "Limits|OOMKilled"

5. Проверка состояния узлов (Nodes) и компонентов кластера:

# 5.1. Статус всех узлов
kubectl get nodes -o wide
# 5.2. События на уровне всего кластера
kubectl get events --all-namespaces --sort-by='.lastTimestamp'
# 5.3. Проверка статуса системных компонентов (control plane)
kubectl get componentstatuses

Для постоянного мониторинга мы используем стек Prometheus/Grafana с дашбордами для Kubernetes и приложений, а также инструменты вроде k9s для интерактивного управления и Lens для визуализации.