GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So debuggen Sie Kubernetes „ImagePullBackOff“-Fehler

Kubernetes-Cluster können beim Abrufen Ihrer Container-Images auf mehrere Probleme stoßen. Wenn ein Fehler auftritt, geben Ihre Pods ein ImagePullBackOff ein Zustand. So beheben Sie Fehler in dieser häufigen, aber kryptischen Nachricht, damit Sie Ihre Dienste online nutzen können.

Wie Image-Pulls funktionieren

Kubernetes muss ein Image abrufen, wenn Sie eine neue Bereitstellung erstellen oder eine vorhandene mit einer anderen Tag-Referenz aktualisieren. Die Verantwortung für das Abrufen von Bildern liegt beim Kubelet-Prozess auf jedem Worker-Knoten. Jedes Image, auf das von einem Pod-Manifest verwiesen wird, muss für alle Knoten im Cluster zugänglich sein, damit jeder von ihnen eine Containerplanungsanforderung erfüllen kann.

Der Download kann fehlschlagen, wenn der Bildpfad falsch ist, Sie nicht richtig authentifiziert sind oder das Netzwerk ausfällt. In diesem Fall zieht sich Kubernetes zurück und plant einen weiteren Download-Versuch. Die Verzögerung vor dem nächsten Pull erhöht sich exponentiell, wenn ein Versuch fehlschlägt, bis zu einer Grenze von fünf Minuten.

Wenn Ihr Pod den ImagePullBackOff anzeigt Zustand hatte Kubernetes mehrere aufeinanderfolgende Image-Pull-Fehler und wartet nun, bevor es erneut versucht. Der Container kann erst gestartet werden, wenn das Image verfügbar ist.

Sie können den Pod in diesem Zustand belassen, wenn Sie wissen, dass das Problem auf Netzwerkbedingungen oder einen anderen vorübergehenden Fehler zurückzuführen ist. Kubernetes führt schließlich einen weiteren Wiederholungsversuch durch und erfasst das Image erfolgreich. Wenn dies nicht der Fall ist, können Sie wie folgt mit dem Debuggen beginnen, damit Sie Ihren Pod aufrufen können.

Überprüfen Sie die Grundlagen

In erster Linie lohnt es sich, die Grundlagen zu überprüfen. Verweist Ihr Ressourcenmanifest auf ein gültiges Bild, das tatsächlich existiert? Überprüfen Sie den Registrierungspfad und das Image-Tag auf einfache Tippfehler.

Sie können den internen Kubernetes-Status mit dem describe pod überprüfen Befehl in Kubectl. Dies gibt Ihnen mehr Informationen als get pod und das Kubernetes-Dashboard bereitstellen.

kubectl describe pod my-pod --namespace my-namespace

Änderungen im Lebenszyklus des Pods werden unter der Überschrift „Ereignisse“ angezeigt. Das erste Ereignis wird Scheduled; darauf sollte ein Pulling folgen Ereignis für den ersten Pull-Versuch. Danach sehen Sie einen Failed oder BackOff Ereignis, wenn der Pull nicht erfolgreich sein konnte. Diese werden später in der Liste wiederholt, wenn sich Kubernetes noch in einem Backoff- und Wiederholungszyklus befindet.

Lesen der Message die mit diesen Ereignissen verbunden sind, liefern oft die Hauptursache des Problems. Ein manifest for image:tag not found Meldung bedeutet, dass das Bild gültig ist, Sie aber ein ungültiges Tag angegeben haben. Wenn does not exist or no pull access angezeigt wird , überprüfen Sie, ob die Registrierungs- und Bildpfade korrekt sind. Wenn Sie sicher sind, dass sie Recht haben, hängt das Problem mit einer falschen Authentifizierung zusammen.

Verwalten von Registrierungsanmeldungen

Sie müssen angemeldet sein, bevor Sie private Bilder abrufen können. In Kubernetes ist es ein zweistufiger Mechanismus:Erstellen Sie ein Geheimnis mit Anmeldeinformationen und verweisen Sie dann in Ihren Pod-Definitionen auf dieses Geheimnis.

Das Pod-Feld heißt imagePullSecrets . Es muss ein Kubernetes-Geheimnis angeben, das ein Anmeldetoken für die Registrierung bereitstellt. Dieses Geheimnis sollte einen Docker-kompatiblen JSON-Wert speichern.

apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
  name: image-pull-secret
