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

Внезапно я не могу развернуть некоторые образы, которые могли бы быть развернуты раньше. Я получил следующий статус pod: [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,

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

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

15 ответов

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

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

oc describe pod <pod-id>  

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

kubectl describe pod <pod-id>  

Изучите события вывода. В моем случае это показывает Оттянутое растяжение изображения 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. Определите узел, выполнив команду "kubectl/oc get pods -o wide"
  2. SSH в узел, который не может тянуть образ докера
  3. убедитесь, что узел может разрешить DNS реестра Docker, выполнив команду ping.
  4. попробуйте вручную вытащить образ докера
  5. Если вы используете личный реестр, убедитесь, что ваш секрет существует и он верен. Ваш секрет также должен быть в том же пространстве имен. Спасибо swenzel
  6. Попробуйте вытащить изображение локально

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

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

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

      gcloud auth configure-docker

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

kubectl edit pods arix-3-yjq9w

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

kubectl delete arix-3-yjq9w

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

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

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

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

была такая же проблема при использовании кластера Kubernetes на рабочем столе Docker. сначала я получил «ErrImagePull», затем «ImagePullBackOff». Подробности об ошибке были следующими: «Ошибка RPC: код = неизвестное описание = превышен крайний срок контекста». Я смог решить эту проблему, используяdocker pull <imageNameOfContainerWithinFailingPod>на моей машине. Я думаю, что-то истекает, пока k8s тянет изображение.

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

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

если изображение несовместимо, вы также получите окружение изображения Back-off pulling. это произошло в моем случае.

Я проверил, выполнив docker pull на узле k8s.

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

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

Для Ubuntu Labs Перейдите на свой рабочий узел, затем отредактируйте следующий файл.

судо ви /etc/resolv.conf

nameserver 8.8.8.8 Внесите это изменение и сохраните его, оно будет работать для лабораторий.

Убедитесь, что ваш репозиторий общедоступен. Мой был установлен как частный и получил статус «ImagePullBackOff».

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>

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

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

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

kubectl config get-context

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

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

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

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

Другие вопросы по тегам