Когда статус рабочей нагрузки показывает "Pod not ready: Back-off pulling image "xxxxx", в Kubernetes будет зарегистрировано событие Failed to pull image или Failed to re-pull image. Подробную информацию о том, как просматривать события Kubernetes, см. Viewing Pod Events.
Определите причину на основе событий, перечисленных в Table 1.
Event | Cause and Solution |
|---|---|
Failed to pull image "xxx": rpc error: code = Unknown desc = Error response from daemon: Get xxx: denied: You may not login yet | You have not logged in to the image repository. Пункт проверки 1: указано ли imagePullSecret при использовании kubectl для создания Workload |
Failed to pull image "nginx:v1.1": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host | Адрес image указан неверно. Пункт проверки 2: правильный ли адрес Image при использовании Third-Party Image Пункт проверки 3: используется ли неверный Secret при использовании Third-Party Image |
Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "nginx-6dc48bf8b6-l8xrw": Error response from daemon: mkdir xxxxx: no space left on device | The disk space is insufficient. Пункт проверки 4: Является ли дисковое пространство узла недостаточным |
Failed to pull image "xxx": rpc error: code = Unknown desc = error pulling image configuration: xxx x509: certificate signed by unknown authority | Неизвестный или небезопасный сертификат используется сторонним репозиторием образов, из которого загружается образ. |
Failed to pull image "xxx": rpc error: code = Unknown desc = context canceled | The image size is too large. |
Failed to pull image "docker.io/bitnami/nginx:1.22.0-debian-11-r3": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) | Пункт проверки 7: Можно ли получить доступ к репозиторию образов |
ERROR: toomanyrequests: Too Many Requests. Или вы reached your pull rate limit, вы можете увеличить лимит, аутентифицировавшись и обновив | Скорость ограничена, потому что количество загрузок образов достигает верхнего предела. Элемент проверки 8: Достигает ли количество публичных загрузок образов верхнего предела |
Если workload находится в ненормальном состоянии и отображается событие Kubernetes, указывающее, что pod не может загрузить образ, вы можете проверить, существует ли поле imagePullSecrets в YAML‑файле.
Элементы для проверки
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxstrategy:type: RollingUpdatetemplate:metadata:labels:app: nginxspec:containers:- image: nginximagePullPolicy: Alwaysname: nginximagePullSecrets:- name: default-secret
При использовании kubectl для создания workload из стороннего образа укажите поле imagePullSecret, где name указывает имя секрета, используемого для загрузки образа.
CCE позволяет создавать workloads, используя образы, загруженные из сторонних репозиториев образов.
Необходимо вводить адреса сторонних образов в соответствии с конкретными требованиями. Адрес образа должен быть в формате domainname/organization/imagename:tag. Если версия не указана, по умолчанию используется latest.
Если загрузка образа не удалась из‑за указания неверного адреса образа, в событиях Kubernetes отображается информация, аналогичная следующей:
Failed to pull image "nginx:v1.1": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host
Решение
Измените адрес образа, отредактировав ваш YAML‑файл, или войдите в консоль CCE и замените образ на вкладке Upgrade на странице сведений о workload.
Обычно к стороннему репозиторию образов можно получить доступ только после аутентификации (с использованием вашей учётной записи и пароля). CCE использует режим аутентификации secret для загрузки образов, поэтому перед загрузкой образов из репозитория необходимо создать secret для репозитория образов.
Решение
Если ваш secret неверен, загрузка образов завершится неудачей. В этом случае создайте новый secret.
Если в событиях Kubernetes отображается информация, аналогичная следующей, это означает, что не осталось места на диске для хранения образа. В результате загрузка образа завершится неудачей. В этом случае очистите образ или увеличьте объём диска, чтобы решить проблему.
Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "nginx-6dc48bf8b6-l8xrw": Error response from daemon: mkdir xxxxx: no space left on device
Вы можете получить объём диска для хранения образов на узле, выполнив следующую команду:
lvs

Решение 1: Очистка образов
Выполните следующие действия для очистки неиспользуемых образов: Не удаляйте системные образы, такие как cce-pause image. В противном случае создание pod может завершиться неудачей.
Решение 2: Расширение ёмкости диска
Чтобы расширить ёмкость диска, выполните следующие операции:
Только ёмкость хранилища дисков EVS может быть расширена. Для расширения ёмкости логических томов и файловых систем необходимо выполнить следующие операции.
Диск с данными делится в зависимости от контейнерного хранилища Rootfs:
Если pod пытается загрузить образ из стороннего репозитория с неизвестным или небезопасным сертификатом, загрузка образа завершится неудачей на узле. События pod содержат "Failed to pull the image" с причиной "x509: certificate signed by unknown authority".
Безопасность образов EulerOS 2.9 была улучшена удалением небезопасных или просроченных сертификатов из системы. Хотя некоторые сторонние образы на отдельных узлах могут не сообщать об ошибках, такой тип ошибки часто встречается в EulerOS 2.9. Чтобы устранить проблему, выполните следующие действия.
Решение
Вы можете увидеть IP‑адрес и номер порта стороннего сервера образов, для которого ошибка указана в событии "Failed to pull image".
IP‑адрес стороннего сервера образов — production.cloudflare.docker.com, а номер порта HTTPS по умолчанию — 443.
Выполните следующую команду на узле EulerOS или CentOS, заменив {server_url}:{server_port} на IP‑адрес и номер порта, полученные на предыдущем шаге, например, production.cloudflare.docker.com:443.
Если среда выполнения контейнеров на узле — containerd, замените systemctl restart docker на systemctl restart containerd.
Выполните следующую команду на узле Ubuntu:
События pod содержат "Failed to pull image". Это может быть вызвано большим размером образа.
Failed to pull image "XXX": rpc error: code = Unknown desc = context canceled
Однако образ можно вручную загрузить, выполнив команду docker pull на узле.
Возможная причина
В кластерах Kubernetes существует период тайм‑аута по умолчанию для загрузки образов. Если прогресс загрузки образа не обновляется в течение определённого времени, загрузка будет отменена. При низкой производительности узла или слишком большом размере образа загрузка может завершиться неудачей, и рабочая нагрузка может не запуститься.
Решение
crictl pull <image-address>
docker pull <image-address>
Симптом
Во время создания рабочей нагрузки отображается сообщение об ошибке, похожее на следующее:
Failed to pull image "docker.io/bitnami/nginx:1.22.0-debian-11-r3": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Возможная причина
Из‑за сетевых проблем невозможно получить доступ к репозиторию образов. SWR позволяет загружать образы только из официального репозитория Docker. Чтобы загружать образы из других репозиториев, необходимо иметь доступ к Интернету.
Решение
Симптом
Во время создания workload отображается сообщение об ошибке, похожее на следующее:
ERROR: toomanyrequests: Too Many Requests.
Или
you have reached your pull rate limit, you may increase the limit by authenticating an upgrading: https://www.docker.com/increase-rate-limits.
Возможная причина
Docker Hub устанавливает ограничения на максимальное количество запросов на загрузку образов контейнеров. Подробнее см. Docker Hub pull usage and limits.
Решение
Перенесите часто используемые образы в SWR, а затем загрузите их из SWR на ваши узлы.