data:
  .dockerconfigjson: {{ "{"auths": {"registry.example.com": {"username": "demo-user", "password": "my-password"}}}" | b64enc }}

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: registry.example.com/my-image:latest
  imagePullSecrets:
    - name: image-pull-secret

Dieses Manifest zeigt, wie Sie ein Geheimnis erstellen, das Sie bei registry.example.com anmeldet als demo-user mit dem Passwort my-password . Der Pod verweist mit seinem Namen auf das Geheimnis. Kubelet-Prozesse auf den Knoten Ihres Clusters enthalten die config.json von Docker Snippet, wenn sie Bilder aus der Registrierung abrufen.

Das Snippet muss Base64-codiert sein, um ein gültiger geheimer Kubernetes-Wert zu sein. Sie können einen vorcodierten Wert verwenden oder Klartext durch b64enc von YAML leiten , wie im Manifest oben gezeigt.

Die Art der Anmeldeinformationen, die Sie verwenden, hängt von Ihrer Registrierung ab. In vielen Fällen password tatsächlich ein persönlicher Zugriffstoken oder API-Schlüssel sein. Docker Hub erfordert ein Zugriffstoken, das in Ihren Kontoeinstellungen generiert wird, wenn Sie die Zwei-Faktor-Authentifizierung für Ihr Konto aktiviert haben.

Registrierungsratenlimits

Wenn Sie Ihre Registrierungs-URL, den Bild-Tag-Namen und die Anmeldeinformationen überprüft haben, sehen Sie möglicherweise ImagePullBackOff aufgrund von Registry-Ratenbegrenzungen. Docker Hub beschränkt Sie jetzt auf 100 Container-Pulls alle sechs Stunden. Dies erhöht sich auf 200 Pulls pro sechs Stunden, wenn Sie Ihre Anmeldeinformationen angeben. Diese Obergrenze könnte in einem aktiven Cluster mit vielen häufig bereitgestellten Pods schnell erreicht werden.

Ein Pull-Fehler aufgrund einer Ratenbegrenzung manifestiert sich auf die gleiche Weise wie ein Authentifizierungsproblem. Sie müssen warten, bis genügend Zeit verstrichen ist, damit die Obergrenze abläuft. Kubernetes sollte das Image dann erfolgreich abrufen und Ihre Pods aufrufen.

Erwägen Sie für eine längerfristige Minderung die Ausführung Ihrer eigenen In-Cluster-Registrierung oder Ihres eigenen Proxys, um Ihre Bilder zwischenzuspeichern. Dies kann die Häufigkeit, mit der Sie auf die Server von Docker zugreifen, erheblich reduzieren und hilft Ihnen dabei, die Ratenbegrenzungen einzuhalten.

Zusammenfassung

Kubernetes-Pods geben ein ImagePullBackOff ein Zustand, wenn ein Knoten kein Bild abrufen kann. Kubelet wird den Pull regelmäßig wiederholen, sodass vorübergehende Fehler keinen manuellen Eingriff erfordern, um behoben zu werden.

Wenn Sie sicher sind, ein ImagePullBackOff nicht nur ein vorübergehender Fehler ist, stellen Sie zunächst sicher, dass der Bildpfad des Pods gültig ist. Wenn dies der Fall ist, vermuten Sie falsche Anmeldeinformationen oder eine erschöpfte Ratenbegrenzung. Verwenden von kubectl describe zeigt die Abfolge von Ereignissen, die zu dem Fehler geführt haben.

Als letzte Option können Sie versuchen, das Image selbst von einem anderen Computer abzurufen, um sicherzustellen, dass der Remote-Registrierungsserver tatsächlich aktiv ist. Wenn Sie das Image abrufen können, Ihr Cluster jedoch nicht, haben Sie möglicherweise allgemeinere Netzwerkprobleme, die verhindern, dass Ihre Knoten die Registrierung erreichen.


Docker
  1. Wie debuggt man ein Bash-Skript?

  2. Wie dreht man ein Bild in Gs?

  3. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  4. So ändern Sie Docker-Images

  5. So übertragen Sie Änderungen an einem Docker-Image

So stellen Sie RabbitMQ auf Kubernetes bereit

So stellen Sie PostgreSQL auf Kubernetes bereit

So erstellen Sie eine Bereitstellung in Kubernetes

So installieren Sie Kubernetes unter Ubuntu 20.04

So aktivieren Sie WordPress Debug für die Fehlerbehebung

So reduzieren Sie die Docker-Image-Größe in Docker-Containern