Como posso solucionar os erros ErrImagePull e ImagePullBackoff do status do pod no Amazon EKS?
O status do meu pod do Amazon Elastic Kubernetes Service (Amazon EKS) está no status ErrimagePull ou ImagePullBackOff.
Breve descrição
Se você executar o comando kubectl get pods e seus pods estiverem no status ImagePullBackOff, os pods não estão funcionando corretamente. O status ImagePullBackOff significa que um contêiner não foi iniciado porque uma imagem não pôde ser recuperada ou retirada. Para solucionar esse problema, use as seguintes resoluções.
Para obter mais informações, consulte Os pods do conector do Amazon EKS estão no estado ImagePullBackOff.
Resolução
Confirme as informações da imagem
Use as etapas a seguir para confirmar se a mensagem de erro de status do pod e verificar se o nome da imagem, a tag e o Secure Hash Algorithm (SHA) estão corretos:
-
Para obter o status do pod, execute o seguinte comando:
$ kubectl get pods -n defaultNAME READY STATUS RESTARTS AGE nginx-7cdbb5f49f-2p6p2 0/1 ImagePullBackOff 0 86s
-
Para obter detalhes da falha do pod, execute o seguinte 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 se a tag e o nome da imagem existem e estão corretos.
-
Se o registro de imagens exigir autenticação, confirme se você está autorizado a acessá-lo. Para verificar se a imagem usada no pod está correta, execute o seguinte comando:
$ kubectl get pods nginx-7cdbb5f49f-2p6p2 -o jsonpath="{.spec.containers[*].image}" | \sort nginx:latest
Para entender os valores do status do pod, consulte Pod phase no site do Kubernetes e Como soluciono problemas de status do pod no Amazon EKS?
Solucionar problemas de registros privados
Se você recuperar imagens do registro privado com o Amazon EKS, talvez seja necessária uma configuração adicional. Use ImagePullSecrets no manifesto da carga de trabalho para especificar as credenciais. Essas credenciais são autenticadas com o registro privado. Isso permite que o pod extraia imagens do repositório privado especificado.
Para visualizar o conteúdo do segredo, use o comando a seguir para visualizá-lo em YAML:
kubectl get secret <secret_name> --output=yaml
No exemplo a seguir, um pod precisa acessar suas credenciais de registro do Docker em regcred:
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: your-private-image imagePullSecrets: - name: regcred
Substitua your-private-image pelo caminho para uma imagem em um registro privado semelhante ao seguinte:
your.private.registry.example.com/bob/bob-private:v1
Para extrair a imagem do registro privado, o Kubernetes exige as credenciais. O campo imagePullSecrets no arquivo de configuração especifica que o Kubernetes deve obter as credenciais de um segredo chamado regcred.
Para obter mais informações, consulte Pull an Image from a Private Registry no site do Kubernetes.
Solucionar problemas adicionais de registro
Problema de falha ao extrair a imagem
O erro “Failed to pull image...” significa que o kubelet tentou se conectar ao endpoint de registro privado e falhou devido a um tempo limite de conexão.
No exemplo a seguir, o registro está inacessível porque o kubelet não consegue acessar o endpoint do 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 esse erro, verifique sua sub-rede, grupos de segurança e ACL de rede que permitem a comunicação com o endpoint do registro.
Limite da taxa de registro excedido
No exemplo a seguir, o limite da taxa de registro foi excedido:
$ 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"
Se você tentar extrair uma imagem do repositório público do Docker Hub depois de atingir o limite da taxa de extração, será interrompido. Para obter mais informações, consulte Docker Hub rate limit no site do Docker Hub.
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos