¿Cómo puedo solucionar los errores ErrImagePull e ImagePullbackOff de estado del pod en Amazon EKS?
El estado de mi pod de Amazon Elastic Kubernetes Service (Amazon EKS) se encuentra en estado ErrImagePull o ImagePullbackOff.
Descripción breve
Si ejecuta el comando kubectl get pods (obtener comandos) y sus pods están en el estado ImagePullbackOff, significa que los pods no se ejecutan de forma correcta. El estado ImagePullbackOff significa que un contenedor no se pudo iniciar porque no se pudo recuperar ni extraer una imagen. Para más información, consulte Los pods de conectores de Amazon EKS están en estado ImagePullBackOff.
Es posible que reciba un error ImagePull si:
- El nombre, la etiqueta o el resumen de una imagen son incorrectos.
- Las imágenes requieren credenciales para autenticarse.
- No se puede acceder al registro.
Resolución
1. Compruebe el estado del pod, el mensaje de error y que el nombre, la etiqueta y el SHA de la imagen son correctos
Para obtener el estado de un pod, ejecute el comando kubectl get pods (obtener comandos):
$ kubectl get pods -n default NAME READY STATUS RESTARTS AGE nginx-7cdbb5f49f-2p6p2 0/1 ImagePullBackOff 0 86s
Para obtener los detalles de un mensaje de error de pods, ejecute el comando kubectl describe pod (describir pods):
$ kubectl describe pod nginx-7cdbb5f49f-2p6p2 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m23s default-scheduler Successfully assigned default/nginx-7cdbb5f49f-2p6p2 to ip-192-168-149-143.us-east-2.compute.internal Normal Pulling 2m44s (x4 over 4m9s) kubelet Pulling image "nginxx:latest" Warning Failed 2m43s (x4 over 4m9s) kubelet Failed to pull image "nginxx:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for nginxx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied Warning Failed 2m43s (x4 over 4m9s) kubelet Error: ErrImagePull Warning Failed 2m32s (x6 over 4m8s) kubelet Error: ImagePullBackOff Normal BackOff 2m17s (x7 over 4m8s) kubelet Back-off pulling image "nginxx:latest"
$ kubectl describe pod nginx-55d75d5f56-qrqmp ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m20s default-scheduler Successfully assigned default/nginx-55d75d5f56-qrqmp to ip-192-168-149-143.us-east-2.compute.internal Normal Pulling 40s (x4 over 2m6s) kubelet Pulling image "nginx:latestttt" Warning Failed 39s (x4 over 2m5s) kubelet Failed to pull image "nginx:latestttt": rpc error: code = Unknown desc = Error response from daemon: manifest for nginx:latestttt not found: manifest unknown: manifest unknown Warning Failed 39s (x4 over 2m5s) kubelet Error: ErrImagePull Warning Failed 26s (x6 over 2m5s) kubelet Error: ImagePullBackOff Normal BackOff 11s (x7 over 2m5s) kubelet Back-off pulling image "nginx:latestttt" Asegúrese de que la etiqueta y el nombre de la imagen existen y son correctos. Si el registro de imágenes requiere autenticación, asegúrese de tener autorización para acceder a él. Para comprobar que la imagen utilizada en el pod es correcta, ejecute el siguiente comando:
$ kubectl get pods nginx-7cdbb5f49f-2p6p2 -o jsonpath="{.spec.containers[*].image}" | \sort nginxx:latest
Para entender los valores del estado del pod, consulte la fase del pod en el sitio web de Kubernetes.
Para obtener más información, consulte ¿Cómo puedo solucionar problemas de estado del pod en Amazon EKS?
2. Imágenes de Amazon Elastic Container Registry (Amazon ECR)
Si está intentando extraer imágenes de Amazon ECR mediante Amazon EKS, es posible que necesite una configuración adicional. Si la imagen está almacenada en un registro privado de Amazon ECR, asegúrese de especificar las credenciales ImagePullSecrets en el pod. Estas credenciales se utilizan para autenticarse en el registro privado.
Cree un Secret (Secreto) llamado regcred:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
Asegúrese de reemplazar las siguientes credenciales:
- <your-registry-server> es su FQDN de registro privado de Docker. Utilice https://index.docker.io/v1/ para DockerHub.
- <your-name> es su nombre de usuario de Docker.
- <your-pword> es su contraseña de Docker.
- <your-email> es su correo electrónico de Docker.
Ha configurado correctamente sus credenciales de Docker en el clúster como un secreto denominado regcred.
Para entender el contenido del secreto regcred, consulte el secreto en formato YAML:
kubectl get secret regcred --output=yaml
En el siguiente ejemplo, un pod necesita acceder a sus credenciales de Docker en regcred:
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: <your-private-image> imagePullSecrets: - name: regcred
Reemplace your.private.registry.example por la ruta a una imagen de un registro privado similar al siguiente:
your.private.registry.example.com/bob/bob-private:v1
Para extraer la imagen del registro privado, Kubernetes necesita las credenciales. El campo ImagePullSecrets del archivo de configuración especifica que Kubernetes debe obtener las credenciales de un secreto denominado regcred.
Para obtener más opciones sobre la creación de un secreto, consulte Cómo crear un pod que utilice un secreto para extraer una imagen del sitio web de Kubernetes.
3. Solución de problemas de registro
En el siguiente ejemplo, no se puede acceder al registro debido a un problema de conectividad de red porque kubelet no puede llegar al punto de conexión del registro privado:
$ kubectl describe pods nginx-9cc69448d-vgm4m ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 16m default-scheduler Successfully assigned default/nginx-9cc69448d-vgm4m to ip-192-168-149-143.us-east-2.compute.internal Normal Pulling 15m (x3 over 16m) kubelet Pulling image "nginx:stable" Warning Failed 15m (x3 over 16m) kubelet Failed to pull image "nginx:stable": 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) Warning Failed 15m (x3 over 16m) kubelet Error: ErrImagePull Normal BackOff 14m (x4 over 16m) kubelet Back-off pulling image "nginx:stable" Warning Failed 14m (x4 over 16m) kubelet Error: ImagePullBackOff
El error “No se pudo extraer la imagen...” significa que kubelet intentó conectarse al punto de conexión del registro de Docker y falló debido a un vencimiento del tiempo de espera de la conexión.
Para solucionar este error, compruebe la subred, los grupos de seguridad y la ACL de red que permiten la comunicación con el punto de conexión del registro especificado.
En el siguiente ejemplo, se superó el límite de tasa de registro:
$ kubectl describe pod nginx-6bf9f7cf5d-22q48 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m54s default-scheduler Successfully assigned default/nginx-6bf9f7cf5d-22q48 to ip-192-168-153-54.us-east-2.compute.internal Warning FailedCreatePodSandBox 3m33s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "82065dea585e8428eaf9df89936653b5ef12b53bef7f83baddb22edc59cd562a" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Warning FailedCreatePodSandBox 2m53s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "20f2e27ba6d813ffc754a12a1444aa20d552cc9d665f4fe5506b02a4fb53db36" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Warning FailedCreatePodSandBox 2m35s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "d9b7e98187e84fed907ff882279bf16223bf5ed0176b03dff3b860ca9a7d5e03" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Warning FailedCreatePodSandBox 2m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "c02c8b65d7d49c94aadd396cb57031d6df5e718ab629237cdea63d2185dbbfb0" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Normal SandboxChanged 119s (x4 over 3m13s) kubelet Pod sandbox changed, it will be killed and re-created. Normal Pulling 56s (x3 over 99s) kubelet Pulling image "httpd:latest" Warning Failed 56s (x3 over 99s) kubelet Failed to pull image "httpd:latest": rpc error: code = Unknown desc = Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit Warning Failed 56s (x3 over 99s) kubelet Error: ErrImagePull Normal BackOff 43s (x4 over 98s) kubelet Back-off pulling image "httpd:latest" Warning Failed 43s (x4 over 98s) kubelet Error: ImagePullBackOff
El límite de tasa de registro de Docker es de 100 solicitudes de imágenes de contenedores cada seis horas para uso anónimo y 200 para cuentas de Docker. Se deniega el acceso a las solicitudes de imágenes que superen estos límites hasta que haya transcurrido el período de seis horas. Para gestionar el uso y entender los límites de tasa del registro, consulte Cómo entender el límite de tasa de Docker Hub en el sitio web de Docker.
Información relacionada
Solución de problemas de Amazon EKS

Contenido relevante
- OFICIAL DE AWSActualizada hace 6 meses
- OFICIAL DE AWSActualizada hace 4 meses
- OFICIAL DE AWSActualizada hace 10 meses