Wie kann ich die Pod-Status-Fehler ErrImagePull und ImagePullBackoff in Amazon EKS beheben?
Mein Pod-Status für Amazon Elastic Kubernetes Service (Amazon EKS) hat den Status ErrImagePull oder ImagePullBackoff.
Kurzbeschreibung
Wenn Sie den kubectl-Befehl get pods ausführen und Ihre Pods den ImagePullBackOff-Status haben, werden die Pods nicht richtig ausgeführt. Der ImagePullBackOff-Status bedeutet, dass ein Container nicht gestartet werden konnte, weil ein Image nicht abgerufen werden konnte. Weitere Informationen finden Sie unter Amazon-EKS-Connector-Pods haben den ImagePullBackOff-Status.
In folgenden Fällen wird möglicherweise ein ImagePull-Fehler angezeigt:
- Ein Image-Name, ein Tag oder ein Auszug sind falsch.
- Für die Images sind Anmeldeinformationen erforderlich, um sich zu authentifizieren.
- Es kann nicht auf das Registry zugegriffen werden.
Lösung
1. Überprüfen Sie den Pod-Status und die Fehlermeldung und stellen Sie sicher, dass der Image-Name, das Tag und der SHA korrekt sind
Um den Status eines Pods abzurufen, führen Sie den kubectl-Befehl get pods aus:
$ kubectl get pods -n default NAME READY STATUS RESTARTS AGE nginx-7cdbb5f49f-2p6p2 0/1 ImagePullBackOff 0 86s
Um die Details einer Pod-Fehlermeldung zu erhalten, führen Sie den kubectl-Befehl describe pod aus:
$ 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" Stellen Sie sicher, dass Ihr Image-Tag und Name existieren und korrekt sind. Wenn für das Image-Registry eine Authentifizierung erforderlich ist, stellen Sie sicher, dass Sie berechtigt sind, darauf zuzugreifen. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das im Pod verwendete Image korrekt ist:
$ kubectl get pods nginx-7cdbb5f49f-2p6p2 -o jsonpath="{.spec.containers[*].image}" | \sort nginxx:latest
Informationen zu den Pod-Statuswerten finden Sie unter Pod-Phase auf der Kubernetes-Website.
Weitere Informationen finden Sie unter Wie kann ich die Pod-Status-Fehler in Amazon EKS beheben?
2. Images von Amazon Elastic Container Registry (Amazon ECR)
Wenn Sie versuchen, mithilfe von Amazon EKS Images aus Amazon ECR abzurufen, ist möglicherweise eine zusätzliche Konfiguration erforderlich. Wenn Ihr Image in einer privaten Amazon-ECR-Registry gespeichert ist, stellen Sie sicher, dass Sie die Anmeldeinformationen imagePullSecrets auf dem Pod angeben. Diese Anmeldeinformationen werden verwendet, um sich bei dem privaten Registry zu authentifizieren.
Erstellen Sie ein Secret namens regcred:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
Achten Sie darauf, die folgenden Anmeldeinformationen zu ersetzen:
- <your-registry-server> ist Ihr privates Docker-Registry-FQDN. Verwenden Sie https://index.docker.io/v1/ für DockerHub.
- <your-name> ist Ihr Docker-Benutzername.
- <your-pword> ist Ihr Docker-Passwort.
- <your-email> ist Ihre Docker-E-Mail.
Sie haben Ihre Docker-Anmeldeinformationen im Cluster erfolgreich als Secret mit dem Namen regcred eingerichtet.
Um den Inhalt des regcred-Secret zu verstehen, schauen Sie sich das Secret im YAML-Format an:
kubectl get secret regcred --output=yaml
Im folgenden Beispiel benötigt ein Pod Zugriff auf Ihre Docker-Anmeldeinformationen in regcred:
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: <your-private-image> imagePullSecrets: - name: regcred
Ersetzen Sie your.private.registry.example durch den Pfad zu einem Image in einem privaten Registry, das dem folgenden ähnelt:
your.private.registry.example.com/bob/bob-private:v1
Um das Image aus dem privaten Registry abzurufen, benötigt Kubernetes die Anmeldeinformationen. Das Feld imagePullSecrets in der Konfigurationsdatei gibt an, dass Kubernetes die Anmeldeinformationen von einem Secret namens regcred abrufen muss.
Weitere Optionen zum Erstellen eines Secrets finden Sie unter Erstellen eines Pods, der ein Secret verwendet, um ein Image auf der Kubernetes-Website abzurufen.
3. Registry-Fehlerbehebung
Im folgenden Beispiel ist das Registry aufgrund eines Netzwerkverbindungsproblems nicht zugänglich, da kubelet den privaten Registry-Endpunkt nicht erreichen kann:
$ 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
Der Fehler „Image konnte nicht abgerufen werden ...“ bedeutet, dass Kubelet versucht hat, eine Verbindung zum Docker-Registry-Endpunkt herzustellen, und dies aufgrund eines Verbindungs-Timeouts fehlgeschlagen ist.
Um diesen Fehler zu beheben, überprüfen Sie Ihr Subnetz, Ihre Sicherheitsgruppen und Ihre Netzwerk-ACL, die die Kommunikation mit dem angegebenen Registry-Endpunkt ermöglichen.
Im folgenden Beispiel wurde das Registry-Ratenlimit überschritten:
$ 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
Das Docker-Registry-Ratenlimit liegt bei 100 Container-Image-Anfragen pro sechs Stunden für anonyme Nutzung und 200 für Docker-Konten. Image-Anfragen, die diese Grenzwerte überschreiten, wird der Zugriff verweigert, bis das sechsstündige Fenster abgelaufen ist. Informationen zur Verwaltung der Nutzung und zum Verstehen der Registry-Ratenlimits finden Sie auf der Docker-Website unter Grundlegendes zu Ihrem Docker-Hub-Ratenlimit.
Ähnliche Informationen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 5 Monaten
- AWS OFFICIALAktualisiert vor einem Monat
- AWS OFFICIALAktualisiert vor 22 Tagen
- AWS OFFICIALAktualisiert vor einem Jahr