Под застрял в состоянии `Pending` и не планируется.
→Выполните `kubectl describe pod <pod-name>`. Проверьте раздел `Events` на наличие сообщений от планировщика.
Почему: Команда `describe` — это основной инструмент для этого. Она покажет причины, такие как "Недостаточно CPU/памяти", "узел(ы) имел(и) taint(ы), которые под не tolerował", или "не совпал селектор узла".
Под многократно запускается и завершается сбоем, имея статус `CrashLoopBackOff`.
→1. `kubectl logs <pod-name> --previous` для просмотра логов из упавшего контейнера. 2. `kubectl describe pod <pod-name>` для проверки кода выхода и причины.
Почему: `CrashLoopBackOff` означает, что приложение внутри контейнера завершает работу. Логи предыдущего экземпляра (`--previous`) критически важны, так как текущий контейнер, возможно, еще не записал ничего полезного. Код выхода также может указывать на тип ошибки.
Под не запускается со статусом `ImagePullBackOff` или `ErrImagePull`.
→`kubectl describe pod <pod-name>` для просмотра сообщения о событии. Убедитесь, что имя и тег образа верны. Для частных реестров убедитесь, что `imagePullSecrets` настроен, а секрет действителен.
Почему: Это проблема реестра или имени образа, а не приложения. Распространенные причины — опечатки, неверные теги или сбой аутентификации в частном реестре.
Узел имеет статус `NotReady`.
→Подключитесь по SSH к затронутому узлу. Проверьте статус службы kubelet с помощью `systemctl status kubelet`. Просмотрите ее логи с помощью `journalctl -u kubelet`.
Почему: `kubelet` — это агент, отвечающий за отчеты о состоянии узла. Если он не работает или не может связаться с API-сервером, узел будет помечен как NotReady. Его логи — первое место, куда следует заглянуть.
Служба существует, но трафик не достигает внутренних подов.
→1. `kubectl describe svc <service-name>` и убедитесь, что `Selector` соответствует меткам подов. 2. `kubectl get endpoints <service-name>` и убедитесь, что он перечисляет правильные IP-адреса подов. Если нет, метки не совпадают.
Почему: Связь между Service и его подами — это селектор меток. Если селектор неверен или поды не имеют правильных меток, объект Endpoints будет пустым, и служба не сможет маршрутизировать трафик.
Поды не могут разрешить имена служб или внешние имена хостов.
→1. Проверьте, запущены ли поды CoreDNS в `kube-system`. 2. Проверьте логи CoreDNS. 3. Запустите отладочный под (например, `busybox`) и используйте `nslookup` для проверки разрешения внутри кластера.
Почему: DNS — критическая зависимость кластера. Сбои обычно связаны с самим развертыванием CoreDNS, его конфигурацией (в ConfigMap) или сетевыми политиками, блокирующими DNS-трафик на портах UDP/TCP 53.
Узел должен быть выведен из эксплуатации для обслуживания.
→Сначала `kubectl cordon <node-name>`, чтобы пометить его как непланируемый. Затем `kubectl drain <node-name> --ignore-daemonsets`, чтобы безопасно вытеснить все пользовательские поды.
Почему: `cordon` предотвращает планирование новых подов. `drain` соблюдает PodDisruptionBudgets и изящно вытесняет поды. `--ignore-daemonsets` необходим, потому что поды DaemonSet не могут быть вытеснены.
Определить, какие поды или узлы потребляют больше всего CPU или памяти.
→Используйте `kubectl top pods` и `kubectl top nodes`. Для этого требуется, чтобы `metrics-server` был развернут в кластере.
Почему: `kubectl top` предоставляет быстрый просмотр потребления ресурсов в реальном времени, что крайне важно для выявления ресурсоемких приложений или нагрузки на ресурсы узлов.
Под долгое время находится в состоянии `Terminating` и не удаляется.
→Принудительно удалите под с помощью `kubectl delete pod <pod-name> --grace-period=0 --force`.
Почему: Это может произойти, если финализатор застрял или kubelet не может очистить ресурсы. Принудительное удаление немедленно удаляет под с API-сервера, но его следует использовать в крайнем случае, так как это может оставить безхозные ресурсы на узле.