Общая диагностика

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

Возможные причины:

Проверьте:

kubectl describe pod -n "$NS" <pod>
kubectl get secret -n "$NS"

Сверьте образ с images/image-lock.csv.

Ошибка публикации runtime-образов

Если Kaniko или executor получает UNAUTHORIZED или DENIED, проверьте:

Pod остаётся Pending

Проверьте:

kubectl describe pod -n "$NS" <pod>
kubectl get nodes
kubectl top nodes

Частые причины:

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.