Как отлаживать ImagePullBackOff?

Внезапно я не могу развернуть некоторые образы, которые можно было развернуть раньше. Я получил следующий статус стручка:

[root@webdev2 origin]# oc get pods 
NAME                      READY     STATUS             RESTARTS   AGE 
arix-3-yjq9w              0/1       ImagePullBackOff   0          10m 
docker-registry-2-vqstm   1/1       Running            0          2d 
router-1-kvjxq            1/1       Running            0          2d 

Приложение просто не запускается. Модуль не пытается запустить контейнер. На странице событий у меня есть Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326. Я подтвердил, что могу вытащить изображение с тегом с docker pull.

Я также проверил журнал последнего контейнера. Его почему-то закрыли. Я думаю, что модуль должен хотя бы попытаться перезапустить его.

У меня закончились идеи по устранению проблем. Что я могу еще проверить?


person Devs love ZenUML    schedule 18.01.2016    source источник
comment
Это установка с несколькими машинами? Если это так, убедитесь, что вы можете тянуть со всех узлов. Если нет, включите регистрацию на --loglevel = 5 на узле и перезапустите - вы должны увидеть напечатанную информацию, описывающую попытку получить изображение и любые ошибки.   -  person Clayton    schedule 18.01.2016
comment
Что вышло после перезапуска с loglevel = 5?   -  person lvthillo    schedule 25.03.2016
comment
Вы решили проблему? может кто-нибудь объяснить эту проблему ImagePullBackOff? (образы существуют в моих «образах докеров»)   -  person ItayB    schedule 18.05.2016
comment
Я получил это, используя неправильный регион для моего репо. Я забыл добавить eu. в --image = eu.gcr.io / $ PROJECT_ID / ...   -  person Clemens Tolboom    schedule 12.10.2016
comment
В моем случае это было неправильное имя тега для передаваемого изображения. Я изменил имя тега, что решило проблему.   -  person Tara Prasad Gurung    schedule 24.10.2019


Ответы (11)


Вы можете использовать синтаксис "описать модуль"

Для использования OpenShift:

oc describe pod <pod-id>  

Для ванильного Kubernetes:

kubectl describe pod <pod-id>  

Изучите события вывода. В моем случае это показывает Back-off pulling image unreachableserver/nginx:1.14.22222

В этом случае образ unreachableserver/nginx:1.14.22222 не может быть извлечен из Интернета, поскольку недоступный сервер реестра Docker отсутствует, а образ nginx:1.14.22222 не существует.

NB: если вы не видите никаких интересных событий, а модуль некоторое время находился в состоянии ImagePullBackOff (кажется, более 60 минут), вам необходимо удалить модуль и просмотреть события из новый пакет.

Для использования OpenShift:

oc delete pod <pod-id>
oc get pods
oc get pod <new-pod-id>

Для ванильного Kubernetes:

kubectl delete pod <pod-id>  
kubectl get pods
kubectl get pod <new-pod-id>

Пример вывода:

  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  32s                default-scheduler  Successfully assigned rk/nginx-deployment-6c879b5f64-2xrmt to aks-agentpool-x
  Normal   Pulling    17s (x2 over 30s)  kubelet            Pulling image "unreachableserver/nginx:1.14.22222"
  Warning  Failed     16s (x2 over 29s)  kubelet            Failed to pull image "unreachableserver/nginx:1.14.22222": rpc error: code = Unknown desc = Error response from daemon: pull access denied for unreachableserver/nginx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
  Warning  Failed     16s (x2 over 29s)  kubelet            Error: ErrImagePull
  Normal   BackOff    5s (x2 over 28s)   kubelet            Back-off pulling image "unreachableserver/nginx:1.14.22222"
  Warning  Failed     5s (x2 over 28s)   kubelet            Error: ImagePullBackOff

Дополнительные действия по отладке

  1. попробуйте вытащить образ докера и пометить вручную на вашем компьютере
  2. Определите узел, выполнив команду kubectl / oc get pods -o wide.
  3. ssh в узел (если можно), который не может вытащить образ докера
  4. убедитесь, что узел может разрешить DNS реестра докеров, выполнив команду ping.
  5. попробуйте вручную вытащить образ докера на узел
  6. Если вы используете частный реестр, убедитесь, что ваш секрет существует, и секрет правильный. Ваш секрет также должен находиться в том же пространстве имен. Спасибо, swenzel
  7. В некоторых реестрах есть брандмауэры, ограничивающие доступ к IP-адресам. Брандмауэр может блокировать извлечение
  8. Некоторые CI создают развертывания с временными секретами докеров. Таким образом, секрет истекает через несколько дней (вы просите о сбоях производства ...)
