После обновления (или после правки ресурсов, или после перезагрузки) под deckhouse в пространстве имён d8-system висит 1/2 Ready либо в CrashLoopBackOff. С чего начать?
После обновления (или после правки ресурсов, или после перезагрузки) под deckhouse в пространстве имён d8-system висит 1/2 Ready либо в CrashLoopBackOff. С чего начать?
В поде два контейнера, deckhouse и kube-rbac-proxy; смотрим первый.
Логи, события и очередь:
d8 k -n d8-system logs -l app=deckhouse -c deckhouse --tail=300 | grep -iE 'error|fail'
d8 k -n d8-system logs -l app=deckhouse -c deckhouse --previous # при CrashLoopBackOff
d8 k -n d8-system describe po -l app=deckhouse
d8 s queue list
Обычно видна задача ModuleRun конкретного модуля, которая не может применить манифест.
Частые причины:
Ручная правка ресурса модуля удалила поле, которое у созданного объекта Kubernetes менять не даёт. Пример: из IngressNginxController убрали loadBalancerClass, а у Service это поле неизменяемое. Верните поле или пересоздайте соответствующий Service.
Сторонний admission webhook (например, Kyverno или OPA) недоступен или режет системные поды, и после перезагрузки не поднимаются CoreDNS и сам deckhouse. Исключите d8-* и kube-system из его правил.
Нет доступа к registry (алерт D8DeckhouseHasNoAccessToRegistry). Сравните, как резолвится registry на узле и в поде:
getent ahosts registry.deckhouse.ru
d8 k -n d8-system exec svc/deckhouse-leader -c deckhouse -- python3 -c "import socket; print(socket.gethostbyname_ex('registry.deckhouse.ru'))"
Если адреса разные, проверьте search в /etc/resolv.conf узлов: wildcard-домен там подменяет адрес registry в подах.
Подробнее в документации: FAQ, раздел «Deckhouse», вопросы «Как проверить очередь заданий в Deckhouse?» и «Что делать при наличии проблем с обновлением Deckhouse Platform?».