Руководство по поиску и устранению неисправностей K8s
Примечание. Полная ментальная карта доступна по адресу: K8s Troubleshooting Mind Map.
Что такое ошибка ImagePullBackOff?
В K8s, если вы столкнетесь с ошибкой ImagePullBackOff
, это означает, что ваш модуль не может получить указанный образ из реестра контейнеров. Например:
$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx 0/1 ImagePullBackOff 0 5m
Вы можете использовать команду kubectl describe pod <pod_name>
, чтобы увидеть больше информации об ошибке.
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 5m default-scheduler Successfully assigned default/my-pod to node1 Warning Failed 5m kubelet, node1 Error: ImagePullBackOff Normal Pulling 4m (x2 over 5m) kubelet, node1 pulling image "myregistry/myimage:v1" Warning Failed 4m (x2 over 5m) kubelet, node1 Failed to pull image "myregistry/myimage:v1": rpc error: code = Unknown desc = Error response from daemon: Get https://myregistry/v2/myimage/manifests/v1: unauthorized: authentication required
Действия по устранению неполадок
Проверьте имя изображения и тег
Вы должны проверить имя и тег образа, убедиться, что имя и тег образа, указанные в определении пода, соответствуют образу, который фактически доступен в реестре контейнеров. Вы также можете использовать команду docker pull
для запуска быстрого теста.
Проверить репозиторий изображений
Иногда, если вы используете частный реестр образов, возможно, что служба реестра не запущена и не работает. Проверьте, запущен ли ваш реестр образов и не заблокирован ли он какими-либо правилами брандмауэра.
Проверить наличие изображения
Проверьте, доступен ли образ в реестре контейнеров.
Проверить состояние сети
Убедитесь, что у кластера K8s есть доступ к реестру контейнеров и что нет проблем с сетью, блокирующих подключение.
Проверить секретные учетные данные
Убедитесь, что учетная запись службы или секрет, используемые модулем, имеют правильные учетные данные для извлечения образа.
Вы можете проверить imagePullSecret
(тип секретного объекта, который используется для аутентификации в реестре контейнеров). Обычно он содержит имя пользователя и пароль или токен API, который можно использовать для извлечения образов из реестра.
Вы можете найти его имя в определении Pod.
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: <your-private-image> imagePullSecrets: - name: regcred
Затем вы можете использовать команду kubectl get secret regcred --output=yaml
для просмотра содержимого этого секрета:
apiVersion: v1 kind: Secret metadata: ... name: regcred ... data: .dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0= type: kubernetes.io/dockerconfigjson
Значение поля .dockerconfigjson
— это представление ваших учетных данных Docker в формате base64.
Проверить журналы модуля
Дополнительные сведения об ошибке см. в журналах модуля. Команда:
$ kubectl logs <pod-name>
Эта команда по умолчанию отображает журналы для первого контейнера в поде. Если у пода несколько контейнеров и вы хотите просмотреть журналы для определенного контейнера, вы можете указать имя контейнера с флагом -c
или --container
:
$ kubectl logs my-pod -c my-container
Вы можете использовать команду kubectl describe pod <pod-name>
, которая предоставит подробную информацию о поде, включая список контейнеров и их текущий статус.
Проверьте версию K8s
Убедитесь, что версия компонентов K8s (особенно среда выполнения контейнера) работает с образом. Интересное чтение доступно здесь: https://github.com/kubernetes/minikube/issues/14789
Проверьте лимиты ресурсов
Убедитесь, что у пода достаточно ресурсов для запуска контейнера. Вы можете использовать kubectl describe po <pod_name>
для проверки ограничений ресурсов ЦП и памяти.