Как отладить "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\""
Дополнительные этапы отладки
- Определите узел, выполнив команду "kubectl/oc get pods -o wide"
- SSH в узел, который не может тянуть образ докера
- убедитесь, что узел может разрешить DNS реестра Docker, выполнив команду ping.
- попробуйте вручную вытащить образ докера
- Если вы используете личный реестр, убедитесь, что ваш секрет существует и он верен. Ваш секрет также должен быть в том же пространстве имен. Спасибо swenzel
- Попробуйте вытащить изображение локально
Я столкнулся с аналогичной ситуацией, и оказалось, что с актуализацией 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 логин
Вставьте изображение в док-центр
Воссоздать стручок
Это решило проблему для меня. Надеюсь, поможет.