Come posso risolvere gli errori di stato del pod ErrImagePull e ImagePullbackoff in Amazon EKS?
Lo stato del mio pod Amazon Elastic Kubernetes Service (Amazon EKS) è ErrImagePull o ImagePullbackoff.
Breve descrizione
Se esegui il comando kubectl** get pods** e i tuoi pod sono nello stato ImagePullbackOff, allora i pod non funzionano correttamente. Lo stato ImagePullbackOff indica che un container non è stato avviato perché non è stato possibile recuperare o estrarre un'immagine. Per risolvere questo problema, prova le seguenti risoluzioni.
Per altre informazioni, consulta la pagina I Pods del connettore Amazon EKS sono in stato ImagePullBackOff.
Soluzione
Conferma delle informazioni sull'immagine
Usa i seguenti passaggi per confermare il messaggio di errore sullo stato del pod e verifica che il nome dell'immagine, il tag e Secure Hash Algorithm (SHA) siano corretti:
-
Per recuperare lo stato del pod, esegui il seguente comando:
$ kubectl get pods -n defaultNAME READY STATUS RESTARTS AGE nginx-7cdbb5f49f-2p6p2 0/1 ImagePullBackOff 0 86s
-
Per avere i dettagli sull'errore del pod, esegui il seguente 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"
-
Conferma che il tag e il nome dell'immagine esistono e che sono corretti.
-
Se il registro delle immagini richiede l'autenticazione, conferma di avere l'autorizzazione ad accedervi. Per verificare che l'immagine utilizzata nel pod sia corretta, esegui il comando seguente:
$ kubectl get pods nginx-7cdbb5f49f-2p6p2 -o jsonpath="{.spec.containers[*].image}" | \sort nginx:latest
Per comprendere i valori dello stato del pod, consulta Pod phase sul sito web Kubernetes e Come faccio a risolvere i problemi relativi allo stato dei pod in Amazon EKS?
Risolvere i problemi relativi ai registri privati
Se recuperi immagini da un registro privato con Amazon EKS, potrebbe essere necessaria una configurazione aggiuntiva. Usa ImagePullSecrets sul manifesto del carico di lavoro per specificare le credenziali. Queste credenziali vengono autenticate con il registro privato. Ciò consente al pod di estrarre immagini dal repository privato specificato.
Per visualizzare il contenuto del Secret, usa il seguente comando in modo da vederlo in YAML:
kubectl get secret <secret_name> --output=yaml
Nell'esempio seguente, un pod deve accedere alle credenziali del registro Docker in regcred:
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: your-private-image imagePullSecrets: - name: regcred
Sostituisci your-private-image con il percorso di un'immagine in un registro privato simile al seguente:
your.private.registry.example.com/bob/bob-private:v1
Per estrarre l'immagine dal registro privato, Kubernetes richiede le credenziali. Il campo ImagePullSecrets nel file di configurazione specifica che Kubernetes deve ottenere le credenziali da un Secret chiamato regcred.
Per altre informazioni, consulta Pull an Image from a Private Registry sul sito web di Kubernetes.
Risolvere problemi aggiuntivi relativi al registro
Problema di estrazione dell'immagine non riuscita
L'errore "Failed to pull image..." significa che kubelet ha tentato di connettersi all'endpoint privato del registro e non è riuscito a causa di un timeout della connessione.
Nell'esempio seguente, il registro è inaccessibile perché kubelet non è in grado di raggiungere l'endpoint privato del registro:
$ 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
Per risolvere questo errore, controlla la sottorete, i gruppi di sicurezza e l'ACL di rete che consentono la comunicazione con l'endpoint del registro.
Limite di frequenza di registro superato
Nell'esempio seguente, il limite di frequenza di registro è stato superato:
$ 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 provi a estrarre un'immagine dal repository pubblico di Docker Hub dopo aver raggiunto il limite di pull rate, avviene un'interruzione. Per altre informazioni, consulta l'articolo Docker Hub rate limit sul sito web di Docker Hub.
Contenuto pertinente
- AWS UFFICIALEAggiornata 8 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa