Общая диагностика
export NS=offline kubectl get pods -n "$NS" -o wide kubectl get jobs -n "$NS" kubectl get events -n "$NS" \ --sort-by='.lastTimestamp' Для просмотра логов: kubectl logs -n "$NS" <pod> \ -c <container> \ --tail=200 Для Pod после перезапуска: kubectl logs -n "$NS" <pod> \ -c <container> \ --previous \ --tail=200
ImagePullBackOff
Возможные причины:
образ отсутствует в целевом registry;
указан неправильный адрес registry;
Kubernetes Secret содержит неверные credentials;
container runtime не доверяет сертификату registry;
узел не имеет сетевого доступа к registry.
Проверьте:
kubectl describe pod -n "$NS" <pod> kubectl get secret -n "$NS"
Сверьте образ с images/image-lock.csv.
Ошибка публикации runtime-образов
Если Kaniko или executor получает UNAUTHORIZED или DENIED, проверьте:
EXECUTORS_IMAGE_REGISTRY;пользователя и пароль executor registry;
права
pullиpush;Secret
executors-container-registry-secret;доверие к TLS-сертификату registry.
Pod остаётся Pending
Проверьте:
kubectl describe pod -n "$NS" <pod> kubectl get nodes kubectl top nodes
Частые причины:
недостаточно CPU или памяти;
неподдерживаемые taint и toleration;
PVC не может быть создан;
отсутствует подходящий узел.
PVC остаётся Pending
kubectl get pvc -n "$NS" kubectl describe pvc -n "$NS" <pvc> kubectl get storageclass
Убедитесь, что StorageClass существует и один класс назначен по умолчанию.
Для StorageClass с режимом WaitForFirstConsumer PVC может ожидать планирования Pod. Это штатное поведение, если Pod затем успешно назначается на узел.
Ошибки DNS и timeout
Проверьте разрешение имени и маршрутизацию:
getent hosts <имя> curl -vk https://<имя>
Из временного Pod:
kubectl run -n "$NS" dns-check \ --rm -it \ --restart=Never \ --image=busybox:1.36 \ -- nslookup <имя>
Timeout обычно указывает на DNS, маршрутизацию, ACL или межсетевой экран.
Ошибка первоначального входа
Получите актуальный пароль из Kubernetes Secret:
kubectl get secret -n "$NS" \
keycloak-ml-bootstrap-user \
-o jsonpath='{.data.password}' | base64 -d
printf '\n'
Проверьте состояние Keycloak и bootstrap Job:
kubectl get pods,jobs -n "$NS" | grep -E 'keycloak|bootstrap' kubectl logs -n "$NS" <bootstrap-job-pod> --tail=200
Devpi не готов
Проверьте Pod и Job импорта:
kubectl get pods,jobs -n "$NS" | grep devpi kubectl logs -n "$NS" <devpi-pod> --tail=200
Devpi восстанавливается из snapshot текущей поставки. При обновлении старое содержимое Devpi не переносится.
Ошибка после обновления Redis
Для старой несовместимой Redis-инсталляции может потребоваться однократное пересоздание Redis PVC.
Сначала завершите активные задачи Celery, затем повторите установку с:
OFFLINE_ALLOW_REDIS_DATA_RESET=trueПосле успешного обновления отключите этот параметр.
Smoke-проверка не проходит
Запустите её отдельно:
./install/offline-smoke.sh --namespace "$NS"
./install/offline-smoke.sh --namespace "$NS"Исправляйте первую обнаруженную ошибку, затем повторяйте проверку. Не следует считать установку завершённой, пока smoke-проверка не завершится успешно.
Расширенные сообщения установщика
OFFLINE_DEBUG=true \ ./install/offline-install.sh \ --config install/offline-install.conf
Режим выводит дополнительные этапы диагностики без значений Secret.