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


125

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

[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.

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

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


Это установка с несколькими машинами? Если это так, убедитесь, что вы можете тянуть со всех узлов. Если нет, включите регистрацию на --loglevel = 5 на узле и перезапустите - вы должны увидеть напечатанную информацию, описывающую попытку получить изображение и любые ошибки.
Clayton

Что вышло после перезапуска с loglevel = 5?
lvthillo

2
Вы решили проблему? может кто-нибудь объяснить эту проблему с ImagePullBackOff? (образы есть в моих «образах
докеров

Я получил это, используя неправильный регион для моего репо. Забыл добавить ес. to --image = eu.gcr.io / $ PROJECT_ID / ...
Клеменс Толбум,

В моем случае это было неправильное имя тега для передаваемого изображения. Я изменил название тега, что решило проблему.
Тара Прасад Гурунг,

Ответы:


127

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

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

oc describe pod <pod-id>  

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

kubectl describe pod <pod-id>  

Изучите события вывода. В моем случае это показывает обратное извлечение изображения coredns / coredns: latest

В этом случае изображение coredns / coredns: latest не может быть получено из Интернета.

Events:
  FirstSeen LastSeen    Count   From                SubObjectPath           Type        Reason      Message
  --------- --------    -----   ----                -------------           --------    ------      -------
  5m        5m      1   {default-scheduler }                        Normal      Scheduled   Successfully assigned coredns-4224169331-9nhxj to 192.168.122.190
  5m        1m      4   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal      Pulling     pulling image "coredns/coredns:latest"
  4m        26s     4   {kubelet 192.168.122.190}   spec.containers{coredns}    Warning     Failed      Failed to pull image "coredns/coredns:latest": Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your internet connection or if you are behind a proxy.
  4m        26s     4   {kubelet 192.168.122.190}                   Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ErrImagePull: "Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your Internet connection or if you are behind a proxy."

  4m    2s  7   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal  BackOff     Back-off pulling image "coredns/coredns:latest"
  4m    2s  7   {kubelet 192.168.122.190}                   Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ImagePullBackOff: "Back-off pulling image \"coredns/coredns:latest\""

Дополнительные шаги отладки

  1. попробуйте вытащить образ докера и пометить вручную на вашем компьютере
  2. Определите узел, выполнив команду kubectl / oc get pods -o wide.
  3. ssh в узел (если можно), который не может вытащить образ докера
  4. убедитесь, что узел может разрешить DNS реестра докеров, выполнив команду ping.
  5. попробуйте вручную вытащить образ докера на узел
  6. Если вы используете частный реестр, убедитесь, что ваш секрет существует и он правильный. Ваш секрет также должен находиться в том же пространстве имен. Спасибо swenzel
  7. В некоторых реестрах есть брандмауэры, ограничивающие доступ к IP-адресам. Брандмауэр может блокировать извлечение
  8. Некоторые CI создают развертывания с временными секретами докеров. Таким образом, секрет истекает через несколько дней (вы просите о сбоях производства ...)

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

В случае частного репозитория изображений также убедитесь, что вы ссылаетесь на секреты извлечения изображений в своем модуле, используя запись «imagePullSecrets».
Donato Szilagyi

1
Также есть длинное сообщение в блоге, описывающее, как подробно отладить это здесь: managedkube.com/kubernetes/k8sbot/troubleshooting/…
gar

1

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

kubectl edit pods arix-3-yjq9w

или даже удалить свой под?

kubectl delete arix-3-yjq9w

0

Я забыл отправить образ с тегом 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 загружено!


0

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

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

kubectl config get-context


0

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

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

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

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


-10

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.