Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Como posso solucionar os erros ErrImagePull e ImagePullBackoff do status do pod no Amazon EKS?

6 minuto de leitura
0

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:

  1. 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
  2. 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"
  3. Confirme se a tag e o nome da imagem existem e estão corretos.

  4. 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.

AWS OFICIAL
AWS OFICIALAtualizada há 9 meses