¿Cómo puedo solucionar los errores «ErriImagePull» e «ImagePullBackoff» del estado del pod en Amazon EKS?
El estado de mi pod de Amazon Elastic Kubernetes Service (Amazon EKS) es «ErriImagePull» o «ImagePullBackoff».
Descripción breve
Si ejecutas el comando de kubectl de get pods y tus pods tienen el estado ImagePullBackOff, quiere decir que los pods no se están ejecutando correctamente. El estado ImagePullBackOff significa que un contenedor no se ha iniciado porque no se ha podido recuperar o extraer una imagen. Para solucionar este problema, utilice las siguientes resoluciones.
Para obtener más información, consulte Los Pods conectores de Amazon EKS están en estado ImagePullBackOff.
Resolución
Confirmación de la información de la imagen
Siga estos pasos para confirmar el mensaje de error del estado del pod y verifique que el nombre de la imagen, la etiqueta y el algoritmo de hash seguro (SHA) sean correctos:
-
Para obtener el estado del pod, ejecute el siguiente comando:
$ kubectl get pods -n defaultNAME READY STATUS RESTARTS AGE nginx-7cdbb5f49f-2p6p2 0/1 ImagePullBackOff 0 86s
-
Para obtener información sobre los errores del pod, ejecute el siguiente comando:
$ 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"
-
Confirme que la etiqueta y el nombre de la imagen existan y sean correctos.
-
Si el registro de imágenes requiere autenticación, confirme que tiene autorización para acceder a él. Para comprobar que la imagen utilizada en el pod sea correcta, ejecute el siguiente comando:
$ kubectl get pods nginx-7cdbb5f49f-2p6p2 -o jsonpath="{.spec.containers[*].image}" | \sort nginx:latest
Para comprender los valores del estado del pod, consulte Pod phase en el sitio web de Kubernetes y ¿Cómo puedo solucionar los problemas relacionados con el estado de los pods en Amazon EKS?
Solución de problemas de registros privados
Si recupera imágenes de un registro privado con Amazon EKS, es posible que necesite configuración adicional. Utilice imagePullSecrets en el manifiesto de carga de trabajo para especificar las credenciales. Estas credenciales se autentican en el registro privado. Esto permite que el pod extraiga imágenes del repositorio privado especificado.
Para ver el contenido del secreto en YAML, utilice el siguiente comando:
kubectl get secret <secret_name> --output=yaml
En el siguiente ejemplo, un pod necesita acceder a sus credenciales de registro 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
Sustituya your-private-image por la ruta a una imagen de un registro privado, de forma similar a la siguiente:
your.private.registry.example.com/bob/bob-private:v1
Para extraer la imagen del registro privado, Kubernetes requiere las credenciales. En el campo imagePullSecrets del archivo de configuración se especifica que Kubernetes debe obtener las credenciales de un secreto llamado regcred.
Para obtener más información, consulte Pull an Image from a Private Registry en el sitio web de Kubernetes.
Solución de problemas de registro adicionales
Error «Failed to pull image»
El error «Failed to pull image...» significa que kubelet intentó conectarse al punto de enlace del registro privado y falló porque se agotó el tiempo de espera de la conexión.
En el siguiente ejemplo, no se puede acceder al registro porque kubelet no puede llegar al punto de enlace 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
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 enlace del registro.
Se ha superado el límite de tasa de extracción del registro
En el siguiente ejemplo, se ha superado el límite de tasa de extracción del 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"
Si intenta extraer una imagen del repositorio público de Docker Hub después de alcanzar el límite de tasa de extracción, el proceso se detiene. Para obtener más información, consulte Docker Hub rate limit en el sitio web de Docker Hub.
Contenido relevante
- preguntada hace un meslg...
- preguntada hace un meslg...
- preguntada hace 5 díaslg...
- preguntada hace un meslg...
- Como solucionar el error: Supplied Policy document is breaching Cloudwatch Logs policy length limit.Respuesta aceptadapreguntada hace 12 díaslg...
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 6 meses