Как найти и диагностировать ошибку в Kubernetes?

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

Ответ

Диагностика в Kubernetes строится по принципу "от общего к частному". Вот мой стандартный алгоритм действий:

1. Быстрый обзор состояния кластера и workloads:

# Смотрю общее состояние подов в нужном namespace
$ kubectl get pods -n <namespace> -o wide

# Если под в состоянии CrashLoopBackOff, Pending или Error, смотрю события
$ kubectl describe pod <pod-name> -n <namespace>
# В секции 'Events' часто сразу видна причина (нехватка ресурсов, ошибка образа, провал проб)

2. Анализ логов приложения:

# Логи последнего запуска контейнера
$ kubectl logs <pod-name> -n <namespace>

# Логи с предыдущего запуска (если контейнер падал)
$ kubectl logs <pod-name> -n <namespace> --previous

# Логи конкретного контейнера в multi-контейнерном поде
$ kubectl logs <pod-name> -c <container-name> -n <namespace>

# Логи в реальном времени (tail -f)
$ kubectl logs -f <pod-name> -n <namespace>

3. Проверка конфигурации и ресурсов:

# Для проблем с развертыванием
$ kubectl describe deployment <deployment-name> -n <namespace>
$ kubectl get events --sort-by='.metadata.creationTimestamp' -n <namespace> | tail -20

# Проверка ресурсов (лимиты/запросы)
$ kubectl top pod -n <namespace>
$ kubectl describe node <node-name> | grep -A 10 "Allocated resources"

# Диагностика сети: проверка эндпоинтов сервиса и DNS
$ kubectl get endpoints <service-name> -n <namespace>
$ kubectl exec -it <pod-name> -n <namespace> -- nslookup <service-name>.<namespace>.svc.cluster.local

4. Использование отладочных подов (debug pods):

# Запуск временного пода с сетевыми утилитами для тестирования подключений
$ kubectl run debug-pod --image=nicolaka/netshoot -it --rm --restart=Never -- /bin/bash
# Внутри пода можно использовать curl, dig, traceroute и т.д.

5. Инструменты мониторинга: В продакшене всегда настраиваю сбор логов (Loki, ELK) и метрик (Prometheus, Grafana) для proactive-диагностики.