Диагностика Pod в состоянии Pending или CrashLoopBackOff
Практическое руководство: Диагностика Pod в состоянии Pending или CrashLoopBackOff. Подготовка, команды, проверка, безопасность и откат.
Задача и общий подход
Материал посвящён теме «Диагностика Pod в состоянии Pending или CrashLoopBackOff» с акцентом на безопасности и ограничению доступа.
Kubernetes добавляет уровни контейнера, Pod, Service, Ingress и сетевой политики. Диагностика должна определить, где объект перестаёт быть готовым.
Практический порядок одинаков для любой рабочей системы: зафиксировать исходное состояние, создать резервную точку, изменить один компонент, проверить результат и только затем переходить дальше.
Когда применять этот порядок
Этот сценарий подходит для следующих ситуаций:
- плановое внедрение или перенос компонента категории «Kubernetes» на новый VPS
- изменение портов, домена, сертификата, маршрута или способа публикации сервиса
- разбор инцидента, когда локальная и внешняя проверки дают разные результаты
- подготовка к обновлению пакета или восстановлению после неудачного изменения
Что должно получиться
После выполнения руководства по теме «Диагностика Pod в состоянии Pending или CrashLoopBackOff» результат должен быть измеримым:
- исключить зависимость от временных правил и ручных действий
- оставить наружу только необходимые интерфейсы и порты
- сохранить резервную точку и понятный сценарий отката
- получить воспроизводимую конфигурацию, проверяемую командами
Резервная точка
Сохраните именно те файлы и параметры, которые собираетесь менять.
Универсальная фиксация состояния
TS=$(date +%F-%H%M%S)
mkdir -p /root/iiadmin-change-$TS
cp -a /path/to/config /root/iiadmin-change-$TS/
systemctl status SERVICE --no-pager > /root/iiadmin-change-$TS/status-before.txt
ss -lntup > /root/iiadmin-change-$TS/listeners-before.txtЗамените путь и SERVICE. Для активных баз данных используйте штатный экспорт, а не обычный cp.
Рядом с копией запишите точную команду восстановления. Это особенно важно, если откат будет выполнять другой администратор.
Подготовка перед изменениями
Подготовительный этап снижает риск потерять доступ и смешать несколько причин одной неисправности.
- Проверьте свободное место, DNS и системное время.
- Сохраните копии изменяемых файлов с датой и временем.
- Подготовьте команду отката до применения изменений.
- Откройте вторую административную сессию и не закрывайте текущую.
- Зафиксируйте текущие порты, процессы и состояние службы.
Пошаговая настройка
Выполняйте блоки последовательно и после каждого шага проверяйте код возврата команды.
Описание Pod
kubectl describe pod POD_NAME -n NAMESPACEEvents показывают причины Pending и probe failure.
Состояние
kubectl get nodes -o wide
kubectl get pods -A -o wideОпределите масштаб проблемы.
Журналы
kubectl logs POD_NAME -n NAMESPACE --all-containers --tail=200
kubectl logs POD_NAME -n NAMESPACE --previousprevious полезен при перезапусках.
Service и endpoints
kubectl get svc,endpoints -n NAMESPACE
kubectl get pod -n NAMESPACE --show-labelsПустые endpoints указывают на selector или readiness.
Ресурсы
kubectl top nodes
kubectl top pods -A
kubectl describe node NODE_NAMEПроверяются CPU, память и условия узла.
Имена доменов, адреса, порты и пути в примерах условные. Перед выполнением замените их фактическими значениями.
Проверка результата
Проверка должна охватывать конфигурацию, процесс, listener и реальный запрос.
- узлы Ready
- Pod проходит readiness
- Service имеет endpoints
- метки совпадают
- Ingress направляет на нужный Service
Универсальная проверка
systemctl is-active SERVICE
systemctl status SERVICE --no-pager
journalctl -u SERVICE -n 80 --no-pager
ss -lntupЗамените SERVICE и сохраните вывод рядом с резервной копией.
Типичные ошибки
Чаще всего восстановление усложняют следующие действия:
- проверка только локального подключения без внешнего теста
- использование устаревшей команды без проверки версии пакета
- открытие административного порта для всего интернета
- изменение нескольких компонентов одной командой без промежуточных тестов
- удаление рабочей конфигурации до успешного запуска новой
- игнорирование различий правил IPv4 и IPv6
Безопасность
После получения рабочего результата уменьшите количество исключений и временных разрешений.
- выдавайте файлам конфигурации минимальные права
- закрывайте временные порты после завершения теста
- не храните секреты в публикуемых конфигурациях и журналах
- используйте принцип минимально необходимых прав
- ограничивайте административный доступ доверенными IP или VPN
Диагностика, если не заработало
Диагностика строится как последовательное исключение уровней, а не случайный набор перезапусков.
- Подтвердите симптом точной командой и запишите время.
- Проверьте конфигурацию штатным тестом.
- Проверьте процесс и последние записи журнала.
- Убедитесь, что нужный адрес и порт слушаются.
- Сравните локальный запрос с запросом извне.
- Только затем проверяйте firewall, DNS и маршрут.
- Меняйте одну переменную и повторяйте тот же тест.
Для темы «Диагностика Pod в состоянии Pending или CrashLoopBackOff» важно не путать открытый firewall с запущенным сервисом: правило доступа не создаёт listener, а активный процесс не гарантирует доступность извне.
Дальнейшее сопровождение
Рабочая конфигурация со временем устаревает и требует контроля.
- контролируйте таймеры, сертификаты и автоматические задания
- документируйте нестандартные пути и зависимости
- храните резервную копию вне VPS
- проверяйте журналы ошибок и их размер
- периодически выполняйте тестовое восстановление
Откат изменений
Откат выполняется в обратном порядке и с теми же проверками, что использовались после настройки.
- rollout history
- rollout undo
- проверить rollout status
- не удалять тома до проверки данных
Не удаляйте неудачную конфигурацию до выяснения причины: она полезна для diff и разбора инцидента.
Контрольный список
Перед тем как считать тему «Диагностика Pod в состоянии Pending или CrashLoopBackOff» закрытой, пройдите список:
- создана резервная копия
- проверка синтаксиса проходит
- служба active
- порт слушается на правильном интерфейсе
- локальный и внешний тесты успешны
- в журналах нет новой критической ошибки
- порядок отката записан
- временные правила удалены
Что дополнительно сверить в документации
При подготовке материала были сопоставлены разделы русскоязычной документации. Для углублённой проверки полезно изучить:
- Как установить кластер Kubernetes в Ubuntu 22.04 и 24.04
- Kubernetes
- Предварительные требования
- Настройка операционной системы
- Установка CRI-O
- Установка Kubernetes
- Проверка работоспособности кластера
- Заключение
Финальная проверка с точки зрения реального клиента
Последнюю проверку темы «Диагностика Pod в состоянии Pending или CrashLoopBackOff» выполняйте тем же способом, которым сервисом будет пользоваться человек или приложение: с нужным доменом, протоколом, учётной записью и внешней сетью. Локальная команда остаётся диагностическим этапом, но не заменяет прохождение всей цепочки.
После успешного ответа ещё раз просмотрите журнал и убедитесь, что запрос попал в ожидаемый компонент, не создал скрытую ошибку и не использовал старый кэш. Результат и время проверки полезно сохранить рядом с резервной точкой.
Service и endpoints
kubectl get svc,endpoints -n NAMESPACE
kubectl get pod -n NAMESPACE --show-labelsПустые endpoints указывают на selector или readiness.
Повторная проверка после restart или перезагрузки
Часть настроек работает только в текущем процессе или до следующего reload. После успешного первичного теста повторите проверку после штатного restart, а для критичной инфраструктуры — после плановой перезагрузки сервера в окно работ.
Сравните автозапуск, владельцев файлов, постоянные правила firewall, DNS и фактический listener. Это выявляет зависимость от ручной команды, временного файла или правила, которое не сохраняется.
Журналы
kubectl logs POD_NAME -n NAMESPACE --all-containers --tail=200
kubectl logs POD_NAME -n NAMESPACE --previousprevious полезен при перезапусках.
Одна гипотеза — одно изменение
Сформулируйте ожидаемую причину и признак, который её подтвердит. Измените одну переменную, повторите исходный тест и сохраните результат.
Если результат не изменился, верните параметр обратно. Накопление неподтверждённых правок создаёт новую неисправность поверх исходной.
Декларативные ресурсы, Helm и секреты
Для повторного развёртывания сохраняйте исходные манифесты, Helm values, namespaces, RBAC, сетевые политики и параметры Ingress. Экспорт текущего объекта полезен для диагностики, но может содержать служебные поля и не заменяет исходный Git-репозиторий.
Secrets требуют отдельной политики. Base64 не является шифрованием, поэтому значения не должны попадать в публичный архив или журнал генератора.
Инвентаризация ресурсов
kubectl get ns
kubectl get deploy,sts,ds,svc,ingress -A
kubectl get role,rolebinding,clusterrole,clusterrolebinding -A
helm list -AПеред сохранением YAML удаляйте managedFields и защищайте секреты.
Источники и документация
Источники использованы для выбора терминов, контрольных вопросов и команд. Полные абзацы чужих публикаций не копируются.