Warum zeigen Pods beim Abrufen von Images pull QPS exceeded Fehler an?
Beim Starten von Pods können Fehlermeldungen auftreten, die darauf hinweisen, dass das Herunterladen von Images gedrosselt wird, beispielsweise mit Meldungen wie pull QPS exceeded.
Behebung von Problemen mit der QPS-Ratenbegrenzung beim Abrufen von Images in VPC-Clustern.
Wenn Sie Pods bereitstellen, die Container-Images abrufen müssen, können Sie die folgenden Symptome beobachten:
- Fehlermeldungen, die
pull QPS exceededbeim Start des Pods enthalten - Langsame Bildzugriffszeiten, insbesondere wenn mehrere große Bilder gezogen werden
- Es dauert länger als erwartet, bis die Schoten den Zustand
Runningerreichen - Bildzugoperationen, die scheinbar gedrosselt oder in der Geschwindigkeit begrenzt sind
Die wahrscheinlichste Ursache für langsames Herunterladen von Images mit Fehlern pull QPS exceeded ist, dass Ihre VPC-Worker-Knoten an ihre Grenze der Festplatten-E/A-Bandbreite stoßen.
VPC-Arbeitsknoten haben je nach ihrer Konfiguration unterschiedliche Bandbreitengrenzen:
- Standard-Arbeitsknoten (ohne Sekundärspeicher): Begrenzt auf 393 Mbit/s (49 MB/Sek.) für Festplatten-E/A-Vorgänge
- Worker-Knoten mit sekundärem Speicher: Höhere Bandbreitenbeschränkungen je nach ausgewählter Speicherebene
Wenn mehrere Pods gleichzeitig versuchen, große Container-Images zu ziehen:
- Jeder Image-Pull-Vorgang verbraucht Festplatten-E/A-Bandbreite
- Die kombinierte Bandbreitennachfrage kann das Limit von 49 MB/Sek. schnell sättigen
- Sobald das Limit erreicht ist, verlangsamen sich die Bildziehvorgänge erheblich
- Kubernetes kann
pull QPS exceededFehler melden, da es den Betrieb drosselt
Um festzustellen, ob Sie das Bandbreitenlimit der VPC-Arbeitsknoten erreichen, verwenden Sie die Überwachungsfunktionen von IBM Cloud.
Festplatten-E/A-Bandbreite prüfen
Sie müssen eine der folgenden Überwachungslösungen verwenden:
- Installieren Sie Prometheus in Ihrem Cluster und verwenden Sie die folgende Abfrage:
irate(node_disk_read_bytes_total[2m]) + irate(node_disk_written_bytes_total[2m]) - Verwenden Sie IBM Cloud Monitoring (Sysdig). Konfigurieren Sie die Überwachung für Ihren Cluster und erstellen Sie benutzerdefinierte Dashboards, um Festplatten-E/A-Metriken zu verfolgen.
- Verwenden Sie Ihre eigene Überwachungslösung. Wenn Sie ein Überwachungsprogramm eines Drittanbieters verwenden, konfigurieren Sie es so, dass es die Metriken
node_disk_read_bytes_totalundnode_disk_written_bytes_totalverfolgt.
Die wichtigste Kennzahl ist die kombinierte Lese- und Schreibrate der Festplatte. Wenn sie durchgängig 49 MB/Sek. erreicht, stoßen Sie an die Bandbreitengrenze.
Bildzugriffszeiten prüfen
Sie können die Abrufzeiten auch direkt überprüfen:
kubectl get events -A | grep -E "Successfully pulled image"
Dieser Befehl zeigt an, wie lange jeder Bildabruf gedauert hat, und hilft Ihnen, langsame Abrufe zu erkennen.
Problem beheben
Primäre Lösung: Verwendung von Worker-Pools mit sekundärem Speicher
Die empfohlene Lösung ist die Verwendung von Worker-Pools mit angeschlossenem Sekundärspeicher. Der sekundäre Speicher mit 10iops-tier bietet eine dedizierte E/A-Bandbreite, die nicht mit der Boot-Platte konkurriert, was zu einem
viel höheren Durchsatz für gleichzeitige Image-Pulls und schnelleren Pod-Startzeiten führt.
-
Erstellen Sie einen neuen Worker-Pool mit sekundärem Speicher.
- Wenn Sie einen neuen Worker-Pool erstellen, wählen Sie eine Variante mit sekundärem Speicher.
- Verwenden Sie eine der
10iops-tierSpeicheroptionen für optimale Leistung.
-
Migrieren Sie Ihre Workloads in den neuen Pool.
-
Entleeren und entfernen Sie den alten Arbeitsvorrat, nachdem die Migration abgeschlossen ist.
Weitere Hinweise
Ein Upgrade auf Sekundärspeicher ist zwar die primäre Lösung, aber Sie können auch eine andere wählen:
- Bildgrößen reduzieren
- Verwenden Sie mehrstufige Aufbauten und minimieren Sie Schichten
- Bild-Caching verwenden
- Häufig verwendete Bilder auf Worker Nodes vorziehen
- Optimieren Sie imagePullPolicy
- Konfigurieren Sie Ihre Pod-Spezifikationen, um unnötige Abrufe zu vermeiden:
- Verwenden Sie
imagePullPolicy: IfNotPresent, um Bilder nur dann zu beziehen, wenn sie nicht bereits auf dem Knoten vorhanden sind. - Vermeiden Sie
imagePullPolicy: Always, es sei denn, Sie müssen jedes Mal die neueste Version abrufen. - Verwenden Sie für Produktions-Workloads spezifische Bild-Tags, nicht
latest, in Kombination mitIfNotPresent, um die Anzahl der Pulls zu minimieren.
- Verwenden Sie
- Überwachung und Warnmeldungen einrichten
- Richten Sie Warnungen für anhaltend hohe Festplatten-E/A-Raten ein, die sich 49 MB/Sek. nähern.
- Überwachen Sie die Abrufzeiten von Images als Teil Ihrer Bereitstellungsmetriken.
- Verfolgen Sie die Startzeiten der Pods, um Leistungseinbußen zu erkennen.