person rjdkolb    schedule 24.05.2017
comment
Кроме того, если вы используете частный репозиторий изображений, убедитесь, что секреты извлечения изображений существуют, не содержат опечаток и находятся в правильном пространстве имен. - person swenzel; 11.10.2018
comment
В случае частного репозитория изображений также убедитесь, что вы ссылаетесь на секреты извлечения изображений в своем модуле, используя запись imagePullSecrets. - person Donato Szilagyi; 26.11.2019
comment
Также есть длинное сообщение в блоге, описывающее, как подробно отладить это здесь: managedkube.com/kubernetes/k8sbot/troubleshooting/ - person gar; 07.02.2020
comment
Эти инструкции устарели - kubernetes больше не предоставляет подробную информацию о imagepullbackoff. - person Kirk Sefchik; 20.02.2021
comment
@KirkSefchik, кажется, я разобрался, почему вы не видите подробную информацию. Я обновил свой ответ, спасибо. - person rjdkolb; 20.05.2021

Вы пытались отредактировать, чтобы увидеть, что не так (у меня было неправильное расположение изображения)

kubectl edit pods arix-3-yjq9w

или даже удалить свой стручок?

kubectl delete arix-3-yjq9w
person Clemens Tolboom    schedule 12.10.2016

Я столкнулся с аналогичной ситуацией, и оказалось, что с актуализацией Docker Desktop я был выведен из системы, а после того, как я снова вошел, все снова работает нормально.

person David Louda    schedule 13.01.2021

Я столкнулся с этой проблемой в GKE, и причина заключалась в отсутствии учетных данных для докера.

Запуск этого решил:

gcloud auth configure-docker
person Mitzi    schedule 07.02.2021

На GKE, если под мертв, лучше проверить события. Он более подробно покажет, в чем ошибка.

В моем случае у меня было:

Failed to pull image "gcr.io/project/imagename@sha256:c8e91af54fc17faa1c49e2a05def5cbabf8f0a67fc558eb6cbca138061a8400a":
 rpc error: code = Unknown desc = error pulling image configuration: unknown blob

Оказалось, изображение каким-то образом испорчено. После повторной очистки и развертывания с новым хешем он снова заработал.

[обновление] ретроспективно, я думаю, что изображения были повреждены, потому что для корзины в GCP, в которой размещены изображения, была установлена ​​политика очистки, которая в основном удаляла изображения. В результате сообщение, указанное выше, можно увидеть в событиях.

Другими распространенными проблемами являются неправильное имя (gcr.io vs eu.gcr.io), а также может быть, что реестр каким-то образом недоступен. Опять же, в событиях есть подсказки, сообщение должно сказать вам достаточно.

Более общую информацию можно найти здесь (например, для аутентификации):

https://cloud.google.com/container-registry/docs/pushing-and-pulling

person Vincent Gerris    schedule 10.07.2020

Я забыл отправить образ с тегом 1.0.8 в ECR (концентратор образов AWS) ... Если вы используете Helm и выполняете обновление:

обновление helm minta-user ./src/services/user/helm-chart

убедитесь, что тег изображения внутри values.yaml помещен (в ECR или Docker Hub и т. д.), например: (это моя helm-chart / values.yaml)

replicaCount: 1

image:
   repository:dkr.ecr.us-east-1.amazonaws.com/minta-user
   tag: 1.0.8

вам нужно убедиться, что изображение: 1.0.8 загружено!

person dang    schedule 07.05.2019

Выполните следующую команду: eval $ (minikube -p minikube docker-env)

Теперь создайте свои изображения. Затем используйте те же изображения в K8S. Делайте это каждый раз, когда открываете новый CMD.

person Vivek Raj    schedule 12.03.2021

1.kubectl get pod -n kube-system

2. показать, какие модули ImagePullBackOff kube-system

3.kubectl delete pod <POD NAME> -n kube-system (перезапустить модуль и заново создать контейнер)

4.kubectl get pod -n <NAME SPACE>

наслаждайся этим.

person Soheil TT    schedule 27.04.2021

В моем случае, используя профиль Fargate, я неправильно настроил сеть в моем VPC. Контейнеры Fargate требуют доступа к ECR, для чего требуется маршрут к общедоступному Интернету. У меня были шлюзы NAT для моих частных подсетей, расположенные в тех же частных подсетях, тогда как они должны были быть расположены в общедоступных подсетях. Это сообщение об ошибке было результатом неправильной конфигурации в моем случае.

person Powershell Noob    schedule 02.07.2021

Я столкнулся с аналогичной проблемой, но вместо одного все мои модули не были готовы и отображали статус готовности 0/1 Что-то вроде введите описание изображения здесь

Я много чего пробовал, но в конце концов обнаружил, что контекст установлен неправильно. Пожалуйста, используйте следующую команду и убедитесь, что вы находитесь в правильном контексте

контексты получения конфигурации kubectl

person Harsh    schedule 01.07.2020
comment
Ваш контекст только определяет, к какому кластеру вы подключены. Это неверный ответ. - person Kirk Sefchik; 20.02.2021

Выполнить вход в докер

Отправьте образ в Docker Hub

Восстановить пакет

Это решило проблему для меня. Надеюсь, это поможет.

person Shyla    schedule 11.11.2018