Как отладить "ImagePullBackOff"?

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

[[email protected] 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/[email protected]:d326. Я подтвердил, что могу вытянуть изображение с тегом с помощью docker pull.

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

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

Ответ 1

Вы можете использовать синтаксис description pod'

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

oc describe pod <pod-id>  

Для ванильных кубернетов:

kubectl describe pod <pod-id>  

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

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

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 реестра Docker, выполнив команду ping.
  5. попробуйте вытащить образ докера вручную на узле
  6. Если вы используете личный реестр, убедитесь, что ваш секрет существует и секрет верен. Ваш секрет также должен быть в том же пространстве имен. Спасибо, Свенсель 6 Некоторые реестры имеют брандмауэры, которые ограничивают доступ по IP-адресу. Брандмауэр может блокировать извлечение
  7. Некоторые CI создают развертывания с временными секретами докера. Таким образом, секрет истекает через несколько дней (Вы просите о сбоях в производстве...)

Ответ 2

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

kubectl edit pods arix-3-yjq9w

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

kubectl delete arix-3-yjq9w

Ответ 3

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

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

убедитесь, что тег image внутри 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 помещено!

Ответ 4

Запустить Docker логин

Вставьте изображение в док-центр

Воссоздать стручок

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