Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
s
<0x0
Bekannte Probleme bei Google Distributed Cloud for Bare Metal
Auf dieser Seite werden alle bekannten Probleme mit Google Distributed Cloud (nur Software) für Bare Metal (früher Google Distributed Cloud Virtual, davor Anthos-Cluster auf Bare Metal) aufgeführt.
Diese Seite richtet sich an Administratoren, Architekten und Betreiber, die den Lebenszyklus der zugrunde liegenden technischen Infrastruktur verwalten und auf Benachrichtigungen und Seiten reagieren, wenn Service Level Objectives (SLOs) nicht erfüllt werden oder Anwendungen ausfallen. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud-Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Wenn Sie am Google-Entwicklerprogramm teilnehmen, speichern Sie diese Seite, um Benachrichtigungen zu erhalten, wenn eine Versionsanmerkung zu dieser Seite veröffentlicht wird. Weitere Informationen finden Sie unter Gespeicherte Seiten.
Zum Filtern der bekannten Probleme nach einer Produktversion oder -kategorie wählen Sie in den folgenden Drop-down-Menüs die gewünschten Filter aus.
Wählen Sie Ihre Google Distributed Cloud-Version aus:
Wählen Sie eine Kategorie für Ihr Problem aus:
Oder suchen Sie nach Ihrem Problem:
Kategorie
Identifizierte Version(en)
Problem und Problemumgehung
Netzwerk, Upgrades und Updates
1.30 und höher
Istiod-Pod erreicht während Upgrades nicht den Status „Bereit“
Die gebündelte Ingress-Funktion in Google Distributed Cloud verwendet istiod. Für diese Funktion werden keine benutzerdefinierten Ressourcendefinitionen verwendet, die von Istio definiert werden. Da der verwendete Code jedoch Open Source ist, reagieren die Pods empfindlich auf Istio-Installationen, die Sie möglicherweise für Ihre eigenen Anwendungsfälle haben.
Wenn in den Clustern keine benutzerdefinierten Ressourcendefinitionen von Istio vorhanden sind, deklariert sich „istiod“ als bereit, ohne auf benutzerdefinierte Ressourcendefinitionen zu warten. Wenn jedoch v1beta benutzerdefinierte Ressourcendefinitionen im Cluster vorhanden sind, wartet Istiod auf v1 benutzerdefinierte Ressourcendefinitionen, bevor es die Bereitschaft erklärt. Dadurch kann es passieren, dass der Istiod-Pod nicht bereit ist und Clusterupgrades fehlschlagen.
Überprüfung:
Prüfen Sie den Status des Istiod-Pods im Namespace gke-system, um festzustellen, ob Ihr Cluster betroffen ist:
kubectlgetpods-ngke-system-lapp=istiod
Wenn der Pod-Status Running ist, die Bereitschaftsprüfung aber fehlschlägt (z. B. 0/1 bereit), ist Ihr Cluster wahrscheinlich betroffen.
Workaround:
Verwenden Sie eine der folgenden Behelfslösungen, um dieses Problem zu beheben.
Stellen Sie die benutzerdefinierten v1-Ressourcendefinitionen von Istio manuell in Ihrem Cluster bereit.
Deaktivieren Sie die Funktion „Gebündelter Ingress“, wenn Sie sie nicht verwenden.
Installation, Upgrades und Updates
1.30.400 und früher
lifecycle-controllers-manager stürzt beim Prüfen benutzerdefinierter PreflightCheck-Ressourcen ab
Bei Clustern mit Version 1.30.400 oder früher kann es zu lifecycle-controllers-manager-Pod-Abstürzen kommen, wenn PreflightCheck-benutzerdefinierte Ressourcen validiert werden. Diese Abstürze führen dazu, dass die Clusterbereitstellung und ‑upgrades nicht abgeschlossen werden können.
Dieses Problem tritt aufgrund einer Nullzeiger-Dereferenzierung während der PreflightCheck-Ressourcenvalidierung auf.
Workaround:
Um die Clusterbereitstellung oder Upgrades fortzusetzen, umgehen Sie die Preflight-Prüfungen. Legen Sie in der Clusterkonfigurationsdatei das Feld bypassPreflightCheck auf true fest:
Node Problem Detector wird nach der Clusterwiederherstellung nicht gestartet
Wenn Sie einen Cluster mit bmctl restore cluster wiederherstellen, wird der NPD-Systemd-Dienst (Node Problem Detector) auf Knoten nach Abschluss des Wiederherstellungsvorgangs nicht gestartet.
Führen Sie nach einem Wiederherstellungsvorgang systemctl is-active node-problem-detector auf Clusternknoten aus, um zu prüfen, ob Sie betroffen sind. Wenn der Befehl inactive zurückgibt, sind Sie von diesem Problem betroffen.
Load Balancer-Pods der Steuerungsebene werden alle 7 Tage neu gestartet
In Clustern, in denen der gebündelte Layer-2-Load-Balancer verwendet wird, können alle 7 Tage „Connection Refused“-Fehler oder eine kurze Nichtverfügbarkeit des API-Servers (ca. 1 Minute) auftreten.
Dieses Verhalten tritt auf, weil die haproxy- und keepalived-Pods auf den Knoten der Steuerungsebene aufgrund einer TTL-Einstellung für Jobs neu gestartet werden. Dieses Problem betrifft Cluster in den Versionen 1.29.0 bis 1.29.700, 1.30.0 bis 1.30.300 sowie 1.28 und früher.
Überprüfung:
So prüfen Sie, ob Ihr Cluster von diesem Problem betroffen ist:
Ersetzen Sie JOB_NAME durch den Namen, der im vorherigen Schritt zurückgegeben wurde.
Wenn die Ausgabe 604800 (entspricht 7 Tagen in Sekunden) lautet, ist Ihr Cluster von diesem Problem betroffen.
Workaround:
Um die wöchentlichen Neustarts zu verhindern, patchen Sie das Feld ttlSecondsAfterFinished in den vorhandenen Load Balancer-Aktualisierungsjobs manuell auf einen größeren Wert. Gehen Sie dazu so vor:
Bearbeiten Sie den Load-Balancer-Aktualisierungsjob:
kubectleditjobJOB_NAME-nkube-system
Suchen Sie im Editor das Feld ttlSecondsAfterFinished und ändern Sie den Wert in 7776000 (ca. 90 Tage).
Speichern Sie die Änderungen und beenden Sie den Editor, um sie zu übernehmen.
Vorgang
1.32.0-1.32.700, 1.33.0-1.33.300, 1.34.0
cluster-operator-Pod stürzt mit Nullzeigerverweis ab
Der cluster-operator-Pod stürzt möglicherweise ab oder gerät aufgrund eines Panikfehlers: assignment to entry in nil map in einem Controller in eine Absturzschleife.
Dies kann passieren, wenn der Controller versucht, Anmerkungen für eine benutzerdefinierte Ressource wie NodePool zu aktualisieren, die keine Anmerkungen hat (nil-Map).
Workaround:
Damit die Panik vermieden wird, muss die benutzerdefinierte Ressource (z. B. NodePool) mindestens eine Annotation haben. Mit dem folgenden Befehl können Sie eine Dummy-Annotation hinzufügen:
NODEPOOL_NAME: Der Name der benutzerdefinierten NodePool-Ressource.
CLUSTER_NAMESPACE: Der Namespace des Clusters.
ADMIN_KUBECONFIG: Der Pfad zur kubeconfig-Datei des Administratorclusters.
Upgrades und Updates
1.34.0
Das Upgrade des Worker-Knotens schlägt aufgrund einer Hostnamenabweichung fehl.
Worker-Knoten-Upgrades schlagen aufgrund einer Regression (kubernetes/kubeadm#3244) in kubeadm fehl. Die Regression tritt auf, wenn der Linux-Hostname nicht mit dem Wert des Labels kubernetes.io/hostname auf den entsprechenden Kubernetes-Knoten übereinstimmt.
Verwenden Sie journalctl, um zu bestätigen, dass der betroffene Knoten fehlschlägt, wie im folgenden Beispiel:
Dec 09 20:09:50 vm-lb-0--40b1a328a3448f5-112eaaafe1beedad kubeadm[3684235]: error: error execution phase kubelet-config: could not remove the CRI socket annotation from Node "vm-lb-0--40b1a328a3448f5-112eaaafe1beedad": nodes "vm-lb-0--40b1a328a3448f5-112eaaafe1beedad" not found
In diesem Beispiel stimmt der in der journalctl-Antwort gemeldete Linux-Hostname nicht mit dem kubernetes.io/hostname-Label für den Knoten überein. Das bestätigt, dass das Upgrade von diesem Problem betroffen ist:
kubectl get nodes lb-0--40b1a328a3448f5-112eaaafe1beedad.lab.anthos \
-ojsonpath='{.metadata.labels.kubernetes\.io\/hostname}'
Die Antwort:
lb-0--40b1a328a3448f5-112eaaafe1beedad.lab.anthos
Workaround:
Damit der betroffene Knoten das Upgrade abschließen kann, versuchen Sie, den Hostnamen vorübergehend so zu ändern, dass er dem Wert des Labels kubernetes.io/hostname auf den entsprechenden Kubernetes-Knoten entspricht, wie im folgenden Beispiel:
Bei der reibungslosen Migration werden vorhandene Verbindungen bei der Knotenisolierung getrennt.
Wenn Sie das schnelle Failover für ausgehenden NAT-Traffic aktivieren, wird durch das Absperren eines Gateway-Knotens mit kubectl cordon <NODE_NAME> eine reibungslose Migration eingeleitet, bei der bestehende ausgehende Verbindungen beibehalten werden. In der reinen Softwareversion 1.34.0 von Google Distributed Cloud funktioniert die Funktion für die reibungslose Migration jedoch nicht wie vorgesehen.
Wenn ein Administrator einen aktiven Egress-Gateway-Knoten in einem Cluster der Version 1.34.0, der schnelles Failover verwendet, sperrt, verhält sich die Sperrung wie ein ungeplanter Knotenausfall und beendet alle vorhandenen zustandsorientierten Verbindungen auf diesem Knoten sofort.
Workaround:
Für dieses Problem gibt es keine Umgehungslösung.
Netzwerk
1.32.0
Fehler bei der Kommunikation mit ClusterIP-Diensten
Bei ClusterIP-Diensten kann es zu zeitweiligen oder fehlgeschlagenen Verbindungen kommen, wenn der Traffic an Backend-Pods auf verschiedenen Knoten weitergeleitet wird. Dieser Kommunikationsfehler wird durch eine Regression in Cilium v1.15 verursacht, die dazu geführt hat, dass die CILIUM_POST_nat-Regeln aus iptables entfernt wurden. Die CILIUM_POST_nat-Regeln sind für die Quellnetzwerkadressübersetzung (Source Network Address Translation, SNAT) erforderlich. Wenn sie entfernt werden, führt dies zu einer unzuverlässigen Maskierung durch kube-proxy, was zu Kommunikationsfehlern bei ClusterIP-Diensten führt.
Wenn Sie beispielsweise einen Cluster aktualisieren und der Vorgang ins Stocken gerät, sehen Sie möglicherweise Logmeldungen wie die folgenden, die darauf hinweisen, dass das TLS-Handshake-Zeitlimit überschritten wurde, während der ClusterIP-Dienst versucht, eine Verbindung zum API-Server im Knotenpool np1 herzustellen:
I0527 15:42:39.261368 372146 upgrade.go:994] Error trying to connect to api server: Get "https://10.200.0.108:443/apis/baremetal.cluster.gke.io/v1/namespaces/cluster-baremetal-test/nodepools/np1": net/http: TLS handshake timeout
E0527 15:42:39.264789 372146 exec.go:207] command "/root/bmctl-upgrade upgrade cluster --kubeconfig /root/bmctl-workspace/baremetal-test/baremetal-test-kubeconfig --quiet --cluster baremetal-test --manifest-profile-env staging" times out
Dieses Problem wurde in Version 1.32.100 und höher behoben.
Workaround:
Wenn Sie kein Upgrade auf eine Version mit dem Fix durchführen können, empfehlen wir, das Cilium-Image manuell auf Version v1.15.6-anthos1.32.50 oder höher zu aktualisieren. Mit diesem Update wird das Problem behoben, indem die erforderlichen CILIUM_POST_nat-Regeln wieder eingeführt werden.
So aktualisieren Sie das Cilium-Image:
Bearbeiten Sie das DaemonSet anetd im Namespace kube-system:
Speichern Sie die Änderungen und schließen Sie den Editor.
Installation, Upgrades und Updates
1.33
bmctl configure projects gibt den Fehler Identity Pool does not exist zurück
Wenn Sie versuchen, den Befehl bmctl configure projects zu verwenden, um die Workload Identity-Föderation für ein neues Google Cloud Projekt zu konfigurieren, schlägt der Befehl mit der folgenden Fehlermeldung fehl:
Error ((retry 1) error adding iam policy bindings: failed to add project binding: failed to set project "<>" iam policy: googleapi: Error 400: Identity Pool does not exist (projectID.). Please check that you specified a valid resource name as returned in the `name` attribute in the configuration API., badRequest) ensuring iam policy binding: project-Id
Dieser Fehler tritt auf, weil der erforderliche Standard-Workload Identity-Pool mit dem Namen projectID. nicht automatisch im neuen Projekt bereitgestellt wird.
Workaround:
Führen Sie die folgenden Schritte aus, um die Identitätsföderation von Arbeitslasten für Ihr Projekt zu konfigurieren:
Erstellen Sie den fehlenden Standard-Workload Identity-Pool manuell:
Standardmäßig hat das Zugriffstoken eine Lebensdauer von 3.600 Sekunden (1 Stunde).
Wenn Sie die Clusterauthentifizierung mit Workload Identity verwenden, prüft bmctl die Ablaufzeit des Tokens. Wenn das Token innerhalb von 1.800 Sekunden (30 Minuten) abläuft, meldet bmctl einen Fehler und wird beendet.
Führen Sie bmctl configure projects noch einmal aus.
Upgrades und Updates, Logging und Monitoring
1.29, 1.30, 1.31, 1.32
cal-update Ansible-Playbook schlägt beim Ändern des Audit-Logging-Flags fehl
Das Ansible-Playbook cal-update enthält Logikfehler, die dazu führen, dass es fehlschlägt, wenn versucht wird, das Flag disableCloudAuditLogging zu ändern. Dadurch wird verhindert, dass Audit-Logs aktiviert oder richtig deaktiviert werden.
Wenn disableCloudAuditLogging von true in false geändert wird, können keine Audit-Logs aktiviert werden, da das Skript fehlschlägt, bevor die Konfigurationsänderung auf kube-apiserver angewendet wird. Wenn disableCloudAuditLogging von false in true geändert wird, können Audit-Logs deaktiviert werden. Der cal-update-Job schlägt jedoch kontinuierlich fehl, sodass das Playbook die Systemdiagnosen nicht erreicht.
Die angezeigte Fehlermeldung lautet:
The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout_lines'
Workaround:
Für dieses Problem gibt es keine Behelfslösung. Sie müssen Ihren Cluster auf eine Version aktualisieren, die die Korrektur enthält. Gehen Sie beim Upgrade so vor:
Deaktivieren Sie das Audit-Logging, indem Sie disableCloudAuditLogging auf true setzen.
Wenn der Patch verfügbar ist, aktualisieren Sie Ihren Cluster auf eine der folgenden Patchversionen (oder höher), die die Korrektur enthalten:
1.30.1200
1.31.800
1.32.400
Wenn Sie Cloud-Audit-Logs wieder aktivieren möchten, setzen Sie disableCloudAuditLogging wieder auf false.
Upgrades und Updates
1.32+
Upgrades für Administratorcluster mit Hochverfügbarkeit (HA) schlagen nach einem Reparaturvorgang fehl
Bei Hochverfügbarkeits-Administratorclustern schlägt der Befehl gkectl upgrade admin fehl und bleibt hängen, wenn Sie ihn nach dem Ausführen des Befehls gkectl repair
admin-master ausführen.
Mit dem Befehl gkectl repair admin-master wird reparierten Maschinen die Anmerkung machine.onprem.gke.io/managed=false hinzugefügt.
Diese Anmerkung führt dazu, dass der cluster-api-Controller beim Ausführen des Befehls gkectl upgrade admin in einem Abgleichszustand hängen bleibt. Upgrades für Nicht-HA-Cluster enthalten eine Pivot-Logik, mit der diese Annotation entfernt wird. Diese Pivot-Logik fehlt jedoch bei Upgrades für HA-Cluster.
Workaround:
Entfernen Sie die Annotation machine.onprem.gke.io/managed manuell aus den Computerressourcen im Administratorcluster, bevor Sie das Upgrade starten.
Upgrades, Konfiguration
1.32.0 – 1.32.200
Registrierungsspiegelung führt zu einem Fehler bei der Preflight-Prüfung für das Upgrade
Bei Clustern, die mit einem Registrierungsspiegel konfiguriert sind, schlägt die check_gcr_pass-Preflight-Prüfung bei einem Upgrade auf Version 1.32.0 oder höher fehl. Dieser Fehler ist auf eine Änderung bei der Erstellung der benutzerdefinierten PreflightCheck-Ressource zurückzuführen. Dabei werden Registrierungsspiegelkonfigurationen aus der Clusterspezifikation, die in der Prüfung verwendet wird, ausgelassen.
Dieses Problem wurde bei internen Tests in Clustern mit Proxy- und Registry-Mirror-Konfigurationen festgestellt.
Workaround:
Sie haben zwei Möglichkeiten, dieses Problem zu umgehen:
Verwenden Sie das Flag --force, wenn Sie das Upgrade auslösen.
Rufen Sie die aktuelle Clusterkonfiguration mit bmctl get config ab und verwenden Sie diese neu generierte Konfigurationsdatei, um das Upgrade auszulösen.
Konfiguration, Updates
1.15 bis 1.30, 1.31.0 bis 1.31.800, 1.32.0 bis 1.32.300
CronJob für regelmäßige Systemdiagnose wird nach Änderungen der Clusterspezifikation nicht aktualisiert
In bestimmten Clusterversionen werden die Spezifikationen der regelmäßigen Systemdiagnose-CronJobs möglicherweise nicht aktualisiert, wenn sich die Konfiguration der Clusterressource ändert. Diese Aktualisierungsfehler führen zu veralteten Systemdiagnosen und potenziellen Jobfehlern.
Dieses Problem wurde in den Google Distributed Cloud-Versionen 1.31.900, 1.32.400 und 1.33.0 und höher behoben.
Workaround:
Bei Versionen 1.30 und früher können Sie das Problem mit den folgenden Schritten umgehen:
Verschachtelung von Gratuitous-ARPs für die VIP der Steuerungsebene
Keepalived wird verwendet, um die VIP der Steuerungsebene von einer Maschine auf eine andere zu verschieben, um Hochverfügbarkeit zu erreichen. Wenn die VIP der Steuerungsebene vom gebündelten Layer 2-Load-Balancer verarbeitet wird, kann es sein, dass Failovers der Keepalived-Instanz zu kurzen Intervallen (unter einer Sekunde) führen, in denen Gratuitous-ARPs mit unterschiedlichen MAC-Adressen verschachtelt werden. Die Switching-Netzwerkinfrastruktur kann dieses Interleaving als abnormal interpretieren und weitere ARP-Nachrichten für bis zu 30 Minuten ablehnen. Blockierte ARP-Nachrichten können wiederum dazu führen, dass die VIP der Steuerungsebene in diesem Zeitraum nicht verfügbar ist.
Die Verschachtelung von überflüssigen ARPs wird durch die Keepalived-Einstellungen verursacht, die in Version 1.31 und früher verwendet werden. Insbesondere wurden alle Knoten so konfiguriert, dass sie dieselbe Priorität verwenden. Keepalived-Konfigurationsänderungen in Version 1.32 beheben dieses Problem, indem sie unterschiedliche Prioritäten für jede Keepalived-Instanz konfigurieren und auch eine Clustereinstellung (controlPlane.loadBalancer.keepalivedVRRPGARPMasterRepeat) bereitstellen, um die Anzahl der unaufgeforderten ARPs zu reduzieren.
Workaround:
In Version 1.31 und früher können Sie die Interleaving-Häufigkeit der kostenlosen ARPs reduzieren, indem Sie die Keepalived-Konfigurationsdatei /usr/local/etc/keepalived/keepalived.conf direkt bearbeiten. Bearbeiten Sie für jeden Knoten, auf dem der Load Balancer der Steuerungsebene ausgeführt wird, die Konfigurationsdatei, um die folgenden Einstellungen zu ändern:
priority: Legen Sie für jeden Knoten einen eindeutigen priority-Wert fest. Gültige Werte liegen zwischen 1 und 254.
weight: Ändern Sie den weight-Wert von -2 in -253, damit ein Keepalived-Failover ausgelöst wird, wenn eine Systemdiagnose fehlschlägt.
Logging und Monitoring
1.30, 1.31, 1.32, 1.33
Abweichung beim Messwert „kubernetes.io/anthos/custom_resurce_watchers“
Aufgrund eines internen Definitionsfehlers werden für den Messwert kubernetes.io/anthos/custom_resurce_watchers möglicherweise ungenaue Daten angezeigt. Wenn Sie von diesem Problem betroffen sind, sehen Sie möglicherweise Fehler in den Logs, die den folgenden ähneln:
Sie können diese Fehler ignorieren. Dieser Messwert wird nicht für kritische Systemwarnungen verwendet und die Fehler haben keine Auswirkungen auf die Funktion Ihres Projekts oder Ihrer Cluster.
Vorgang
1.30, 1.31, 1.32, 1.33
Fehler beim Parsen der Clusterkonfigurationsdatei beim Erstellen des Snapshots
Wenn das Verzeichnis .manifests auf der Administrator-Workstation fehlt, wenn Sie bmctl check cluster --snapshot ausführen, schlägt der Befehl mit einem Fehler wie dem folgenden fehl:
Dieser Fehler tritt auf, weil für den Befehl bmctl check cluster
--snapshot die Dateien mit benutzerdefinierten Ressourcendefinitionen im Verzeichnis .manifests erforderlich sind, um die Clusterkonfiguration zu validieren. Dieses Verzeichnis wird normalerweise bei der Clusterkonfiguration erstellt.
Wenn Sie das Verzeichnis versehentlich löschen oder bmctl von einem anderen Speicherort aus ausführen, kann der Befehl den Snapshot-Vorgang nicht fortsetzen.
Problemumgehungen:
Sie können dieses Problem beheben, indem Sie das Verzeichnis .manifests manuell neu generieren. Verwenden Sie dazu eine der folgenden Methoden:
Im Rahmen der ersten Prüfungen wird mit diesem Befehl automatisch das Verzeichnis .manifests in Ihrem aktuellen Arbeitsverzeichnis erstellt, unabhängig davon, ob der Befehl erfolgreich abgeschlossen wird oder nicht.
Führen Sie im Verzeichnis mit der aktuellen Clusterkonfigurationsdatei den Befehl bmctl create cluster aus:
bmctlcreatecluster--clusterTEST_CLUSTER
Dieser Befehl führt wahrscheinlich zu einem Fehler, z. B. Unable to Parse Cluster Configuration File (Clusterkonfigurationsdatei kann nicht geparst werden). Das Verzeichnis .manifests wird jedoch weiterhin in Ihrem aktuellen Arbeitsverzeichnis erstellt.
Das temporäre Verzeichnis bmctl-workspace/TEST_CLUSTER, das generiert wird, kann danach sicher gelöscht werden.
Nachdem Sie eine der beiden oben genannten Problemumgehungen ausgeführt haben, versuchen Sie es noch einmal mit dem Befehl bmctl check cluster --snapshot.
Installation, Upgrades und Updates
1.32.0, 1.32.100
Virtuelle IP-Adresse der Steuerungsebene wird nicht verschoben, wenn HAProxy nicht verfügbar ist
Wenn die HAProxy-Instanz auf einem Knoten, auf dem die VIP der Steuerungsebene gehostet wird, nicht verfügbar ist, verhindert die Einstellung nopreempt in der Keepalived-Instanz, dass die VIP der Steuerungsebene auf einen Knoten mit einem fehlerfreien HAProxy verschoben wird. Dieses Problem hängt mit einer Funktion zusammen, die die Prioritäten des Keepalived-VRRP-Protokolls (Virtual Router Redundancy Protocol) automatisch konfiguriert und nicht mit der Einstellung nopreempt kompatibel ist.
Workaround:
Um das Problem zu umgehen, führen Sie die folgenden Schritte aus, um das Keepalived-Feature zu deaktivieren:
Fügen Sie dem Cluster die Annotation preview.baremetal.cluster.gke.io/keepalived-different-priorities: "disable" hinzu:
Entfernen Sie nopreempt aus /usr/local/etc/keepalived/keepalived.conf auf den Knoten, auf denen der Load-Balancer der Steuerungsebene ausgeführt wird.
Abhängig von der Load-Balancer-Konfiguration sind dies entweder die Knoten der Steuerungsebene oder die Knoten in einem Load-Balancer-Knotenpool.
Nachdem nopreempt entfernt wurde, müssen die statischen keepalived-Pods neu gestartet werden, damit die Änderungen aus den Konfigurationsdateien übernommen werden. Verwenden Sie dazu auf jedem Knoten den folgenden Befehl, um die keepalived-Pods neu zu starten:
Bei fehlgeschlagenen Preflight- und Systemdiagnosejobs können Artefakte in zeitgestempelten abm-tools-*-Ordnern unter /usr/local/bin zurückbleiben. Wenn Sie davon betroffen sind, sehen Sie möglicherweise zahlreiche Ordner wie den folgenden:
/usr/local/bin/abm-tools-preflight-20250410T114317.
Wiederholte Fehler können zu einer erhöhten Festplattennutzung führen.
Problemumgehung
Entfernen Sie diese Ordner manuell, wenn dieses Problem auftritt:
rm-rf/usr/local/bin/abm-tools-*
Netzwerk
1.28.0-1.28.200
Load-Balancer-Traffic wird bei Verwendung eines NAT-Gateways für ausgehenden Traffic verworfen
In Clustern, in denen NAT-Gateway für ausgehenden Traffic aktiviert ist, wird der Load-Balancer-Traffic verworfen, wenn ein Load-Balancer Back-Ends auswählt, die den Trafficauswahlregeln entsprechen, die von einer veralteten benutzerdefinierten Ressource EgressNATPolicy angegeben werden.
Dieses Problem tritt beim Erstellen und Löschen von Pods auf, die einer Richtlinie für ausgehenden Traffic entsprechen. Die Richtlinien für ausgehenden Traffic werden nicht wie vorgesehen bereinigt, wenn die Pods gelöscht werden. Die veralteten Richtlinien für ausgehenden Traffic führen dazu, dass LoadBalancer-Pods versuchen, Traffic an eine Verbindung zu senden, die nicht mehr vorhanden ist.
Dieses Problem wurde in Google Distributed Cloud-Versionen ab 1.28.300 behoben.
Problemumgehung
Um NAT-Richtlinienressourcen für ausgehenden Traffic zu bereinigen, starten Sie jeden Knoten neu, auf dem ein Backend gehostet wird, das Fehler verursacht.
Upgrades und Updates, Zurücksetzen/Löschen
1,28
Fehler bei der Maschineninitialisierung – neuer Knoten der Steuerungsebene bleibt während des Ersatzes hängen
Wenn Sie einen Knoten der Steuerungsebene in Google Distributed Cloud 1.28 ersetzen (entfernen und hinzufügen), kann es sein, dass der neue Knoten dem Cluster nicht beitreten kann.
Das liegt daran, dass beim Prozess, der für die Einrichtung des neuen Knotens (bm-system-machine-init) verantwortlich ist, der folgende Fehler auftritt:
Failed to add etcd member: etcdserver: unhealthy cluster
Dieser Fehler tritt auf, wenn ein alter Knoten der Steuerungsebene entfernt wird und seine Mitgliedschaft in der etcd-events nicht ordnungsgemäß bereinigt wird. Dadurch bleibt ein veraltetes Mitglied zurück. Das veraltete Mitglied verhindert, dass neue Knoten dem etcd-events-Cluster beitreten. Dadurch schlägt der machine-init-Prozess fehl und der neue Knoten wird immer wieder neu erstellt.
Die Folgen dieses Problems sind unter anderem:
Der neue Knoten der Steuerungsebene kann nicht richtig gestartet werden.
Der Cluster kann im Status RECONCILING hängen bleiben.
Der Knoten der Steuerungsebene wird aufgrund des machine-init-Fehlers kontinuierlich gelöscht und neu erstellt.
Dieses Problem wurde in Version 1.29 und höher behoben.
Workaround:
Wenn Sie kein Upgrade auf Version 1.29 ausführen können, können Sie das fehlerhafte etcd-events-Mitglied manuell aus dem Cluster entfernen. Folgen Sie dazu dieser Anleitung:
Verwenden Sie SSH, um auf einen funktionierenden Knoten der Steuerungsebene zuzugreifen.
Wenn die Antwort den entfernten Knoten in der Mitgliederliste enthält, suchen Sie in der ersten Spalte nach der Mitglieds-ID für den Knoten und führen Sie den folgenden Befehl aus:
Fehler beim Upgrade der Steuerungsebene aufgrund einer fehlenden super-admin.conf-Datei
Während eines Clusterupgrades kann der Upgradevorgang auf dem ersten Knoten der Steuerungsebene mit einer Fehlermeldung im Ansible-Job fehlschlagen, die darauf hinweist, dass die Datei super-admin.conf fehlt.
Dieses Problem tritt auf, weil der erste Knoten der Steuerungsebene, der aktualisiert wird, möglicherweise nicht der erste Knoten ist, der bei der Clustererstellung bereitgestellt wurde.
Beim Upgrade wird davon ausgegangen, dass der erste Knoten, der aktualisiert wird, derjenige ist, der die Datei super-admin.conf enthält.
Dieses Problem wurde in den folgenden Patch-Updates behoben: 1.30.500-gke.127, 1.30.600-gke.69 und 1.31.200-gke.59.
Workaround:
Führen Sie auf dem fehlgeschlagenen Knoten den folgenden Schritt aus, um das Problem zu beheben:
Kopieren Sie die Datei /etc/kubernetes/admin.conf nach /etc/kubernetes/super-admin.conf:
Der Upgradeprozess wird automatisch wiederholt und sollte erfolgreich verlaufen.
Upgrades und Updates
1.29.0 – 1.29.1100, 1.30.0 – 1.30.400
Das Beenden von Knoten per Drain wird angehalten, wenn
Pods NoSchedule-Markierungen tolerieren
Pods mit einer NoSchedule-Toleranz werden bei Upgrades für den Ausschluss in Betracht gezogen. Aufgrund der NoSchedule-Toleranz kann der Deployment- oder DaemonSet-Controller den Pod jedoch noch einmal auf dem Knoten planen, der gerade gewartet wird, was das Upgrade möglicherweise verzögert.
So können Sie feststellen, ob Sie von diesem Problem betroffen sind:
Prüfen Sie die anthos-cluster-operator-Pod-Logs, um die Pods zu identifizieren, die das Leeren des Knotens blockieren.
Im folgenden Beispiel-Log-Snippet ist der node-problem-detector-mgmt-ydhc2-Pod noch nicht geleert:
nodepool_controller.go:720] controllers/NodePool "msg"="Pods yet to drain for 10.0.0.3 machine are 1 : [node-problem-detector-mgmt-ydhc2]" "nodepool"={"Namespace":"test-cluster","Name":"test-cluster"}
Führen Sie für jeden Pod, der das Leeren des Knotens verhindert, den folgenden Befehl aus, um die Toleranzen zu prüfen:
Ersetzen Sie POD_NAME durch den Namen des Pods, der das Leeren des Knotens blockiert.
Sie sollten eine der folgenden Kombinationen sehen:
Toleranz mit NoSchedule-Effekt und Exists-Operator
Toleranz mit NoSchedule-Effekt und "baremetal.cluster.gke.io/maintenance"-Schlüssel
Toleranz mit leerem Effekt und "baremetal.cluster.gke.io/maintenance"-Schlüssel
Die Antwort könnte so aussehen:
{
"effect": "NoSchedule",
"operator": "Exists"
},
Workaround:
Sie haben folgende Möglichkeiten, das Entleeren des Knotens zu entblocken:
Fügen Sie die baremetal.cluster.gke.io/maintenance:NoExecute-Toleranz zu Pods hinzu, die eine baremetal.cluster.gke.io/maintenance:Schedule-Toleranz haben und kein ordnungsgemäßes Beenden erfordern.
Entfernen Sie die ermittelten Toleranzkombinationen aus Pods, die während des Node-Draining entfernt werden sollen.
Netzwerk
1.28, 1.29 und 1.30
Netzwerkaufrufe an Pods, für die hostPort aktiviert ist, schlagen bei Anfragen fehl, die vom selben Knoten stammen.
Netzwerkaufrufe an Pods, für die hostPort aktiviert ist, schlagen fehl und Pakete werden verworfen, wenn die Anfrage vom selben Knoten stammt, auf dem der Pod ausgeführt wird. Dies gilt für alle Cluster- und Knotentypen.
Cluster, die ohne kube-proxy erstellt wurden, sind jedoch nicht betroffen.
So prüfen Sie, ob Sie von diesem Problem betroffen sind:
Rufen Sie die Namen der anetd-Pods ab:
Die anetd-Pods sind für die Steuerung des Netzwerkverkehrs verantwortlich.
In Version 1.29.100 erkannt, kann auch in anderen Versionen auftreten
Hohe Festplatten-I/O aufgrund von Verlust der Netzwerkverbindung oder ungültigem Dienstkonto
Bei stackdriver-log-forwarder-Pods kann es zu Verbindungsverlusten kommen oder das Dienstkonto ist abgelaufen. In beiden Fällen können die Logs nicht an logging.googleapis.com gesendet werden. Dies führt zu einer Ansammlung von Logs im Puffer und zu einer hohen Datenträger-E/A. Der Cloud Logging-Agent (Fluent Bit), ein DaemonSet mit dem Namen stackdriver-log-forwarder, verwendet einen dateisystembasierten Puffer mit einem Limit von 4 GB. Wenn der Puffer voll ist, versucht der Agent, ihn zu rotieren oder zu leeren, was zu hohen E/A-Vorgängen führen kann.
Das sollten Sie prüfen:
Prüfen Sie, ob die Schlüssel für das Dienstkonto abgelaufen sind. Falls ja, drehen Sie sie, um das Problem zu beheben.
Mit dem folgenden Befehl können Sie das aktuell verwendete Dienstkonto bestätigen und es in IAM validieren:
Warnung:Wenn Sie den Puffer entfernen, gehen alle derzeit im Puffer gespeicherten Logs (einschließlich Kubernetes-Knoten-, Pod- und Containerlogs) dauerhaft verloren. Wenn die Pufferung durch einen Verlust der Netzwerkverbindung zum Logging-Dienst von Google Cloud verursacht wird, gehen diese Logs dauerhaft verloren, wenn der Puffer gelöscht wird oder wenn der Puffer voll ist und der Agent die Logs nicht senden kann.
Entfernen Sie den stackdriver-log-forwarder-DaemonSet-Pod aus dem Cluster, indem Sie einen Knotenselektor hinzufügen. Dadurch wird das stackdriver-log-forwarder-DaemonSet beibehalten, aber von den Knoten entfernt:
Ersetzen Sie KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.
Prüfen Sie, ob die stackdriver-log-forwarder-Pods gelöscht wurden, bevor Sie mit dem nächsten Schritt fortfahren.
Wenn dies nur bei einem oder wenigen Knoten der Fall ist:
Stellen Sie über SSH eine Verbindung zum Knoten her, auf dem stackdriver-log-forwarder ausgeführt wurde. Prüfen Sie, ob „stackdriver-log-forwarder“ nicht mehr auf diesen Knoten ausgeführt wird.
Löschen Sie auf dem Knoten alle Pufferdateien mit rm -rf /var/log/fluent-bit-buffers/ und fahren Sie dann mit Schritt 6 fort.
Wenn es zu viele Knoten mit diesen Dateien gibt und Sie ein Skript verwenden möchten, um alle Knoten mit diesen Backlog-Chunks zu bereinigen, verwenden Sie die folgenden Skripts:
Stellen Sie ein DaemonSet bereit, um alle Daten in Puffern in fluent-bit zu bereinigen:
Upgrades werden durch hängende Pods aufgrund eines containerd-Problems blockiert
Pods können beim Beenden hängen bleiben, wenn Knoten geleert werden. Pods, die nicht mehr reagieren, können Vorgänge wie Upgrades blockieren, bei denen Knoten geleert werden. Pods können hängen bleiben, wenn der Container als „wird ausgeführt“ angezeigt wird, obwohl der zugrunde liegende Hauptprozess des Containers bereits erfolgreich beendet wurde. In diesem Fall wird der Container auch nicht durch den Befehl crictl stop beendet.
So können Sie feststellen, ob Sie von dem Problem betroffen sind:
Prüfen Sie, ob in Ihrem Cluster Pods mit dem Status Terminating vorhanden sind:
Wenn Sie Warnungen wie die folgenden mit Unhealthy und FailedKillPod als Gründen sehen, sind Sie von diesem Problem betroffen:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedKillPod 19m (x592 over 46h) kubelet error killing pod: [failed to "KillContainer" for "dnsmasq" with KillContainerError: "rpc error: code = DeadlineExceeded desc = context deadline exceeded", failed to "KillPodSandbox" for "0843f660-461e-458e-8f07-efe052deae23" with KillPodSandboxError: "rpc error: code = DeadlineExceeded desc = context deadline exceeded"]
Warning Unhealthy 4m37s (x16870 over 46h) kubelet (combined from similar events): Readiness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "c1ea4ffe7e4f1bacaab4f312bcc45c879785f6e22e7dc2d94abc3a019e20e1a9": OCI runtime exec failed: exec failed: cannot exec in a stopped container: unknown
Dieses Problem wird durch ein Upstream-Problem mit containerd verursacht, das in Google Distributed Cloud-Versionen 1.28.1000, 1.29.600, 1.30.200, 1.31 und höher behoben wurde.
Problemumgehung
So heben Sie die Blockierung des Clustervorgangs auf:
Erzwingen Sie das Löschen aller Pods, die nicht reagieren:
kubectldeletepodPOD_NAME-nPOD_NAMESPACE--force
Wenn die Pods erfolgreich neu gestartet wurden, versuchen Sie es noch einmal mit dem Clustervorgang.
Upgrades und Updates, Betrieb
1.28, 1.29 und 1.30.0-1.30.100
Upgrades werden durch hängende Pods blockiert, weil cgroups nicht entfernt werden konnte.
Pods können beim Beenden hängen bleiben, wenn Knoten geleert werden. Festsitzende Pods können Clusteroperationen wie Upgrades blockieren, bei denen Knoten per Drain beendet werden. Pods können hängen bleiben, wenn der runc init-Prozess eingefroren wird. Dadurch kann containerd den cgroups-Prozess, der mit diesem Pod verknüpft ist, nicht löschen.
So können Sie feststellen, ob Sie von dem Problem betroffen sind:
Prüfen Sie, ob in Ihrem Cluster Pods mit dem Status Terminating vorhanden sind:
Wenn die cgroupsTHAWED wurden, werden die entsprechenden runc init-Prozesse automatisch beendet und die cgroups automatisch entfernt. So wird verhindert, dass weitere Failed to remove cgroup-Warnungen in den kubelet-Logs angezeigt werden. Die Pods, die sich im Status Terminating befinden, werden kurz nach dem Bereinigen automatisch entfernt.
Nachdem die eingefrorenen cgroups bereinigt und die hängengebliebenen Pods entfernt wurden, versuchen Sie es noch einmal.
Konfiguration, Netzwerk
1.28.0 bis 1.28.1000, 1.29.0 bis 1.29.500 und 1.30.0 bis 1.30.200
NodeNotReady-Ereignisse aufgrund fehlgeschlagener Lease-Aktualisierungen
In den identifizierten Versionen von Google Distributed Cloud kann es vorkommen, dass kubelet Knotenleases über 40 Sekunden lang nicht aktualisiert. Dies führt zu NodeNotReady-Ereignissen.
Das Problem tritt unregelmäßig auf, etwa alle sieben Tage. Das Failover der virtuellen IP-Adresse der Steuerungsebene kann etwa zur selben Zeit wie die NodeNotReady-Ereignisse auftreten.
Dieses Problem wurde in den Versionen 1.28.1100, 1.29.600, 1.30.300 und höher behoben.
Workaround:
So beheben Sie das Problem:
Erstellen Sie /etc/default/kubelet und fügen Sie die folgenden Umgebungsvariablen hinzu:
Ersetzen Sie KUBELET_PID durch die Ausgabe des Befehls aus dem vorherigen Schritt.
In der Ausgabe des Befehls cat sollten die beiden hinzugefügten Umgebungsvariablen in den letzten Zeilen aufgeführt sein.
Updates
1,30
Fehler bei unveränderlichen Feldern beim Aktualisieren von Nutzerclustern mit bmctl-Version 1.30.x
Wenn Sie einen Nutzercluster mit dem Befehl bmctl create cluster erstellen und das Feld cloudOperationsServiceAccountKeyPath im Header übergeben, wird das Feld spec.clusterOperations.serviceAccountSecret der erstellten Clusterressource hinzugefügt. Dieses Feld ist nicht in der Clusterkonfigurationsdatei enthalten und ist unveränderlich. Mit dem Befehl bmctl update cluster wird dieses Feld nicht aus dem Header ausgefüllt. Versuche, den Cluster mit dem Befehl bmctl update cluster und der ursprünglichen Clusterkonfigurationsdatei zu aktualisieren, schlagen mit dem folgenden Fehler fehl:
Die abgerufene benutzerdefinierte Ressource wird in eine YAML-Datei mit dem Namen bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-TIMESTAMP.yaml geschrieben.
Diese neue Konfigurationsdatei enthält spec.clusterOperations.serviceAccountSecret, was für die Ausführung des Aktualisierungsbefehls erforderlich ist.
Der TIMESTAMP im Dateinamen gibt das Datum und die Uhrzeit der Dateierstellung an.
Ersetzen Sie die vorhandene Clusterkonfigurationsdatei durch die abgerufene Datei.
Speichern Sie die Sicherung der vorhandenen Datei.
Bearbeiten Sie die neue Clusterkonfigurationsdatei und verwenden Sie bmctl update, um den Nutzercluster zu aktualisieren:
Die Kubelet-Zertifikatsrotation schlägt fehl, wenn die aktuellen Zertifikatsdateien keine Symlinks sind
Die Kubelet-Zertifikatsrotation schlägt fehl, wenn kubelet-client-current.pem und kubelet-server-current.pem tatsächliche Dateien und keine symbolischen Links sind.
Dieses Problem kann auftreten, nachdem Sie bmctl restore verwendet haben, um einen Cluster aus einer Sicherung wiederherzustellen.
Workaround:
Wenn Sie von diesem Problem betroffen sind, können Sie die folgenden Schritte als Problemumgehung verwenden:
Wenn die Zertifikate erfolgreich rotiert wurden, löschen Sie das Sicherungsverzeichnis:
rm-rf~/kubelet-backup/
Installation, Upgrades und Updates
1,31
Fehler beim Erstellen benutzerdefinierter Ressourcen
In Version 1.31 von Google Distributed Cloud können Fehler auftreten, wenn Sie versuchen, benutzerdefinierte Ressourcen wie Cluster (alle Typen) und Arbeitslasten zu erstellen. Das Problem wird durch eine wichtige Änderung in Kubernetes 1.31 verursacht, die verhindert, dass das Feld caBundle in einer benutzerdefinierten Ressourcendefinition von einem gültigen in einen ungültigen Zustand übergeht.
Weitere Informationen zu dieser Änderung finden Sie im Kubernetes 1.31-Changelog.
Vor Kubernetes 1.31 wurde das Feld caBundle oft auf den provisorischen Wert \n gesetzt, da der API-Server in früheren Kubernetes-Versionen keinen leeren Inhalt des Zertifizierungsstellen-Bundles zuließ. Die Verwendung von \n war eine sinnvolle Problemumgehung, um Verwirrung zu vermeiden, da cert-manager die caBundle normalerweise später aktualisiert.
Wenn die caBundle einmal von einem ungültigen in einen gültigen Status geändert wurde, sollte es keine Probleme geben. Wenn die benutzerdefinierte Ressourcendefinition jedoch auf \n (oder einen anderen ungültigen Wert) abgestimmt wird, kann der folgende Fehler auftreten:
...Invalid value: []byte{0x5c, 0x6e}: unable to load root certificates: unable to parse bytes as PEM block]
Problemumgehung
Wenn Sie eine benutzerdefinierte Ressourcendefinition haben, in der caBundle auf einen ungültigen Wert festgelegt ist, können Sie das Feld caBundle vollständig entfernen. Dadurch sollte das Problem behoben werden.
Installation, Upgrades und Updates
1.28, 1.29 und 1.30
Clusterupgrades dauern zu lange
Bei einem Clusterupgrade wird jeder Clusterknoten geleert und aktualisiert. In Version 1.28 und höher wurde in Google Distributed Cloud von markierungsbasiertem Beenden von Knoten zu auf Räumung basierendem Beenden gewechselt.
Um Pod-Abhängigkeiten zu berücksichtigen, folgt das auf dem Entfernen basierende Leeren außerdem einer mehrstufigen Reihenfolge.
In jeder Phase des Drain-Vorgangs haben Pods eine Kulanzzeit von 20 Minuten, um beendet zu werden. Beim vorherigen taintbasierten Drain-Vorgang gab es nur ein einziges Zeitlimit von 20 Minuten.
Wenn für jede Phase die vollen 20 Minuten erforderlich sind, um alle Pods zu entfernen, kann das Leeren eines Knotens deutlich länger dauern als das vorherige Taint-basierte Leeren. Eine längere Zeit für das Leeren von Knoten kann wiederum die Zeit, die für ein Clusterupgrade oder das Versetzen eines Clusters in den Wartungsmodus benötigt wird, erheblich verlängern.
Es gibt auch ein Upstream-Kubernetes-Problem, das sich auf die Timeout-Logik für das auf Räumung basierende Leeren auswirkt. Dieses Problem kann auch die Zeit für das Leeren von Knoten verlängern.
Workaround:
Als Behelfslösung können Sie das bereinigungsbasierte Beenden von Knoten per Drain deaktivieren.
Dadurch wird wieder auf das taintbasierte Draining zurückgegriffen. Wir empfehlen jedoch nicht, Knoten auf Grundlage von Taints zu leeren, da dabei keine PodDisruptionBudgets (PDBs) berücksichtigt werden, was zu Dienstunterbrechungen führen kann.
Installation, Upgrades und Updates
1.16, 1.28 und 1.29
Veraltete fehlgeschlagene Preflight-Prüfung kann Clusteroperationen blockieren
Die Clusterabstimmung ist eine Standardphase für die meisten Clusteroperationen, einschließlich der Clustererstellung und Clusterupgrades. Während des Clusterabgleichs löst der Google Distributed Cloud-Clustercontroller eine Preflight-Prüfung aus. Wenn diese Preflight-Prüfung fehlschlägt, wird die weitere Clusterabstimmung blockiert. Daher werden auch Clusteroperationen blockiert, die die Clusterabstimmung umfassen.
Diese Preflight-Prüfung wird nicht regelmäßig, sondern nur im Rahmen der Clusterabstimmung ausgeführt. Selbst wenn Sie das Problem beheben, das den ursprünglichen Preflight-Fehler verursacht hat, und On-Demand-Preflight-Prüfungen erfolgreich ausgeführt werden, wird die Clusterabstimmung aufgrund dieser alten fehlgeschlagenen Preflight-Prüfung weiterhin blockiert.
Wenn die Installation oder das Upgrade eines Clusters hängen bleibt, können Sie mit den folgenden Schritten prüfen, ob Sie von diesem Problem betroffen sind:
Prüfen Sie die anthos-cluster-operator-Pod-Logs auf Einträge wie die folgenden:
"msg"="Preflight check not ready. Won't reconcile"
Prüfen Sie, ob die vom Clustercontroller ausgelöste Preflight-Prüfung fehlgeschlagen ist:
Sobald die alte fehlgeschlagene Preflight-Prüfung gelöscht wurde, kann der Clustercontroller eine neue Preflight-Prüfung erstellen.
Installation, Upgrades und Updates
1.30.100, 1.30.200 und 1.30.300
Vorgänge zum Erstellen oder Upgraden von Nutzerclustern schlagen möglicherweise fehl
Das Erstellen von Nutzerclustern in den Versionen 1.30.100, 1.30.200 oder 1.30.300 oder das Aktualisieren vorhandener Nutzercluster auf diese Versionen schlägt möglicherweise fehl. Dieses Problem tritt nur auf, wenn kubectl oder ein GKE On-Prem API-Client (die Google Cloud -Konsole, die gcloud CLI oder Terraform) für Erstellungs- und Upgradevorgänge des Nutzerclusters verwendet wird.
In diesem Fall bleibt die Erstellung des Nutzerclusters im Status Provisioning hängen und ein Upgrade des Nutzerclusters bleibt im Status Reconciling hängen.
CLUSTER_NAME: Der Name des Nutzerclusters, der nicht reagiert.
USER_CLUSTER_NAMESPACE: der Namespace-Name des Nutzerclusters.
ADMIN_KUBECONFIG: der Pfad der kubeconfig-Datei des verwaltenden Clusters.
Wenn der CLUSTER STATE-Wert Provisioning oder Reconciling ist, sind Sie möglicherweise von diesem Problem betroffen. Die folgende Beispielantwort ist ein Hinweis darauf, dass ein Upgrade nicht abgeschlossen werden kann:
NAME ABM VERSION DESIRED ABM VERSION CLUSTER STATE
some-cluster 1.30.0-gke.1930 1.30.100-gke.96 Reconciling
Die nicht übereinstimmenden Versionen sind auch ein Hinweis darauf, dass das Clusterupgrade noch nicht abgeschlossen ist.
Suchen Sie den vollständigen Namen des anthos-cluster-operator-Pods:
Streamen Sie die Logs des anthos-cluster-operator-Pods nach einer sich wiederholenden Meldung, die darauf hinweist, dass der Cluster bei der Bereitstellung oder beim Abgleich hängen geblieben ist:
kubectllogsPOD_NAME-nkube-system-f--since=15s\--kubeconfigADMIN_KUBECONFIG|\grep"Waiting for configMapForwarder to forward kube-system/metadata-image-digests to the cluster namespace, requeuing"
Ersetzen Sie POD_NAME durch den vollständigen Namen des anthos-cluster-operator-Pods aus dem vorherigen Schritt.
Achten Sie während der Ausführung des Befehls auf einen kontinuierlichen Stream übereinstimmender Logzeilen. Dies ist ein Hinweis darauf, dass der Clustervorgang nicht mehr reagiert. Die folgende Beispielausgabe ähnelt der Ausgabe, die angezeigt wird, wenn ein Cluster nicht abgeglichen werden kann:
...
I1107 17:06:32.528471 1 reconciler.go:1475] "msg"="Waiting for configMapForwarder to forward kube-system/metadata-image-digests to the cluster namespace, requeuing" "Cluster"={"name":"user-t05db3f0761d4061-cluster","namespace":"cluster-user-t05db3f0761d4061-cluster"} "controller"="cluster" "controllerGroup"="baremetal.cluster.gke.io" "controllerKind"="Cluster" "name"="user-t05db3f0761d4061-cluster" "namespace"="cluster-user-t05db3f0761d4061-cluster" "reconcileID"="a09c70a6-059f-4e81-b6b2-aaf19fd5f926"
I1107 17:06:37.575174 1 reconciler.go:1475] "msg"="Waiting for configMapForwarder to forward kube-system/metadata-image-digests to the cluster namespace, requeuing" "Cluster"={"name":"user-t05db3f0761d4061-cluster","namespace":"cluster-user-t05db3f0761d4061-cluster"} "controller"="cluster" "controllerGroup"="baremetal.cluster.gke.io" "controllerKind"="Cluster" "name"="user-t05db3f0761d4061-cluster" "namespace"="cluster-user-t05db3f0761d4061-cluster" "reconcileID"="e1906c8a-cee0-43fd-ad78-88d106d4d30a""Name":"user-test-v2"} "err"="1 error occurred:\n\t* failed to construct the job: ConfigMap \"metadata-image-digests\" not found\n\n"
...
Drücken Sie Strg+C, um das Streamen der Logs zu beenden.
Prüfen Sie, ob die ConfigMapForwarder nicht mehr reagiert:
Die Antwort enthält Gründe und Nachrichten aus der ConfigMapForwarder-Ressource. Wenn ConfigMapForwarder nicht mehr reagiert, sollten Sie eine Ausgabe wie die folgende sehen:
Reason: Stalled
Message: cannot forward configmap kube-system/metadata-image-digests without "baremetal.cluster.gke.io/mark-source" annotation
Prüfen Sie, ob die metadata-image-digests-ConfigMap nicht im Namespace des Nutzerclusters vorhanden ist:
Wenn die ConfigMap erfolgreich erstellt wurde, sieht die Antwort des Befehls in etwa so aus:
NAME DATA AGE
metadata-image-digests 0 7s
Nachdem Sie die oben genannten Korrekturen und Überprüfungen vorgenommen haben, sollte der Clusteroperator nicht mehr blockiert sein und der Cluster sollte wie gewohnt funktionieren.
Nutzer ohne Root-Berechtigung können bmctl restore nicht ausführen, um das Quorum wiederherzustellen.
Wenn bmctl restore --control-plane-node als Nutzer ohne Root-Berechtigung ausgeführt wird, tritt beim Kopieren von Dateien vom Steuerungsebenenknoten auf den Arbeitsstationscomputer ein chown-Problem auf.
Workaround:
Führen Sie den Befehl bmctl restore --control-plane-node mit sudo für Nutzer ohne Root-Berechtigung aus.
Upgrades
1.30.0-gke.1930
Der Job für die Systemdiagnose des Upgrades bleibt im aktiven Status, da das Image „pause:3.9“ fehlt
Während eines Upgrades kann der Job „upgrade-health-check“ aufgrund des fehlenden Pause-Images in Version 3.9 im aktiven Status bleiben.
Dieses Problem hat keine Auswirkungen auf den Erfolg des Upgrades.
Workaround:
Löschen Sie den Job „upgrade-health-check“ manuell mit dem folgenden Befehl:
Das Herunterladen von Artefakten, deren Größe das memory.max-Limit der Cgroup überschreitet, kann sehr lange dauern. Dieses Problem wird durch einen Fehler im Linux-Kernel für Red Hat Enterprise Linux (RHEL) 9.2 verursacht. Kernel mit aktiviertem cgroup v2 sind betroffen. Das Problem wurde in den Kernelversionen 5.14.0-284.40.1.el_9.2 und höher behoben.
Workaround:
Erhöhen Sie für betroffene Pods die Einstellungen für das Arbeitsspeicherlimit für die zugehörigen Container (spec.containers[].resources.limits.memory), damit die Limits größer als die Größe der heruntergeladenen Artefakte sind.
Upgrades
1.28 bis 1.29.200
Das Clusterupgrade schlägt aufgrund eines Konflikts in der benutzerdefinierten Ressourcendefinition networks.networking.gke.io fehl.
Während eines Bare-Metal-Clusterupgrades kann das Upgrade mit einer Fehlermeldung fehlschlagen, die darauf hinweist, dass ein Konflikt in der benutzerdefinierten Ressourcendefinition networks.networking.gke.io vorliegt.
Der Fehler weist darauf hin, dass v1alpha1 nicht in spec.versions vorhanden ist.
Dieses Problem tritt auf, weil die v1alpha1-Version der benutzerdefinierten Ressourcendefinition während des Upgrades nicht zu v1 migriert wurde.
Workaround:
Patchen Sie die betroffenen Cluster mit den folgenden Befehlen:
Fehler bei der Preflight-Prüfung von Maschinen für die Einstellungen „check_inotify_max_user_instances“ und „check_inotify_max_user_watches“
Während der Clusterinstallation oder des Clusterupgrades schlagen die Preflight-Prüfungen für Maschinen im Zusammenhang mit den fs.inotify-Kerneleinstellungen möglicherweise fehl. Wenn Sie von diesem Problem betroffen sind, enthält das Log der Preflight-Prüfung des Geräts einen Fehler wie den folgenden:
Minimum kernel setting required for fs.inotify.max_user_instances is 8192. Current fs.inotify.max_user_instances value is 128. Please run "echo "fs.inotify.max_user_instances=8192" | sudo tee --append /etc/sysctl.conf" to set the correct value.
Dieses Problem tritt auf, weil die Werte fs.inotify max_user_instances und max_user_watches fälschlicherweise von der Steuerungsebene und den Bootstrap-Hosts anstelle der vorgesehenen Knotencomputer gelesen werden.
Behelfslösung :
Um dieses Problem zu umgehen, passen Sie die Werte für fs.inotify.max_user_instances
und fs.inotify.max_user_watches auf allen Steuerungsebenen und Bootstrap-Maschinen an die empfohlenen Werte an:
Nach Abschluss der Installation oder des Upgrades können diese Werte bei Bedarf wiederhergestellt werden.
Upgrades
1.28.0 - 1.28.500
Clusterupgrade schlägt mit Fehler bei der Google Cloud-Erreichbarkeitsprüfung fehl
Wenn Sie bmctl verwenden, um ein Upgrade für einen Cluster durchzuführen, schlägt das Upgrade möglicherweise mit einem GCP reachability check failed-Fehler fehl, obwohl die Ziel-URL von der Administratorworkstation aus erreichbar ist. Dieses Problem wird durch einen Fehler in bmctl-Versionen 1.28.0 bis 1.28.500 verursacht.
Workaround:
Bevor Sie den Befehl bmctl upgrade ausführen, legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS so fest, dass sie auf eine gültige Dienstkontoschlüsseldatei verweist:
Wenn Sie die Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) auf diese Weise festlegen, hat bmctl die erforderlichen Anmeldedaten für den Zugriff auf den Google API-Endpunkt.
Konfiguration, Installation, Upgrades und Updates, Netzwerk, Sicherheit
1.15, 1.16, 1.28, 1.29
Clusterinstallation und ‑upgrade schlagen fehl, wenn ipam-controller-manager erforderlich ist
Die Clusterinstallation und das Clusterupgrade schlagen fehl, wenn ipam-controller-manager erforderlich ist und Ihr Cluster unter Red Hat Enterprise Linux (RHEL) 8.9 oder höher (abhängig von Upstream-RHEL-Änderungen) mit SELinux im Enforcing-Modus ausgeführt wird. Das gilt insbesondere, wenn die container-selinux-Version höher als 2.225.0 ist.
Ihr Cluster erfordert die ipam-controller-manager in den folgenden Situationen:
Ihr Cluster ist für IPv4/IPv6-Dual-Stack-Netzwerk konfiguriert.
Ihr Cluster ist mit clusterNetwork.flatIPv4 konfiguriert, das auf true festgelegt ist.
Ihr Cluster ist mit der Annotation preview.baremetal.cluster.gke.io/multi-networking: enable konfiguriert.
Die Clusterinstallation und das Clusterupgrade schlagen fehl, wenn ipam-controller-manager installiert ist.
Problemumgehung
Legen Sie den Standardkontext für das Verzeichnis /etc/kubernetes auf jedem Knoten der Steuerungsebene auf den Typ etc_t fest:
Mit diesen Befehlen wird die Änderung von container-selinux im Verzeichnis /etc/kubernetes rückgängig gemacht.
Nachdem der Cluster auf eine Version mit dem Fix aktualisiert wurde, machen Sie die vorherige Änderung des Dateikontexts auf jedem Knoten der Steuerungsebene rückgängig:
Clusterupgrade schlägt mit Fehler bei der Google Cloud-Erreichbarkeitsprüfung fehl
Wenn Sie bmctl verwenden, um ein Upgrade für einen Cluster durchzuführen, schlägt das Upgrade möglicherweise mit einem GCP reachability check failed-Fehler fehl, obwohl die Ziel-URL von der Administratorworkstation aus erreichbar ist. Dieses Problem wird durch einen Fehler in bmctl-Versionen 1.28.0 bis 1.28.500 verursacht.
Workaround:
Bevor Sie den Befehl bmctl upgrade ausführen, legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS so fest, dass sie auf eine gültige Dienstkontoschlüsseldatei verweist:
Wenn Sie die Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) auf diese Weise festlegen, hat bmctl die erforderlichen Anmeldedaten für den Zugriff auf den Google API-Endpunkt.
Installation
1,29
Problem mit der Binärautorisierung für Cluster mit separatem Load-Balancer-Knotenpool
Die Installation eines Clusters mit einem separaten Load-Balancer-Knotenpool kann fehlschlagen, wenn Sie die Binärautorisierungsrichtlinie während der Clustererstellung aktivieren.
Dieses Problem tritt auf, weil die Erstellung des GKE Identity Service-Pods und anderer wichtiger Pods durch den Binärautorisierung-Webhook blockiert wird.
So ermitteln Sie, ob Sie von diesem Problem betroffen sind:
Suchen Sie in der Ausgabe nach der folgenden Meldung:
admission webhook "binaryauthorization.googleapis.com" denied the
request: failed to post request to endpoint: Post
"https://binaryauthorization.googleapis.com/internal/projects/PROJECT_NUMBER/policy/locations/LOCATION/clusters/CLUSTER_NAME:admissionReview":
oauth2/google: status code 400:
{"error":"invalid_target","error_description":"The
target service indicated by the \"audience\" parameters is invalid.
This might either be because the pool or provider is disabled or deleted
or because it doesn't exist."}
Wenn Sie die oben genannte Meldung sehen, ist Ihr Cluster von diesem Problem betroffen.
Workaround:
So umgehen Sie das Problem:
Vorgang zum Erstellen des Clusters abbrechen.
Entfernen Sie den Block spec.binaryAuthorization aus der Clusterkonfigurationsdatei.
Erstellen Sie den Cluster mit deaktivierter Binärautorisierung.
Probleme mit Bereitstellungspunkten bei aktiviertem SELinux
Wenn Sie SELinux aktiviert haben und Dateisysteme in Kubernetes-bezogene Verzeichnisse einhängen, können Probleme wie ein fehlgeschlagener Cluster, nicht lesbare Dateien oder Berechtigungsprobleme auftreten.
Führen Sie den folgenden Befehl aus, um festzustellen, ob Sie von diesem Problem betroffen sind:
ls-Z/var/lib/containerd
.
Wenn Sie system_u:object_r:unlabeled_t:s0 sehen, wo Sie ein anderes Label wie system_u:object_r:container_var_lib_t:s0 erwarten, sind Sie betroffen.
Workaround:
Wenn Sie vor Kurzem Dateisysteme in Verzeichnisse eingebunden haben, müssen Sie dafür sorgen, dass diese Verzeichnisse mit Ihrer SELinux-Konfiguration übereinstimmen.
Außerdem sollten Sie die folgenden Befehle auf jeder Maschine ausführen, bevor Sie bmctl create cluster ausführen:
restorecon-R-v/var
restorecon-R-v/etc
Diese einmalige Korrektur bleibt nach dem Neustart bestehen, ist jedoch jedes Mal erforderlich, wenn ein neuer Knoten mit denselben Mount-Punkten hinzugefügt wird. Weitere Informationen finden Sie in der Red Hat-Dokumentation unter Dateisysteme bereitstellen.
Zurücksetzen/Löschen
1.29.0
Zurücksetzen des Nutzerclusters schlägt beim Löschen des Namespace fehl
Wenn Sie bmctl reset cluster -c ${USER_CLUSTER} ausführen, nachdem alle zugehörigen Jobs abgeschlossen sind, kann der Befehl den Namespace des Nutzerclusters nicht löschen. Der Namespace des Nutzerclusters befindet sich im Status Terminating. Irgendwann läuft das Zurücksetzen des Clusters ab und es wird ein Fehler zurückgegeben.
Workaround:
So entfernen Sie den Namespace und schließen das Zurücksetzen des Nutzerclusters ab:
Löschen Sie den Pod metrics-server aus dem Administratorcluster:
Sobald der Finalizer entfernt wurde, wird der Clusternamespace entfernt und das Zurücksetzen des Clusters ist abgeschlossen.
Konfiguration, Installation, Sicherheit
1.16.0 bis 1.16.7 und 1.28.0 bis 1.28.400
Für das Deployment der Binärautorisierung fehlt ein „nodeSelector“
Wenn Sie Binärautorisierung für Google Distributed Cloud aktiviert haben und eine Version von 1.16.0 bis 1.16.7 oder 1.28.0 bis 1.28.400 verwenden, kann es zu Problemen bei der Planung der Pods für die Funktion kommen. In diesen Versionen fehlt im Binary Authorization-Deployment ein nodeSelector. Daher können die Pods für die Funktion auf Worker-Knoten anstelle von Knoten der Steuerungsebene geplant werden. Dieses Verhalten führt nicht zu Fehlern, ist aber nicht beabsichtigt.
Workaround:
Führen Sie für alle betroffenen Cluster die folgenden Schritte aus:
Öffnen Sie die Bereitstellungsdatei für die Binärautorisierung:
Nachdem die Änderung gespeichert wurde, werden die Pods nur auf den Knoten der Steuerungsebene neu bereitgestellt. Diese Korrektur muss nach jedem Upgrade angewendet werden.
Upgrades und Updates
1.28.0, 1.28.100, 1.28.200, 1.28.300
Fehler beim Upgrade eines Clusters auf 1.28.0–1.28.300
Beim Aktualisieren von Clustern, die vor Version 1.11.0 erstellt wurden, auf die Versionen 1.28.0 bis 1.28.300 kann es passieren, dass der Pod des Lifecycle-Controller-Deployers während des Upgrades in einen Fehlerstatus wechselt. In diesem Fall enthalten die Logs des Lifecycle Controller-Deployer-Pods eine Fehlermeldung ähnlich der folgenden:
"inventorymachines.baremetal.cluster.gke.io\" is invalid: status.storedVersions[0]: Invalid value: \"v1alpha1\": must appear in spec.versions
Workaround:
Dieses Problem wurde in Version 1.28.400 behoben. Führen Sie ein Upgrade auf Version 1.28.400 oder höher durch, um das Problem zu beheben.
Wenn Sie kein Upgrade durchführen können, führen Sie die folgenden Befehle aus, um das Problem zu beheben:
Manchmal werden Cluster- oder Containerlogs im Log-Explorer in resource.labels.project_id mit einer anderen Projekt-ID getaggt.
Dies kann passieren, wenn der Cluster für die Verwendung von Observability PROJECT_ONE konfiguriert ist. Diese wird im Feld clusterOperations.projectID in der Clusterkonfiguration festgelegt.
Die cloudOperationsServiceAccountKeyPath in der Konfiguration hat jedoch einen Dienstkontoschlüssel aus dem Projekt PROJECT_TWO.
In solchen Fällen werden alle Logs an PROJECT_ONE weitergeleitet, resource.labels.project_id wird jedoch als PROJECT_TWO gekennzeichnet.
Workaround:
Verwenden Sie eine der folgenden Optionen, um das Problem zu beheben:
Verwenden Sie ein Dienstkonto aus demselben Zielprojekt.
Ändern Sie project_id in der JSON-Datei des Dienstkontoschlüssels in das aktuelle Projekt.
Ändern Sie project_id direkt im Logfilter im Log-Explorer.
Netzwerk
1.29, 1.30
Leistungseinbußen bei Clustern, die das gebündelte Load-Balancing mit BGP verwenden
Bei Clustern der Version 1.29.0, die gebündeltes Load-Balancing mit BGP verwenden, kann die Load-Balancing-Leistung abnehmen, wenn sich die Gesamtzahl der Dienste vom Typ LoadBalancer der Zahl 2.000 nähert. Wenn die Leistung nachlässt, dauert es entweder lange, bis neu erstellte Dienste eine Verbindung herstellen, oder ein Client kann keine Verbindung zu ihnen herstellen. Vorhandene Dienste funktionieren weiterhin, aber Fehlerzustände wie der Verlust eines Load-Balancer-Knotens werden nicht effektiv behandelt. Diese Dienstprobleme treten auf, wenn die ang-controller-manager-Bereitstellung aufgrund von Arbeitsspeichermangel beendet wird.
Wenn Ihr Cluster von diesem Problem betroffen ist, sind die Dienste im Cluster nicht erreichbar und nicht fehlerfrei. Die ang-controller-manager-Bereitstellung befindet sich in einem CrashLoopBackOff. Die Antwort beim Auflisten der ang-controller-manager-Bereitstellungen ähnelt der folgenden:
Installation, Upgrades, Sicherung und Wiederherstellung
1.28.0, 1.28.100
Verbindungsprobleme mit dem Artifact Registry-Endpunkt gcr.io können Clusteroperationen blockieren
Bei mehreren Clustervorgängen für Administratorcluster wird ein Bootstrap-Cluster erstellt. Bevor ein Bootstrap-Cluster erstellt wird, führt bmctl einen Google Cloud Erreichbarkeitstest von der Administratorworkstation aus durch.
Diese Prüfung kann aufgrund von Verbindungsproblemen mit dem Artifact Registry-Endpunkt gcr.io fehlschlagen. Möglicherweise wird eine Fehlermeldung wie die folgende angezeigt:
Um dieses Problem zu umgehen, wiederholen Sie den Vorgang mit dem Flag --ignore-validation-errors.
Netzwerk
1.15, 1.16
GKE Dataplane V2 ist mit einigen Speichertreibern inkompatibel
Bare-Metal-Cluster verwenden GKE Dataplane V2, das mit einigen Speicheranbietern nicht kompatibel ist. Möglicherweise treten Probleme mit hängenden NFS-Volumes oder Pods auf. Das ist besonders wahrscheinlich, wenn Sie Arbeitslasten mit ReadWriteMany-Volumes haben, die von Speichertreibern unterstützt werden, die für dieses Problem anfällig sind:
Robin.io
Portworx (sharedv4-Dienstvolumes)
csi-nfs
Diese Liste ist nicht vollständig.
Problemumgehung
Eine Lösung für dieses Problem ist für die folgenden Ubuntu-Versionen verfügbar:
20.04 LTS: Verwenden Sie ein 5.4.0-Kernel-Image, das neuer als linux-image-5.4.0-166-generic ist.
22.04 LTS: Verwenden Sie entweder ein 5.15.0-Kernel-Image, das neuer als linux-image-5.15.0-88-generic ist, oder den 6.5-HWE-Kernel.
Wenn Sie keine dieser Versionen verwenden, wenden Sie sich an den Google-Support.
Logging und Monitoring
1.15, 1.16, 1.28
kube-state-metrics OOM in großem Cluster
Möglicherweise stellen Sie fest, dass kube-state-metrics oder der gke-metrics-agent-Pod, der sich auf demselben Knoten wie kube-state-metrics befindet, nicht genügend Arbeitsspeicher (OOM) hat.
Dies kann in Clustern mit mehr als 50 Knoten oder mit vielen Kubernetes-Objekten passieren.
Problemumgehung
Um dieses Problem zu beheben, aktualisieren Sie die benutzerdefinierte Ressourcendefinition stackdriver, damit das Feature-Gate ksmNodePodMetricsOnly verwendet wird. Durch dieses Feature-Gate wird dafür gesorgt, dass nur eine kleine Anzahl wichtiger Messwerte verfügbar ist.
So verwenden Sie diesen Workaround:
Prüfen Sie die benutzerdefinierte Ressourcendefinition stackdriver auf verfügbare Feature-Gates:
Preflight-Prüfung schlägt auf RHEL 9.2 aufgrund fehlender iptables fehl
Bei der Installation eines Clusters auf dem Betriebssystem Red Hat Enterprise Linux (RHEL) 9.2 kann ein Fehler aufgrund des fehlenden iptables-Pakets auftreten. Der Fehler tritt während der Preflight-Prüfung auf und löst eine Fehlermeldung ähnlich der folgenden aus:
'check_package_availability_pass':"The following packages are not available: ['iptables']"
RHEL 9.2 ist in der Vorabversion für Google Distributed Cloud-Version 1.28 verfügbar.
Problemumgehung
Umgehen Sie den Preflight-Prüfungsfehler, indem Sie spec.bypassPreflightCheck in der Clusterressource auf true setzen.
Vorgang
1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16
Langsames MetalLB-Failover bei hoher Skalierung
Wenn MetalLB eine große Anzahl von Diensten (über 10.000) verarbeitet, kann das Failover über eine Stunde dauern. Das liegt daran, dass MetalLB eine ratenbeschränkte Warteschlange verwendet, die bei hoher Skalierung eine Weile braucht, bis sie den Dienst erreicht, der ein Failover benötigt.
Problemumgehung
Aktualisieren Sie Ihren Cluster auf Version 1.28 oder höher. Wenn Sie kein Upgrade durchführen können, führt eine manuelle Bearbeitung des Dienstes (z. B. durch Hinzufügen einer Anmerkung) dazu, dass der Dienst schneller auf den Failover-Modus umschaltet.
Vorgang
1.16.0-1.16.6, 1.28.0-1.28.200
Wenn der Proxy aktiviert ist, müssen Umgebungsvariablen auf der Administrator-Workstation festgelegt werden.
bmctl check cluster kann aufgrund von Proxyfehlern fehlschlagen, wenn die Umgebungsvariablen HTTPS_PROXY und NO_PROXY auf der Administratorworkstation nicht definiert sind. Der bmctl-Befehl gibt eine Fehlermeldung aus, dass einige Google-Dienste nicht aufgerufen werden konnten, wie im folgenden Beispiel:
Stellen Sie HTTPS_PROXY und NO_PROXY auf der Administrator-Workstation manuell ein.
Upgrades und Updates
1.28.0-gke.435
Upgrades auf Version 1.28.0-gke.435 können fehlschlagen, wenn audit.log einen falschen Inhaber hat
In einigen Fällen ist in der Datei /var/log/apiserver/audit.log auf den Knoten der Steuerungsebene sowohl die Gruppen- als auch die Nutzerinhaberschaft auf root festgelegt.
Diese Einstellung für den Dateibesitz führt zu Upgradefehlern für die Steuerungsebenenknoten, wenn ein Cluster von Version 1.16.x auf Version 1.28.0-gke.435 aktualisiert wird.
Dieses Problem betrifft nur Cluster, die vor Version 1.11 erstellt wurden und für die Cloud-Audit-Logs deaktiviert waren. Cloud-Audit-Logs sind standardmäßig für Cluster ab Version 1.9 aktiviert.
Problemumgehung
Wenn Sie Ihren Cluster nicht auf Version 1.28.100-gke.146 aktualisieren können, führen Sie die folgenden Schritte als Problemumgehung aus, um das Clusterupgrade auf Version 1.28.0-gke.435 abzuschließen:
Wenn Cloud-Audit-Logs aktiviert sind, entfernen Sie die Datei /var/log/apiserver/audit.log.
Wenn Cloud-Audit-Logs deaktiviert sind, ändern Sie den /var/log/apiserver/audit.log-Inhaber in den des übergeordneten Verzeichnisses /var/log/apiserver.
Netzwerk, Upgrades und Updates
1.28.0-gke.435
MetalLB weist VIP-Diensten keine IP-Adressen zu
Google Distributed Cloud verwendet MetalLB für das gebündelte Load-Balancing. In Google Distributed Cloud-Version 1.28.0-gke.435 wird das gebündelte MetalLB auf Version 0.13 aktualisiert, wodurch CRD-Unterstützung für IPAddressPools eingeführt wird. Da ConfigMaps jedoch einen beliebigen Namen für ein IPAddressPool zulassen, mussten die Poolnamen in einen Kubernetes-kompatiblen Namen konvertiert werden, indem dem Namen des IPAddressPool ein Hash angehängt wurde.
Ein IPAddressPool mit dem Namen default wird beispielsweise in einen Namen wie default-qpvpd konvertiert, wenn Sie Ihren Cluster auf Version 1.28.0-gke.435 aktualisieren.
Da für MetalLB ein bestimmter Name eines IPPool für die Auswahl erforderlich ist, wird durch die Namenskonvertierung verhindert, dass MetalLB einen Pool auswählt und IP-Adressen zuweist. Daher erhalten Dienste, die metallb.universe.tf/address-pool als Annotation zum Auswählen des Adresspools für eine IP-Adresse verwenden, keine IP-Adresse mehr vom MetalLB-Controller.
Dieses Problem wurde in Google Distributed Cloud-Version 1.28.100-gke.146 behoben.
Problemumgehung
Wenn Sie Ihren Cluster nicht auf Version 1.28.100-gke.146 aktualisieren können, führen Sie die folgenden Schritte als Workaround aus:
Rufen Sie den konvertierten Namen von IPAddressPool ab:
kubectlgetIPAddressPools-nkube-system
Aktualisieren Sie den betroffenen Dienst, um die Annotation metallb.universe.tf/address-pool auf den konvertierten Namen mit dem Hash festzulegen.
Wenn der Name IPAddressPool beispielsweise von default in einen Namen wie default-qpvpd geändert wurde, ändern Sie die Annotation metallb.universe.tf/address-pool: default im Dienst in metallb.universe.tf/address-pool: default-qpvpd.
Der Hash, der bei der Namenskonvertierung verwendet wird, ist deterministisch. Der Workaround ist also dauerhaft.
Upgrades und Updates
1.14, 1.15, 1.16, 1.28, 1.29
Verwaiste Pods nach dem Upgrade auf Version 1.14.x
Wenn Sie ein Upgrade von Clustern auf Version 1.14.x durchführen, werden einige Ressourcen aus der vorherigen Version nicht gelöscht. Möglicherweise sehen Sie eine Reihe von verwaisten Pods wie die folgenden:
Dieses Problem wurde in Google Distributed Cloud-Version 1.15.0 und höher behoben.
Installation
1,14
Clustererstellung hängt beim Job machine-init fest
Wenn Sie versuchen, Google Distributed Cloud Version 1.14.x zu installieren, kann ein Fehler aufgrund der machine-init-Jobs auftreten, ähnlich wie in der folgenden Beispielausgabe:
Entfernen Sie das veraltete etcd-Mitglied, das dazu führt, dass der machine-init-Job fehlschlägt. Führen Sie die folgenden Schritte auf einem funktionierenden Steuerungsebenenknoten aus:
Fehlender Knoten list und watch-Berechtigungen für Cilium-operator
In Cilium 1.13 sind die Berechtigungen für die cilium-operator-ClusterRole falsch. Die Berechtigungen für die Knoten list und watch fehlen. Der cilium-operator kann keine Garbage Collectors starten, was zu den folgenden Problemen führt:
Verlust von Cilium-Ressourcen.
Veraltete Identitäten werden nicht aus BFP-Richtlinienzuordnungen entfernt.
Richtlinienkarten können das Limit von 16.000 Pixeln erreichen.
Es können keine neuen Einträge hinzugefügt werden.
Falsche Durchsetzung von NetworkPolicy.
Identitäten erreichen möglicherweise das Limit von 64.000.
Es können keine neuen Pods erstellt werden.
Ein Operator, dem die Knotenberechtigungen fehlen, meldet die folgende Beispiel-Logmeldung:
2024-01-02T20:41:37.742276761Zlevel=errormsg=k8sErrorerror="github.com/cilium/cilium/operator/watchers/node.go:83: Failed to watch *v1.Node: failed to list *v1.Node: nodes is forbidden: User \"system:serviceaccount:kube-system:cilium-operator\" cannot list resource \"nodes\" in API group \"\" at the cluster scope"subsys=k8s
Der Cilium-Agent meldet eine Fehlermeldung, wenn er keinen Eintrag in eine Richtlinienzuordnung einfügen kann, wie im folgenden Beispiel:
level=errormsg="Failed to add PolicyMap key"bpfMapKey="{6572100 0 0 0}"containerID=datapathPolicyRevision=0desiredPolicyRevision=7endpointID=1313error="Unable to update element for Cilium_policy_01313 map with file descriptor 190: the map is full, please consider resizing it. argument list too long"identity=128ipv4=ipv6=k8sPodName=/port=0subsys=endpoint
Workaround:
Entfernen Sie die Cilium-Identitäten und fügen Sie dem Operator dann die fehlenden ClusterRole-Berechtigungen hinzu:
Entfernen Sie die vorhandenen CiliumIdentity-Objekte:
kubectldeleteciliumid–-all
Bearbeiten Sie das ClusterRole-Objekt cilium-operator:
kubectleditclusterrolecilium-operator
Fügen Sie einen Abschnitt für nodes mit den fehlenden Berechtigungen hinzu, wie im folgenden Beispiel gezeigt:
Speichern Sie die Datei und schließen Sie den Editor. Der Operator erkennt die Berechtigungsänderung dynamisch. Sie müssen den Operator nicht manuell neu starten.
Upgrades und Updates
1.15.0-1.15.7, 1.16.0-1.16.3
Vorübergehendes Problem bei der Preflight-Prüfung
Eine der kubeadm-Systemdiagnoseaufgaben, die während der Preflight-Prüfung für das Upgrade ausgeführt werden, schlägt möglicherweise mit der folgenden Fehlermeldung fehl:
Dieser Fehler kann ignoriert werden. Wenn dieser Fehler auftritt und das Upgrade blockiert, führen Sie den Upgrade-Befehl noch einmal aus.
Wenn dieser Fehler auftritt, wenn Sie den Preflight-Check mit dem Befehl bmctl preflightcheck ausführen, wird dadurch nichts blockiert. Sie können die Preflight-Prüfung noch einmal ausführen, um die korrekten Preflight-Informationen zu erhalten.
Workaround:
Führen Sie den Upgradebefehl noch einmal aus. Wenn der Fehler während bmctl preflightcheck auftritt, führen Sie den Befehl preflightcheck noch einmal aus.
Vorgang
1.14, 1.15.0-1.15.7, 1.16.0-1.16.3, 1.28.0
Regelmäßige Netzwerk-Systemdiagnose schlägt fehl, wenn ein Knoten ersetzt oder entfernt wird
Dieses Problem betrifft Cluster, in denen nach dem Ersetzen oder Entfernen eines Knotens regelmäßige Netzwerk-Systemdiagnosen durchgeführt werden. Wenn Ihr Cluster regelmäßig Systemdiagnosen durchläuft, führt die regelmäßige Netzwerkdiagnose nach dem Ersetzen oder Entfernen eines Knotens zu einem Fehler, da die ConfigMap für das Netzwerkinventar nach der Erstellung nicht aktualisiert wird.
Workaround:
Die empfohlene Problemumgehung besteht darin, die Inventory-ConfigMap und die regelmäßige Netzwerkdiagnose zu löschen. Der Clusteroperator erstellt sie automatisch mit den neuesten Informationen neu.
Führen Sie für Cluster der Version 1.14.x die folgenden Befehle aus:
Network Gateway for GDC kann Ihre Konfiguration nicht anwenden, wenn der Gerätename einen Punkt enthält.
Wenn Sie ein Netzwerkgerät haben, dessen Name einen Punkt (.) enthält, z. B. bond0.2, behandelt Network Gateway for GDC den Punkt als Pfad im Verzeichnis, wenn es sysctl ausführt, um Änderungen vorzunehmen. Wenn das Network Gateway for GDC prüft, ob die Erkennung doppelter Adressen (Duplicate Address Detection, DAD) aktiviert ist, kann die Prüfung fehlschlagen und es erfolgt kein Abgleich.
Das Verhalten unterscheidet sich je nach Clusterversion:
1.14 und 1.15: Dieser Fehler tritt nur auf, wenn Sie dynamische IPv6-Adressen verwenden. Wenn Sie keine IPv6-Floating-IP-Adressen verwenden, tritt dieses Problem nicht auf, wenn Ihre Gerätenamen einen Punkt enthalten.
1.16.0 – 1.16.2: Dieser Fehler tritt immer auf, wenn die Namen Ihrer Geräte einen Punkt enthalten.
Workaround:
Aktualisieren Sie Ihren Cluster auf Version 1.16.3 oder höher.
Als vorübergehende Lösung, bis Sie Ihre Cluster aktualisieren können, entfernen Sie den Punkt (.) aus dem Namen des Geräts.
Upgrades und Updates, Netzwerk, Sicherheit
1.16.0
Upgrades auf Version 1.16.0 schlagen fehl, wenn seccomp deaktiviert ist
Wenn seccomp für Ihren Cluster deaktiviert ist (spec.clusterSecurity.enableSeccomp auf false festgelegt), schlagen Upgrades auf Version 1.16.0 fehl.
In Google Distributed Cloud-Version 1.16 wird Kubernetes-Version 1.27 verwendet.
In Kubernetes-Version 1.27.0 und höher ist das Feature zum Festlegen von seccomp-Profilen allgemein verfügbar und verwendet kein Feature-Gate mehr.
Diese Kubernetes-Änderung führt dazu, dass Upgrades auf Version 1.16.0 fehlschlagen, wenn seccomp in der Clusterkonfiguration deaktiviert ist. Dieses Problem wurde in Clustern mit Version 1.16.1 und höher behoben. Wenn das Feld cluster.spec.clusterSecurity.enableSeccomp auf false festgelegt ist, können Sie ein Upgrade auf Version 1.16.1 oder höher durchführen.
Cluster, bei denen spec.clusterSecurity.enableSeccomp nicht festgelegt oder auf true gesetzt ist, sind nicht betroffen.
containerd-Metadaten können nach dem Neustart beschädigt werden, wenn /var/lib/containerd bereitgestellt wird.
Wenn Sie /var/lib/containerd optional eingebunden haben, können die containerd-Metadaten nach einem Neustart beschädigt werden. Beschädigte Metadaten können dazu führen, dass Pods fehlschlagen, einschließlich systemkritischer Pods.
Prüfen Sie, ob dieses Problem Sie betrifft. Suchen Sie dazu in /etc/fstab nach einer optionalen Bereitstellung für /var/lib/containerd/ und prüfen Sie, ob nofail in den Bereitstellungsoptionen enthalten ist.
Workaround:
Entfernen Sie die Mount-Option nofail in /etc/fstab oder führen Sie ein Upgrade Ihres Clusters auf Version 1.15.6 oder höher durch.
Vorgang
1.13, 1.14, 1.15, 1.16, 1.28
Veraltete Pods im Cluster bereinigen
Es kann vorkommen, dass von einem Deployment (ReplicaSet) verwaltete Pods den Status Failed und den Status TaintToleration haben. Diese Pods verwenden keine Clusterressourcen, sollten aber gelöscht werden.
Mit dem folgenden kubectl-Befehl können Sie die Pods auflisten, die Sie bereinigen können:
kubectlgetpods–A|grepTaintToleration
Die folgende Beispielausgabe zeigt einen Pod mit dem Status TaintToleration:
Prüfen Sie für jeden Pod mit den beschriebenen Symptomen das ReplicaSet, zu dem der Pod gehört. Wenn das ReplicaSet erfüllt ist, können Sie die Pods löschen:
Rufen Sie das ReplicaSet ab, das den Pod verwaltet, und suchen Sie den Wert ownerRef.Kind:
kubectlgetpodPOD_NAME-nNAMESPACE-oyaml
Rufen Sie das ReplicaSet ab und prüfen Sie, ob status.replicas mit spec.replicas übereinstimmt:
kubectlgetreplicasetREPLICA_NAME-nNAMESPACE-oyaml
Wenn die Namen übereinstimmen, löschen Sie den Pod:
kubectldeletepodPOD_NAME-nNAMESPACE.
Upgrades
1.16.0
etcd-Ereignisse können beim Upgrade auf Version 1.16.0 zum Stillstand kommen
Wenn Sie ein Upgrade eines vorhandenen Clusters auf Version 1.16.0 durchführen, können Pod-Fehler im Zusammenhang mit etcd-Ereignissen den Vorgang zum Stillstand bringen. Genauer gesagt schlägt der Job „upgrade-node“ für den Schritt TASK [etcd_events_install : Run etcdevents] fehl.
Wenn Sie von diesem Problem betroffen sind, sehen Sie Pod-Fehler wie die folgenden:
Der kube-apiserver-Pod kann nicht gestartet werden und es wird der folgende Fehler ausgegeben:
connectionerror:desc="transport: Error while dialing dial tcp 127.0.0.1:2382: connect: connection refused"
Der etcd-events-Pod kann nicht gestartet werden und es wird der folgende Fehler ausgegeben:
Wenn Sie Ihren Cluster nicht auf eine Version mit der Fehlerkorrektur aktualisieren können, verwenden Sie die folgende temporäre Problemumgehung, um die Fehler zu beheben:
Verwenden Sie SSH, um auf den Knoten der Steuerungsebene mit den gemeldeten Fehlern zuzugreifen.
Bearbeiten Sie die Manifestdatei „etcd-events“, /etc/kubernetes/manifests/etcd-events.yaml, und entfernen Sie das Flag initial-cluster-state=existing.
Wenden Sie das Manifest an.
Das Upgrade sollte fortgesetzt werden.
Netzwerk
1.15.0-1.15.2
CoreDNS-orderPolicy nicht erkannt
OrderPolicy wird nicht als Parameter erkannt und nicht verwendet. Stattdessen wird in Google Distributed Cloud immer Random verwendet.
Dieses Problem tritt auf, weil die CoreDNS-Vorlage nicht aktualisiert wurde, was dazu führt, dass orderPolicy ignoriert wird.
Workaround:
Aktualisieren Sie die CoreDNS-Vorlage und wenden Sie die Korrektur an. Diese Korrektur bleibt bis zu einem Upgrade erhalten.
Bearbeiten Sie die vorhandene Vorlage:
kubectleditcm-nkube-systemcoredns-template
Ersetzen Sie den Inhalt der Vorlage durch Folgendes:
Network Gateway for GDC-Komponenten wurden aufgrund fehlender Prioritätsklasse entfernt oder sind ausstehend
Netzwerk-Gateway-Pods in kube-system haben möglicherweise den Status Pending oder Evicted, wie in der folgenden gekürzten Beispielausgabe zu sehen ist:
Diese Fehler weisen auf Räumungsereignisse oder darauf hin, dass Pods aufgrund von Knotenressourcen nicht geplant werden können. Da Network Gateway for GDC-Pods keine
PriorityClass haben, haben sie dieselbe Standardpriorität wie andere Arbeitslasten.
Wenn Knoten ressourcenbeschränkt sind, werden die Netzwerk-Gateway-Pods möglicherweise entfernt. Dieses Verhalten ist besonders schlecht für das ang-node
DaemonSet, da diese Pods auf einem bestimmten Knoten geplant werden müssen und nicht migriert werden können.
Workaround:
Führen Sie ein Upgrade auf Version 1.15 oder höher durch.
Als kurzfristige Lösung können Sie manuell eine
PriorityClass
zu den Network Gateway for GDC-Komponenten zuweisen. Der Google Distributed Cloud-Controller überschreibt diese manuellen Änderungen während eines Abgleichsprozesses, z. B. bei einem Cluster-Upgrade.
Weisen Sie die PriorityClass system-cluster-critical den
ang-controller-manager- und autoscaler-Cluster
Controller-Bereitstellungen zu.
Weisen Sie die PriorityClass system-node-critical dem
ang-daemon-Knoten-DaemonSet zu.
Installation, Upgrades und Updates
1.15.0, 1.15.1, 1.15.2
Fehler beim Erstellen und Upgraden von Clustern aufgrund der Länge des Clusternamens
Das Erstellen von Clustern mit Version 1.15.0, 1.15.1 oder 1.15.2 oder das Aktualisieren von Clustern auf Version 1.15.0, 1.15.1 oder 1.15.2 schlägt fehl, wenn der Clustername länger als 48 Zeichen (Version 1.15.0) oder 45 Zeichen (Version 1.15.1 oder 1.15.2) ist. Während der Clustererstellung und Upgradevorgänge erstellt Google Distributed Cloud eine Health Check-Ressource mit einem Namen, der den Clusternamen und die Version enthält:
Bei Clustern der Version 1.15.0 lautet der Name der Systemdiagnoseressource CLUSTER_NAME-add-ons-CLUSTER_VER.
Bei Clustern der Version 1.15.1 oder 1.15.2 lautet der Name der Systemdiagnoseressource CLUSTER_NAME-kubernetes-CLUSTER_VER.
Bei langen Clusternamen überschreitet der Ressourcenname der Systemdiagnose die Kubernetes-Längenbeschränkung von 63 Zeichen für Labelnamen, wodurch die Erstellung der Systemdiagnoseressource verhindert wird.
Ohne eine erfolgreiche Systemdiagnose schlägt der Clusterbetrieb fehl.
So ermitteln Sie, ob Sie von diesem Problem betroffen sind:kubectl describe
Um das Cluster-Upgrade oder die Clustererstellung zu entblocken, können Sie den Healthcheck umgehen. Verwenden Sie den folgenden Befehl, um die benutzerdefinierte Ressource für die Systemdiagnose mit dem Status „Bestanden“ zu patchen: (status: {pass: true})
Cluster der Versionen 1.14.0 und 1.14.1 mit Vorschaufunktionen können nicht auf Version 1.15.x aktualisiert werden
Wenn in Clustern der Versionen 1.14.0 und 1.14.1 eine Vorschaufunktion aktiviert ist, kann kein Upgrade auf Version 1.15.x durchgeführt werden. Dies gilt für Vorabfunktionen wie die Möglichkeit, einen Cluster ohne kube-proxy zu erstellen. Diese Funktion wird mit der folgenden Annotation in der Clusterkonfigurationsdatei aktiviert:
Dieses Problem wurde in Clustern ab Version 1.14.2 behoben.
Workaround:
Wenn Sie Ihre Cluster nicht auf Version 1.14.2 oder höher aktualisieren können, bevor Sie ein Upgrade auf Version 1.15.x durchführen, können Sie direkt auf Version 1.15.x aktualisieren, indem Sie einen Bootstrap-Cluster verwenden:
bmctlupgradecluster--use-bootstrap=true
Vorgang
1,15
Doppelte Floating-IP-Adressen werden in Clustern der Version 1.15 nicht akzeptiert
Mit Network Gateway für GDC können Sie keine neuen NetworkGatewayGroup-benutzerdefinierten Ressourcen erstellen, die IP-Adressen in spec.floatingIPs enthalten, die bereits in vorhandenen NetworkGatewayGroup-benutzerdefinierten Ressourcen verwendet werden. Diese Regel wird durch einen Webhook in Bare-Metal-Clustern der Version 1.15.0 und höher erzwungen. Bereits vorhandene doppelte Floating-IP-Adressen führen nicht zu Fehlern. Der Webhook verhindert nur die Erstellung neuer benutzerdefinierter NetworkGatewayGroups-Ressourcen, die doppelte IP-Adressen enthalten.
Die Webhook-Fehlermeldung gibt die in Konflikt stehende IP-Adresse und die vorhandene benutzerdefinierte Ressource an, die sie bereits verwendet:
IPaddressexistsinothergatewaywithnamedefault
In der ursprünglichen Dokumentation für erweiterte Netzwerkfunktionen wie das NAT-Gateway für ausgehenden Traffic wird nicht vor doppelten IP-Adressen gewarnt.
Anfangs wurde nur die NetworkGatewayGroup-Ressource mit dem Namen default vom Abgleich erkannt. Das Network Gateway für GDC erkennt jetzt alle benutzerdefinierten NetworkGatewayGroup-Ressourcen im System-Namespace. Vorhandene benutzerdefinierte NetworkGatewayGroup-Ressourcen werden unverändert berücksichtigt.
Workaround:
Fehler treten nur beim Erstellen einer neuen benutzerdefinierten NetworkGatewayGroup-Ressource auf.
So beheben Sie den Fehler:
Verwenden Sie den folgenden Befehl, um benutzerdefinierte NetworkGatewayGroups-Ressourcen aufzulisten:
Öffnen Sie vorhandene benutzerdefinierte NetworkGatewayGroup-Ressourcen und entfernen Sie alle in Konflikt stehenden Floating-IP-Adressen (spec.floatingIPs):
Um die Änderungen zu übernehmen, schließen Sie die bearbeiteten benutzerdefinierten Ressourcen und speichern Sie sie.
VM Runtime on GDC
1.13.7
VMs werden auf 1.13.7-Clustern, die eine private Registry verwenden, möglicherweise nicht gestartet
Wenn Sie VM Runtime on GDC in einem neuen oder aktualisierten Cluster der Version 1.13.7 aktivieren, der eine private Registrierung verwendet, werden VMs, die eine Verbindung zum Knotennetzwerk herstellen oder eine GPU verwenden, möglicherweise nicht richtig gestartet. Dieses Problem wird durch einige System-Pods im vm-system-Namespace verursacht, bei denen Fehler beim Abrufen von Images auftreten. Wenn Ihre VM beispielsweise das Knotennetzwerk verwendet, melden einige Pods möglicherweise Fehler beim Abrufen von Images wie die folgenden:
macvtap-4x9zp0/1Init:ImagePullBackOff070m
Dieses Problem wurde in Clustern ab Version 1.14.0 behoben.
Problemumgehung
Wenn Sie Ihre Cluster nicht sofort aktualisieren können, können Sie Images manuell abrufen. Mit den folgenden Befehlen wird das macvtap-CNI-Plugin-Image für Ihre VM abgerufen und per Push in Ihre private Registry übertragen:
Ersetzen Sie REG_HOST durch den Domainnamen eines Hosts, den Sie lokal spiegeln.
Installation
1.11, 1.12
Während der Clustererstellung im Kind-Cluster kann der gke-metric-agent-Pod nicht gestartet werden
Während der Clustererstellung im Kind-Cluster kann der gke-metrics-agent-Pod aufgrund eines Fehlers beim Abrufen des Images nicht gestartet werden:
error="failed to pull and unpack image \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\": failed to resolve reference \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\": pulling from host gcr.io failed with status code [manifests 1.8.3-anthos.2]: 403 Forbidden"
Außerdem wird im containerd-Log des Bootstrap-Clusters der folgende Eintrag angezeigt:
Sep1323:54:20bmctl-control-planecontainerd[198]:time="2022-09-13T23:54:20.378172743Z"level=infomsg="PullImage \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\" "Sep1323:54:21bmctl-control-planecontainerd[198]:time="2022-09-13T23:54:21.057247258Z"level=errormsg="PullImage \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\" failed"error="failed to pull and unpack image \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\": failed to resolve reference \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\": pulling from host gcr.io failed with status code [manifests 1.8.3-anthos.2]: 403 Forbidden"
Im Pod wird der folgende Fehler „failing to pull“ angezeigt:
gcr.io/gke-on-prem-staging/gke-metrics-agent
Problemumgehung
Trotz der Fehler wird die Clustererstellung nicht blockiert, da der gke-metrics-agent-Pod im Kind-Cluster dazu dient, die Erfolgsrate der Clustererstellung zu erhöhen und interne Tracking- und Monitoring-Vorgänge zu ermöglichen.
Sie können diesen Fehler also ignorieren.
Problemumgehung
Trotz der Fehler wird die Clustererstellung nicht blockiert, da der gke-metrics-agent-Pod im Kind-Cluster dazu dient, die Erfolgsrate der Clustererstellung zu erhöhen und interne Tracking- und Monitoring-Vorgänge zu ermöglichen.
Sie können diesen Fehler also ignorieren.
Vorgang, Netzwerk
1.12, 1.13, 1.14, 1.15, 1.16, 1.28
Beim Zugriff auf einen IPv6-Dienstendpunkt stürzt der LoadBalancer-Knoten unter CentOS oder RHEL ab
Wenn Sie auf einen Dual-Stack-Dienst (einen Dienst mit IPv4- und IPv6-Endpunkten) zugreifen und den IPv6-Endpunkt verwenden, kann der LoadBalancer-Knoten, der den Dienst bereitstellt, abstürzen. Dieses Problem betrifft Kunden, die Dual-Stack-Dienste mit CentOS oder RHEL und einer Kernelversion vor kernel-4.18.0-372.46.1.el8_6 verwenden.
Wenn Sie der Meinung sind, dass dieses Problem Sie betrifft, prüfen Sie die Kernelversion auf dem LoadBalancer-Knoten mit dem Befehl uname -a.
Workaround:
Aktualisieren Sie den LoadBalancer-Knoten auf die Kernelversion kernel-4.18.0-372.46.1.el8_6 oder höher. Diese Kernelversion ist in CentOS und RHEL ab Version 8.6 standardmäßig verfügbar.
Netzwerk
1.11, 1.12, 1.13, 1.14.0
Zeitweilige Verbindungsprobleme nach dem Neustart des Knotens
Nach dem Neustart eines Knotens können zeitweise Verbindungsprobleme für einen NodePort- oder LoadBalancer-Dienst auftreten. Beispielsweise können zeitweilige TLS-Handshake- oder Verbindungsreset-Fehler auftreten. Dieses Problem wurde für Clusterversionen 1.14.1 und höher behoben.
Prüfen Sie die iptables-Weiterleitungsregeln auf Knoten, auf denen der Backend-Pod für den betroffenen Dienst ausgeführt wird, um festzustellen, ob dieses Problem Sie betrifft:
sudoiptables-LFORWARD
Wenn Sie die Regel KUBE-FORWARD vor der Regel CILIUM_FORWARD in iptables sehen, sind Sie möglicherweise von diesem Problem betroffen. Die folgende Beispielausgabe zeigt einen Knoten, in dem das Problem auftritt:
Chain FORWARD (policy ACCEPT)
target prot opt source destination
KUBE-FORWARD all -- anywhere anywhere /* kubernetes forwarding rules */
KUBE-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes service portals */
KUBE-EXTERNAL-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes externally-visible service portals */
CILIUM_FORWARD all -- anywhere anywhere /* cilium-feeder: CILIUM_FORWARD */
Workaround:
Starten Sie den anetd-Pod auf dem falsch konfigurierten Knoten neu. Nachdem Sie den anetd-Pod neu gestartet haben, sollte die Weiterleitungsregel in iptables richtig konfiguriert sein.
Die folgende Beispielausgabe zeigt, dass die Regel CILIUM_FORWARD jetzt korrekt vor der Regel KUBE-FORWARD konfiguriert ist:
Chain FORWARD (policy ACCEPT)
target prot opt source destination
CILIUM_FORWARD all -- anywhere anywhere /* cilium-feeder: CILIUM_FORWARD */
KUBE-FORWARD all -- anywhere anywhere /* kubernetes forwarding rules */
KUBE-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes service portals */
KUBE-EXTERNAL-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes externally-visible service portals */
Upgrades und Updates
1.9, 1.10
In der Vorschaufunktion werden die ursprünglichen Berechtigungs- und Inhaberinformationen nicht beibehalten.
Bei der Vorschaufunktion von Clustern der Version 1.9.x mit bmctl 1.9.x bleiben die ursprünglichen Berechtigungs- und Inhaberinformationen nicht erhalten. Wenn Sie prüfen möchten, ob Sie von dieser Funktion betroffen sind, extrahieren Sie die gesicherte Datei mit dem folgenden Befehl:
tar-xzvfBACKUP_FILE
Problemumgehung
Prüfen Sie, ob metadata.json vorhanden ist und ob bmctlVersion 1.9.x ist. Wenn metadata.json nicht vorhanden ist, führen Sie ein Upgrade auf einen 1.10.x-Cluster durch und verwenden Sie bmctl 1.10.x für die Sicherung/Wiederherstellung.
Upgrades und Erstellungen
1.14.2
clientconfig-operator hängt mit CreateContainerConfigError im Status „Ausstehend“ fest
Wenn Sie ein Upgrade auf einen Cluster der Version 1.14.2 mit einer OIDC-/LDAP-Konfiguration durchgeführt oder einen solchen Cluster erstellt haben, kann es sein, dass der clientconfig-operator-Pod im Status „Ausstehend“ hängen bleibt. Bei diesem Problem gibt es zwei clientconfig-operator-Pods, von denen sich einer im Status „Wird ausgeführt“ und der andere im Status „Ausstehend“ befindet.
Dieses Problem betrifft nur Cluster der Version 1.14.2. Ältere Clusterversionen wie 1.14.0 und 1.14.1 sind nicht betroffen. Dieses Problem wurde in Version 1.14.3 und allen nachfolgenden Releases behoben, einschließlich Version 1.15.0 und höher.
Workaround:
Als Workaround können Sie die clientconfig-operator-Bereitstellung patchen, um zusätzlichen Sicherheitskontext hinzuzufügen und sicherzustellen, dass die Bereitstellung bereit ist.
Verwenden Sie den folgenden Befehl, um clientconfig-operator im Zielcluster zu patchen:
CLUSTER_KUBECONFIG: Der Pfad der kubeconfig-Datei für den Zielcluster.
Vorgang
1.11, 1.12, 1.13, 1.14, 1.15
Rotation der Zertifizierungsstelle schlägt für Cluster ohne gebündeltes Load-Balancing fehl
Bei Clustern ohne gebündeltes Load Balancing (spec.loadBalancer.mode auf manual gesetzt) kann der Befehl bmctl update credentials certificate-authorities rotate nicht mehr reagieren und mit dem folgenden Fehler fehlschlagen: x509: certificate signed by unknown authority.
Wenn Sie von diesem Problem betroffen sind, gibt der Befehl bmctl möglicherweise die folgende Meldung aus, bevor er nicht mehr reagiert:
SigningCAcompletedin3/0control-planenodes
In diesem Fall schlägt der Befehl schließlich fehl. Das Log für das Rotieren der Zertifizierungsstelle für einen Cluster mit drei Steuerungsebenen kann Einträge wie die folgenden enthalten:
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Google-Support.
Installation, Netzwerk
1.11, 1.12, 1.13, 1.14.0-1.14.1
ipam-controller-manager Crashloops in Dual-Stack-Clustern
Wenn Sie einen Dual-Stack-Cluster (einen Cluster mit sowohl IPv4- als auch IPv6-Adressen) bereitstellen, kann es sein, dass die ipam-controller-manager-Pods in einer Crashloop enden. Dieses Verhalten führt dazu, dass die Knoten zwischen den Status Ready und NotReady wechseln, und kann dazu führen, dass die Clusterinstallation fehlschlägt. Dieses Problem kann auftreten, wenn der API-Server stark ausgelastet ist.
Um festzustellen, ob dieses Problem bei Ihnen auftritt, prüfen Sie, ob die ipam-controller-manager-Pods mit CrashLoopBackOff-Fehlern fehlschlagen:
1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 und 1.14
etcd-Monitoringmangel
Bei Clustern, auf denen etcd Version 3.4.13 oder früher ausgeführt wird, kann es zu einem Monitoringmangel und nicht operativer Ressourcenüberwachung kommen, was zu den folgenden Problemen führen kann:
Pod-Planung wird unterbrochen
Knoten können sich nicht registrieren
kubelet beobachtet keine Pod-Änderungen
Diese Probleme können dazu führen, dass der Cluster nicht mehr funktioniert.
Dieses Problem wurde in den Google Distributed Cloud-Versionen 1.12.9, 1.13.6,
1.14.3 und nachfolgenden Releases behoben. In diesen neueren Releases wird die etcd-Version 3.4.21 verwendet. Alle früheren Versionen von Google Distributed Cloud sind von
diesem Problem betroffen.
Problemumgehung
Wenn Sie kein sofortiges Upgrade durchführen können, verringern Sie
einen Clusterfehler durch
Reduzieren der Knotenanzahl im Cluster. Entfernen Sie Knoten bis der etcd_network_client_grpc_sent_bytes_total-Messwert unter 300 Mbit/s liegt.
So rufen Sie diesen Messwert im Metrics Explorer auf:
Rufen Sie in der Google Cloud Console den Metrics Explorer auf:
Maximieren Sie Messwert auswählen und geben Sie Kubernetes Container in der Filterleiste ein und wählen Sie dann in den Untermenüs den Messwert aus:
Wählen Sie im Menü Aktive Ressourcen die Option Kubernetes-Container aus.
Wählen Sie im Menü Aktive Messwertkategorien die Option Anthos aus.
Wählen Sie im Menü Aktive Messwerte die Option etcd_network_client_grpc_sent_bytes_total aus.
Klicken Sie auf Anwenden.
Netzwerk
1.11.6, 1.12.3
Status „Fehler“ des SR-IOV-Operators im Modus vfio-pci
Das SriovNetworkNodeState-Objekt syncStatus kann den Wert „Failed“ (Fehler) für einen konfigurierten Knoten melden. Führen Sie den folgenden Befehl aus, um den Status eines Knotens aufzurufen und festzustellen, ob das Problem Sie betrifft:
Ersetzen Sie NODE_NAME durch den Namen des Knotens, den Sie prüfen möchten.
Workaround:
Wenn der Status des SriovNetworkNodeState-Objekts „Fehler“ lautet, führen Sie ein Upgrade Ihres Clusters auf Version 1.11.7 oder höher oder Version 1.12.4 oder höher durch.
Upgrades und Updates
1.10, 1.11, 1.12, 1.13, 1.14.0, 1.14.1
Einige Worker-Knoten sind nach dem Upgrade nicht im Status „Bereit“
Nach Abschluss des Upgrades kann es vorkommen, dass für einige Worker-Knoten die Bedingung „Bereit“ auf false gesetzt ist. In der Knotenressource wird neben der Bedingung „Bereit“ ein Fehler angezeigt, der dem folgenden Beispiel ähnelt:
container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized
Wenn Sie sich auf der Maschine anmelden, auf der der Vorgang angehalten wurde, ist die CNI-Konfiguration auf der Maschine leer:
sudols/etc/cni/net.d/
Problemumgehung
Starten Sie den anetd-Pod des Knotens neu, indem Sie ihn löschen.
Upgrades und Updates, Sicherheit
1.10
Mehrere Zertifikatsrotationen von cert-manager führen zu Inkonsistenzen
Nach mehreren manuellen oder automatischen Zertifikatsrotationen wird der Webhook-Pod, z. B. anthos-cluster-operator, nicht mit den neuen Zertifikaten aktualisiert, die von cert-manager ausgestellt wurden. Jede Aktualisierung der benutzerdefinierten Clusterressource schlägt fehl und führt zu einem Fehler wie dem folgenden:
Internal error occurred: failed calling
webhook "vcluster.kb.io": failed to call webhook: Post "https://webhook-service.kube-system.svc:443/validate-baremetal-cluster-gke-io-v1-cluster?timeout=10s": x509: certificate signed by unknown authority (possibly because of "x509:
invalid signature: parent certificate cannot sign this kind of certificate"
while trying to verify candidate authority certificate
"webhook-service.kube-system.svc")
Dieses Problem kann in den folgenden Fällen auftreten:
Wenn Sie zwei manuelle Zertifikatsrotationen, die von cert-manager ausgestellt wurden, auf einem Cluster durchgeführt haben, der älter als 180 Tage ist, und den anthos-cluster-operator noch nie neu gestartet haben,
Wenn Sie auf einem Cluster, der älter als 90 Tage ist, manuelle cert-manager-Zertifikatsrotationen durchgeführt und die anthos-cluster-operator nie neu gestartet haben.
Problemumgehung
Starten Sie den Pod neu, indem Sie anthos-cluster-operator beenden.
Upgrades und Updates
1.14.0
Veraltete Lifecycle Controller Deployer-Pods, die während des Nutzercluster-Upgrades erstellt wurden
In Administratorclustern der Version 1.14.0 werden bei Upgrades von Nutzerclustern möglicherweise ein oder mehrere veraltete Lifecycle Controller Deployer-Pods erstellt.
Dieses Problem betrifft Nutzercluster, die ursprünglich mit Versionen vor 1.12 erstellt wurden. Die unbeabsichtigt erstellten Pods beeinträchtigen keine Upgradevorgänge, befinden sich aber möglicherweise in einem unerwarteten Status. Wir empfehlen, die veralteten Pods zu entfernen.
Dieses Problem wurde in Version 1.14.1 behoben.
Workaround:
So entfernen Sie die veralteten Lifecycle Controller-Bereitstellungs-Pods:
Der Status von BGPSession ändert sich ständig aufgrund der großen Anzahl eingehender Routen.
Google Distributed Cloud Advanced Networking kann BGP-Sitzungen nicht richtig verwalten, wenn externe Peers eine große Anzahl von Routen (etwa 100 oder mehr) bewerben. Bei einer großen Anzahl eingehender Routen benötigt der knotenlokale BGP-Controller zu lange, um BGP-Sitzungen abzugleichen, und kann den Status nicht aktualisieren. Da keine Statusaktualisierungen oder Systemdiagnosen erfolgen, wird die Sitzung als veraltet gelöscht.
Unerwünschtes Verhalten bei BGP-Sitzungen, das auf ein Problem hinweisen kann, umfasst Folgendes:
Kontinuierliches Löschen und Neuerstellen von bgpsession.
bgpsession.status.state wird nie zu
Established
Routen, die nicht beworben werden oder wiederholt beworben und zurückgezogen werden.
Probleme mit dem BGP-Load-Balancing können sich durch Verbindungsprobleme mit LoadBalancer-Diensten bemerkbar machen.
Das BGP-Problem FlatIP kann sich durch Verbindungsprobleme mit Pods bemerkbar machen.
Wenn Sie feststellen möchten, ob Ihre BGP-Probleme dadurch verursacht werden, dass die Remote-Peers zu viele Routen ankündigen, verwenden Sie die folgenden Befehle, um die zugehörigen Status und Ausgaben zu prüfen:
Verwenden Sie kubectl get bgpsessions für den betroffenen Cluster.
In der Ausgabe wird bgpsessions mit dem Status „Not Established“ (Nicht eingerichtet) angezeigt und die Zeit des letzten Berichts zählt kontinuierlich bis etwa 10–12 Sekunden hoch, bevor sie anscheinend auf null zurückgesetzt wird.
Die Ausgabe von kubectl get bgpsessions zeigt, dass die betroffenen Sitzungen wiederholt neu erstellt werden:
Logmeldungen weisen darauf hin, dass veraltete BGP-Sitzungen gelöscht werden:
kubectllogsang-controller-manager-POD_NUMBER
Ersetzen Sie POD_NUMBER durch den Leader-Pod in Ihrem Cluster.
Workaround:
Reduzieren oder eliminieren Sie die Anzahl der Routen, die vom Remote-Peer mit einer Exportrichtlinie für den Cluster beworben werden.
In Clusterversionen 1.14.2 und höher können Sie auch das Feature deaktivieren, mit dem empfangene Routen verarbeitet werden, indem Sie ein AddOnConfiguration verwenden. Fügen Sie das Argument --disable-received-routes dem Container bgpd des Daemonsets ang-daemon hinzu.
Netzwerk
1.14, 1.15, 1.16, 1.28
Zeitüberschreitungen für Anwendungen aufgrund von Einfügungsfehlern in der Conntrack-Tabelle
Bei Clustern, die auf einem Ubuntu-Betriebssystem mit Kernel 5.15 oder höher ausgeführt werden, kann es zu Fehlern beim Einfügen der Tabelle für das Verbindungs-Tracking (conntrack) von Netfilter kommen. Einfügungsfehler können auch dann auftreten, wenn in der Conntrack-Tabelle Platz für neue Einträge ist. Die Fehler werden durch Änderungen am Kernel 5.15 und höher verursacht, die das Einfügen von Tabellen basierend auf der Kettelänge einschränken.
Ob Sie von diesem Problem betroffen sind, können Sie mit folgendem Befehl in den Systemstatistiken des Kernel-Verbindungstrackings überprüfen:
Wenn ein chaintoolong-Wert in der Antwort eine Zahl ungleich null ist, sind Sie von diesem Problem betroffen.
Problemumgehung
Als kurzfristige Maßnahme können Sie die Größe der Netfilter-Hashtabelle (nf_conntrack_buckets) und der Netfilter-Verbindungs-Tracking-Tabelle (nf_conntrack_max) erhöhen. Verwenden Sie die folgenden Befehle auf jedem Clusterknoten, um die Größe der Tabellen zu erhöhen:
Ersetzen Sie TABLE_SIZE durch die neue Größe in Byte. Der Standardwert für die Tabellengröße ist 262144. Wir empfehlen einen Wert, der dem 65.536-fachen der Anzahl der Kerne auf dem Knoten entspricht. Wenn Ihr Knoten beispielsweise acht Kerne hat, legen Sie die Tabellengröße auf 524288 fest.
Cluster-Sicherungen mit bmctl können für einige Versionen nicht wiederhergestellt werden
Wir empfehlen, Ihre Cluster vor dem Upgrade zu sichern, damit Sie die vorherige Version wiederherstellen können, falls das Upgrade fehlschlägt.
Ein Problem mit dem Befehl bmctl restore cluster führt dazu, dass Sicherungen von Clustern mit den angegebenen Versionen nicht wiederhergestellt werden können. Dieses Problem tritt nur bei Upgrades auf, bei denen Sie ein Backup einer früheren Version wiederherstellen.
Wenn Ihr Cluster betroffen ist, enthält das bmctl restore cluster-Log den folgenden Fehler:
Error: failed to extract image paths from profile: anthos version VERSION not supported
Workaround:
Bis dieses Problem behoben ist, empfehlen wir, die Anleitung unter Cluster sichern und wiederherstellen zu verwenden, um Ihre Cluster manuell zu sichern und bei Bedarf manuell wiederherzustellen.
Netzwerk
1.10, 1.11, 1.12, 1.13, 1.14.0-1.14.2
NetworkGatewayGroup stürzt ab, wenn die Schnittstelle keine IP-Adresse hat.
Mit NetworkGatewayGroup können keine Daemons für Knoten erstellt werden, die nicht sowohl IPv4- als auch IPv6-Schnittstellen haben. Dadurch schlagen Funktionen wie BGP LB und EgressNAT fehl. Wenn Sie die Logs des fehlerhaften ang-node-Pods im Namespace kube-system prüfen, werden Fehler angezeigt, die dem folgenden Beispiel ähneln, wenn eine IPv6-Adresse fehlt:
ANGd.Setup Failed to create ANG daemon {"nodeName": "bm-node-1", "error":
"creating NDP client failed: ndp: address \"linklocal\" not found on interface \"ens192\""}
Im vorherigen Beispiel gibt es keine IPv6-Adresse auf der ens192-Schnittstelle. Ähnliche ARP-Fehler werden angezeigt, wenn dem Knoten eine IPv4-Adresse fehlt.
NetworkGatewayGroup versucht, eine ARP- und eine NDP-Verbindung zur Link-Local-IP-Adresse herzustellen. Wenn die IP-Adresse nicht vorhanden ist (IPv4 für ARP, IPv6 für NDP), schlägt die Verbindung fehl und der Daemon wird nicht fortgesetzt.
Dieses Problem wurde in Version 1.14.3 behoben.
Workaround:
Stellen Sie über SSH eine Verbindung zum Knoten her und fügen Sie dem Link, der die Knoten-IP enthält, eine IPv4- oder IPv6-Adresse hinzu. Im vorherigen Beispiel-Logeintrag war diese Schnittstelle ens192:
ipaddressadddevINTERFACEscopelinkADDRESS
Ersetzen Sie Folgendes:
INTERFACE: Die Schnittstelle für Ihren Knoten, z. B. ens192.
ADDRESS: Die IP-Adresse und Subnetzmaske, die auf die Schnittstelle angewendet werden sollen.
Zurücksetzen/Löschen
1.10, 1.11, 1.12, 1.13.0-1.13.2
anthos-cluster-operator-Absturzschleife beim Entfernen eines Knotens der Steuerungsebene
Wenn Sie versuchen, einen Knoten der Steuerungsebene zu entfernen, indem Sie die IP-Adresse aus Cluster.Spec entfernen, gerät anthos-cluster-operator in eine Absturzschleife, die alle anderen Vorgänge blockiert.
Workaround:
Das Problem wurde in den Versionen 1.13.3 und 1.14.0 und höher behoben. Alle anderen Versionen sind betroffen. Upgrade auf eine der korrigierten Versionen durchführen
Führen Sie als Workaround den folgenden Befehl aus:
IP_ADDRESS: Die IP-Adresse des Knotens, der sich in einer Absturzschleife befindet.
CLUSTER_NAMESPACE: Der Cluster-Namespace.
Installation
1.13.1, 1.13.2 und 1.13.3
kubeadm join schlägt in großen Clustern aufgrund von Token-Abweichungen fehl
Wenn Sie Cluster mit einer großen Anzahl von Knoten installieren, wird möglicherweise eine kubeadmin join-Fehlermeldung wie im folgenden Beispiel angezeigt:
TASK [kubeadm : kubeadm join --config /dev/stdin --ignore-preflight-errors=all] ***
fatal: [10.200.0.138]: FAILED! => {"changed": true, "cmd": "kubeadm join
--config /dev/stdin --ignore-preflight-errors=all", "delta": "0:05:00.140669", "end": "2022-11-01 21:53:15.195648", "msg": "non-zero return code", "rc": 1,
"start": "2022-11-01 21:48:15.054979", "stderr": "W1101 21:48:15.082440 99570 initconfiguration.go:119]
Usage of CRI endpoints without URL scheme is deprecated and can cause kubelet errors in the future.
Automatically prepending scheme \"unix\" to the \"criSocket\" with value \"/run/containerd/containerd.sock\". Please update your configuration!\nerror
execution phase preflight: couldn't validate the identity of the API Server: could not find a JWS signature in the cluster-info ConfigMap for token ID \"yjcik0\"\n
To see the stack trace of this error execute with --v=5 or higher", "stderr_lines":
["W1101 21:48:15.082440 99570 initconfiguration.go:119] Usage of CRI endpoints without URL scheme is deprecated and can cause kubelet errors in the future.
Automatically prepending scheme \"unix\" to the \"criSocket\" with value \"/run/containerd/containerd.sock\".
Please update your configuration!", "error execution phase preflight: couldn't validate the identity of the API Server:
could not find a JWS signature in the cluster-info ConfigMap for token ID \"yjcik0\"",
"To see the stack trace of this error execute with --v=5 or higher"], "stdout": "[preflight]
Running pre-flight checks", "stdout_lines": ["[preflight] Running pre-flight checks"]}
Workaround:
Dieses Problem wurde in Google Distributed Cloud-Version 1.13.4 und höher behoben.
Wenn Sie eine betroffene Version verwenden müssen, erstellen Sie zuerst einen Cluster mit weniger als 20 Knoten und passen Sie dann die Größe des Clusters an, um nach Abschluss der Installation zusätzliche Knoten hinzuzufügen.
Logging und Monitoring
1.10, 1.11, 1.12, 1.13.0
Niedriges CPU-Limit für metrics-server in Edge-Clustern
In Google Distributed Cloud Edge-Clustern können niedrige CPU-Limits für metrics-server zu häufigen Neustarts von metrics-server führen. Das horizontale Pod-Autoscaling (HPA) funktioniert nicht, da metrics-server fehlerhaft ist.
Wenn das metrics-server-CPU-Limit kleiner als 40m ist, kann dies Auswirkungen auf Ihre Cluster haben. Die metrics-server-CPU-Grenzwerte finden Sie in einer der folgenden Dateien:
Entfernen Sie die Zeile --config-dir=/etc/config und erhöhen Sie die CPU-Limits, wie im folgenden Beispiel gezeigt:
[...]
- command:
- /pod_nanny
# - --config-dir=/etc/config # <--- Remove this line
- --container=metrics-server
- --cpu=50m # <--- Increase CPU, such as to 50m
- --extra-cpu=0.5m
- --memory=35Mi
- --extra-memory=4Mi
- --threshold=5
- --deployment=metrics-server
- --poll-period=30000
- --estimator=exponential
- --scale-down-delay=24h
- --minClusterSize=5
- --use-metrics=true
[...]
Speichern Sie die metrics-server-Datei und schließen Sie sie, um die Änderungen zu übernehmen.
Netzwerk
1.14, 1.15, 1.16
Direkte NodePort-Verbindung zu hostNetwork-Pod funktioniert nicht
Die Verbindung zu einem Pod, der mit hostNetwork über einen NodePort-Dienst aktiviert ist, schlägt fehl, wenn sich der Backend-Pod auf demselben Knoten wie der Ziel-NodePort befindet. Dieses Problem betrifft LoadBalancer-Dienste, wenn sie mit Pods mit hostNetwork verwendet werden. Bei mehreren Back-Ends kann es zu sporadischen Verbindungsfehlern kommen.
Dieses Problem wird durch einen Fehler im eBPF-Programm verursacht.
Workaround:
Wenn Sie einen NodePort-Dienst verwenden, richten Sie ihn nicht auf den Knoten aus, auf dem einer der Backend-Pods ausgeführt wird. Wenn Sie den LoadBalancer-Dienst verwenden, achten Sie darauf, dass die Pods mit hostNetwork nicht auf LoadBalancer-Knoten ausgeführt werden.
Upgrades und Updates
1.12.3, 1.13.0
Administratorcluster der Version 1.13.0 können keine Nutzercluster der Version 1.12.3 verwalten
Administratorcluster, auf denen Version 1.13.0 ausgeführt wird, können keine Nutzercluster verwalten, auf denen Version 1.12.3 ausgeführt wird. Vorgänge für einen Nutzercluster der Version 1.12.3 schlagen fehl.
Workaround:
Führen Sie ein Upgrade Ihres Administratorclusters auf Version 1.13.1 oder ein Upgrade des Nutzerclusters auf dieselbe Version wie den Administratorcluster durch.
Upgrades und Updates
1.12
Das Upgrade auf 1.13.x ist für Administratorcluster mit Worker-Knotenpools blockiert
Administratorcluster ab Version 1.13.0 dürfen keine Worker-Knotenpools enthalten.
Upgrades auf Version 1.13.0 oder höher für Administratorcluster mit Worker-Knotenpools sind blockiert. Wenn das Upgrade des Administratorclusters nicht fortgesetzt wird, können Sie prüfen, ob Worker-Knotenpools die Ursache sind. Suchen Sie dazu in der Datei upgrade-cluster.log im Ordner bmctl-workspace nach dem folgenden Fehler:
Operation failed, retrying with backoff. Cause: error creating "baremetal.cluster.gke.io/v1, Kind=NodePool" cluster-test-cluster-2023-06-06-140654/np1: admission webhook "vnodepool.kb.io" denied the request: Adding worker nodepool to Admin cluster is disallowed.
Workaround:
Verschieben Sie vor dem Upgrade alle Worker-Knotenpools in Nutzercluster. Eine Anleitung zum Hinzufügen und Entfernen von Knotenpools finden Sie unter Knotenpools in einem Cluster verwalten.
Upgrades und Updates
1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.28
Fehler beim Aktualisieren von Ressourcen mit kubectl apply
Wenn Sie vorhandene Ressourcen wie die benutzerdefinierten Ressourcen ClientConfig oder Stackdriver mit kubectl apply aktualisieren, gibt der Controller möglicherweise einen Fehler zurück oder macht Ihre Eingaben und geplanten Änderungen rückgängig.
Sie können beispielsweise versuchen, die benutzerdefinierte Stackdriver-Ressource so zu bearbeiten, dass Sie zuerst die Ressource abrufen und dann eine aktualisierte Version anwenden:
Aktivieren Sie Funktionen oder aktualisieren Sie die Konfiguration in der YAML-Datei.
Wenden Sie die aktualisierte YAML-Datei wieder an:
kubectlapply-fstackdriver.yaml
Der letzte Schritt für kubectl apply ist der, bei dem möglicherweise Probleme auftreten.
Workaround:
Verwenden Sie kubectl apply nicht, um Änderungen an vorhandenen Ressourcen vorzunehmen. Verwenden Sie stattdessen kubectl edit oder kubectl patch, wie in den folgenden Beispielen gezeigt:
Bearbeiten Sie die benutzerdefinierte Stackdriver-Ressource:
kubectleditstackdriver-nkube-systemstackdriver
Aktivieren Sie Funktionen oder aktualisieren Sie die Konfiguration in der YAML-Datei.
Beschädigte Backlog-Chunks verursachen eine stackdriver-log-forwarder-Absturzschleife
Der stackdriver-log-forwarder stürzt ab, wenn er versucht, einen beschädigten Backlog-Abschnitt zu verarbeiten. Die folgenden Beispielfehler werden in den Containerlogs angezeigt:
[2022/09/16 02:05:01] [error] [storage] format check failed: tail.1/1-1659339894.252926599.flb
[2022/09/16 02:05:01] [error] [engine] could not segregate backlog chunks
Wenn dieser Crashloop auftritt, können Sie keine Logs in Cloud Logging sehen.
Workaround:
Führen Sie folgende Schritte aus, um diese Fehler zu beheben:
Identifizieren Sie die beschädigten Backlog-Chunks. Hier sind einige Beispiele für Fehlermeldungen:
[2022/09/16 02:05:01] [error] [storage] format check failed: tail.1/1-1659339894.252926599.flb
[2022/09/16 02:05:01] [error] [engine] could not segregate backlog chunks
In diesem Beispiel ist die Datei tail.1/1-1659339894.252926599.flb, die in var/log/fluent-bit-buffers/tail.1/ gespeichert ist, die Ursache des Problems. Alle *.flb-Dateien, bei denen die Formatprüfung fehlgeschlagen ist, müssen entfernt werden.
Beenden Sie die aktiven Pods für stackdriver-log-forwarder:
Ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei des Nutzerclusters.
Prüfen Sie, ob die stackdriver-log-forwarder-Pods gelöscht wurden, bevor Sie mit dem nächsten Schritt fortfahren.
Stellen Sie über SSH eine Verbindung zum Knoten her, auf dem stackdriver-log-forwarder ausgeführt wird.
Löschen Sie auf dem Knoten alle beschädigten *.flb-Dateien in var/log/fluent-bit-buffers/tail.1/.
Wenn es zu viele beschädigte Dateien gibt und Sie ein Skript verwenden möchten, um alle Backlog-Chunks zu bereinigen, verwenden Sie die folgenden Skripts:
Stellen Sie ein DaemonSet bereit, um alle fehlerhaften Daten in Puffern in fluent-bit zu bereinigen:
Wenn Sie Dataplane V2 (anetd) in Clustern neu starten, kann es passieren, dass vorhandene VMs keine Verbindung zum Nicht-Pod-Netzwerk herstellen können.
In Clustern mit mehreren NICs kann das Neustarten von Dataplane V2 (anetd) dazu führen, dass virtuelle Maschinen keine Verbindung zu Netzwerken herstellen können. In den anetd-Pod-Logs wird möglicherweise ein Fehler wie der folgende angezeigt:
could not find an allocator to allocate the IP of the multi-nic endpoint
Workaround:
Als schnelle Lösung können Sie die VM neu starten. Um ein erneutes Auftreten des Problems zu vermeiden, aktualisieren Sie Ihren Cluster auf Version 1.14.1 oder höher.
Vorgang
1.13, 1.14.0, 1.14.1
gke-metrics-agent hat kein Speicherlimit für Edge-Profilcluster
Je nach Arbeitslast des Clusters kann die gke-metrics-agent mehr als 4.608 MiB Arbeitsspeicher verwenden. Dieses Problem betrifft nur Google Distributed Cloud for Bare Metal-Cluster mit Edge-Profil. Standardprofilcluster sind davon nicht betroffen.
Workaround:
Aktualisieren Sie Ihren Cluster auf Version 1.14.2 oder höher.
Installation
1.12, 1.13
Clustererstellung schlägt möglicherweise aufgrund von Race-Bedingungen fehl
Wenn Sie Cluster mit kubectl erstellen, kann es aufgrund von Race-Bedingungen vorkommen, dass die Preflight-Prüfung nie abgeschlossen wird. Daher kann die Clustererstellung in bestimmten Fällen fehlschlagen.
Der Preflight-Check-Abgleicher erstellt ein SecretForwarder, um das Standard-Secret ssh-key in den Ziel-Namespace zu kopieren.
In der Regel werden bei der Preflight-Prüfung die Inhaberreferenzen verwendet und nach Abschluss von SecretForwarder abgeglichen. In seltenen Fällen kann es jedoch vorkommen, dass die Inhaberreferenzen von SecretForwarder die Referenz zur Preflight-Prüfung verlieren, wodurch die Preflight-Prüfung hängen bleibt. Daher schlägt die Clustererstellung fehl. Wenn Sie die Abstimmung für die controllergesteuerte Preflight-Prüfung fortsetzen möchten, löschen Sie den Clusteroperator-Pod oder die Preflight-Prüfungsressource. Wenn Sie die Preflight-Prüfungsressource löschen, wird eine weitere erstellt und die Abstimmung wird fortgesetzt. Alternativ können Sie Ihre vorhandenen Cluster (die mit einer früheren Version erstellt wurden) auf eine Version mit Fehlerkorrektur aktualisieren.
Netzwerk
1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15
Reservierte IP-Adressen werden bei Verwendung des Aufenthaltsort-Plug-ins mit der Multi-NIC-Funktion nicht freigegeben
Wenn Sie in der Funktion mit mehreren NICs das CNI-Whereabouts-Plug-in verwenden und mit dem CNI-DEL-Vorgang eine Netzwerkschnittstelle für einen Pod löschen, werden einige reservierte IP-Adressen möglicherweise nicht richtig freigegeben. Das passiert, wenn der CNI-Vorgang DEL unterbrochen wird.
Mit dem folgenden Befehl können Sie die nicht verwendeten IP-Adressreservierungen der Pods prüfen:
kubectlgetippools-A--kubeconfigKUBECONFIG_PATH
Behelfslösung:
Löschen Sie die IP-Adressen (ippools), die nicht verwendet werden, manuell.
Installation
1.10, 1.11.0, 1.11.1, 1.11.2
Node Problem Detector schlägt in Version 1.10.4 des Nutzerclusters fehl
Der Node Problem Detector kann in Nutzerclustern der Version 1.10.x fehlschlagen, wenn Administratorcluster der Version 1.11.0, 1.11.1 oder 1.11.2 Nutzercluster der Version 1.10.x verwalten. Wenn der Node Problem Detector fehlschlägt, wird das Log mit der folgenden Fehlermeldung aktualisiert:
Aktualisieren Sie den Administratorcluster auf Version 1.11.3, um das Problem zu beheben.
Vorgang
1,14
1.14 Inselmodus-IPv4-Clusterknoten haben eine Pod-CIDR-Maskengröße von 24
In Version 1.14 wird die Einstellung maxPodsPerNode für Cluster im Inselmodus nicht berücksichtigt. Den Knoten wird daher eine Pod-CIDR-Maskengröße von 24 (256 IP-Adressen) zugewiesen. Dies kann dazu führen, dass dem Cluster früher als erwartet die Pod-IP-Adressen ausgehen. Wenn Ihr Cluster beispielsweise eine Pod-CIDR-Maskengröße von 22 hat, wird jedem Knoten eine Pod-CIDR-Maske von 24 zugewiesen und der Cluster kann nur bis zu 4 Knoten unterstützen. In Ihrem Cluster kann es auch zu Netzwerkinstabilität kommen, wenn in einem Zeitraum mit hoher Pod-Churn maxPodsPerNode auf 129 oder höher festgelegt ist und nicht genügend Overhead im Pod-CIDR für jeden Knoten vorhanden ist.
Wenn Ihr Cluster betroffen ist, meldet der anetd-Pod den folgenden Fehler, wenn Sie dem Cluster einen neuen Knoten hinzufügen und keine podCIDR verfügbar ist:
error="required IPv4 PodCIDR not available"
Problemumgehung
So beheben Sie das Problem:
Führen Sie ein Upgrade auf Version 1.14.1 oder höher durch.
Entfernen Sie die Worker-Knoten und fügen Sie sie wieder hinzu.
Entfernen Sie die Knoten der Steuerungsebene und fügen Sie sie wieder hinzu. Am besten einzeln, um Ausfallzeiten des Clusters zu vermeiden.
Upgrades und Updates
1.14.0, 1.14.1
Fehler beim Rollback des Clusterupgrades
Ein Upgrade-Rollback kann für Cluster mit Version 1.14.0 oder 1.14.1 fehlschlagen.
Wenn Sie ein Upgrade eines Clusters von 1.14.0 auf 1.14.1 durchführen und dann versuchen, mit dem Befehl bmctl restore cluster ein Rollback auf 1.14.0 durchzuführen, wird möglicherweise ein Fehler wie im folgenden Beispiel zurückgegeben:
Löschen Sie alle healthchecks.baremetal.cluster.gke.io-Ressourcen im Cluster-Namespace und führen Sie den Befehl bmctl restore
cluster noch einmal aus:
Alle healthchecks.baremetal.cluster.gke.io-Ressourcen auflisten:
Ersetzen Sie HEALTHCHECK_RESOURCE_NAME durch den Namen der Healthcheck-Ressourcen.
Führen Sie den Befehl bmctl restore cluster noch einmal aus.
Netzwerk
1.12.0
Die externe IP-Adresse des Diensts funktioniert nicht im Flat-Modus
In einem Cluster, in dem flatIPv4 auf true festgelegt ist, sind Dienste vom Typ LoadBalancer nicht über ihre externen IP-Adressen zugänglich.
Dieses Problem wurde in Version 1.12.1 behoben.
Workaround:
Legen Sie in der ConfigMap cilium-config für enable-415 den Wert "true" fest und starten Sie dann die anetd-Pods neu.
Upgrades und Updates
1.13.0, 1.14
Direkte Upgrades von 1.13.0 auf 1.14.x werden nie abgeschlossen
Wenn Sie versuchen, ein In-Place-Upgrade von 1.13.0 auf 1.14.x mit bmctl 1.14.0 und dem Flag --use-bootstrap=false durchzuführen, wird das Upgrade nie abgeschlossen.
Ein Fehler mit dem Operator preflight-check führt dazu, dass der Cluster die erforderlichen Prüfungen nie plant. Das bedeutet, dass die Preflight-Prüfung nie abgeschlossen wird.
Workaround:
Führen Sie zuerst ein Upgrade auf Version 1.13.1 durch, bevor Sie ein Upgrade auf Version 1.14.x ausführen. Ein In-Place-Upgrade von 1.13.0 auf 1.13.1 sollte funktionieren. Oder Sie führen ein Upgrade von 1.13.0 auf 1.14.x ohne das Flag --use-bootstrap=false durch.
Upgrades und Updates, Sicherheit
1.13 und 1.14
Bei Clustern, die auf Version 1.14.0 aktualisiert wurden, gehen Master-Taints verloren
Die Knoten der Steuerungsebene erfordern eine von zwei bestimmten Markierungen, um zu verhindern, dass Arbeitslast-Pods auf ihnen geplant werden. Wenn Sie ein Upgrade von Clustern der Version 1.13 auf Version 1.14.0 durchführen, verlieren die Knoten der Steuerungsebene die folgenden erforderlichen Taints:
node-role.kubernetes.io/master:NoSchedule
node-role.kubernetes.io/master:PreferNoSchedule
Dieses Problem führt nicht zu Upgrade-Fehlern, aber Pods, die nicht auf den Knoten der Steuerungsebene ausgeführt werden sollen, können dies tun. Diese Arbeitslast-Pods können die Knoten der Steuerungsebene überlasten und zu einer Instabilität des Clusters führen.
Prüfen, ob Sie betroffen sind
Verwenden Sie den folgenden Befehl, um Knoten der Steuerungsebene zu finden:
Wenn keiner der erforderlichen Taints aufgeführt ist, sind Sie betroffen.
Problemumgehung
Führen Sie die folgenden Schritte für jeden Knoten der Steuerungsebene Ihres betroffenen Clusters der Version 1.14.0 aus, um die ordnungsgemäße Funktion wiederherzustellen. Diese Schritte gelten für die node-role.kubernetes.io/master:NoSchedule-Taint und die zugehörigen Pods. Wenn die Knoten der Steuerungsebene das PreferNoSchedule-Taint verwenden sollen, passen Sie die Schritte entsprechend an.
Erstellen von VMs schlägt zeitweise mit Uploadfehlern fehl
Das Erstellen einer neuen VM mit dem Befehl kubectl virt create vm schlägt während des Image-Uploads nur selten fehl. Dieses Problem tritt sowohl bei Linux- als auch bei Windows-VMs auf. Der Fehler sieht in etwa so aus:
Führen Sie den Befehl kubectl virt create vm noch einmal aus, um die VM zu erstellen.
Upgrades und Updates, Logging und Monitoring
1.11
Komponenten der verwalteten Sammlung in 1.11-Clustern werden bei Upgrades auf 1.12 nicht beibehalten
Komponenten für die verwaltete Erfassung sind Teil von Managed Service for Prometheus.
Wenn Sie verwaltete Erfassung-Komponenten manuell im gmp-system-Namespace Ihrer Version 1.11-Cluster bereitgestellt haben, werden die zugehörigen Ressourcen nicht beibehalten, wenn Sie auf Version 1.12 aktualisieren.
Ab Version 1.12.0 werden Managed Service for Prometheus-Komponenten in Clustern im Namespace gmp-system und zugehörige benutzerdefinierte Ressourcendefinitionen von stackdriver-operator mit dem Feld enableGMPForApplications verwaltet. Das Feld enableGMPForApplications hat standardmäßig den Wert true. Wenn Sie also Managed Service for Prometheus-Komponenten vor dem Upgrade auf Version 1.12 manuell im Namespace bereitstellen, werden die Ressourcen von stackdriver-operator gelöscht.
Problemumgehung
So behalten Sie manuell verwaltete Sammlungsressourcen bei:
Sichern Sie alle vorhandenen benutzerdefinierten PodMonitoring-Ressourcen.
Stellen Sie die benutzerdefinierten PodMonitoring-Ressourcen in Ihrem aktualisierten Cluster noch einmal bereit.
Upgrades und Updates
1.13
Einige Cluster der Version 1.12 mit der Docker-Containerlaufzeit können nicht auf Version 1.13 aktualisiert werden.
Wenn in einem Cluster der Version 1.12, der die Docker-Containerlaufzeit verwendet, die folgende Annotation fehlt, kann er nicht auf Version 1.13 aktualisiert werden:
Dies tritt am wahrscheinlichsten bei Docker-Clustern der Version 1.12 auf, die von Version 1.11 aktualisiert wurden, da für dieses Upgrade die Annotation nicht erforderlich ist, um die Docker-Containerlaufzeit beizubehalten. In diesem Fall haben Cluster beim Upgrade auf Version 1.13 keine Annotation. Ab Version 1.13 ist containerd die einzige zulässige Containerlaufzeit.
Workaround:
Wenn Sie von diesem Problem betroffen sind, aktualisieren Sie die Clusterressource mit der fehlenden Annotation. Sie können die Anmerkung entweder während des Upgrades oder nach dem Abbrechen und vor dem erneuten Versuch hinzufügen.
Installation
1.11
bmctl wird beendet, bevor die Clustererstellung abgeschlossen ist
Die Clustererstellung kann für Google Distributed Cloud-Version 1.11.0 fehlschlagen (dieses Problem wird in Google Distributed Cloud-Release 1.11.1 behoben). In einigen Fällen wird der Befehl bmctl create cluster vorzeitig beendet und Fehler wie die folgenden in die Logs geschrieben:
Der fehlgeschlagene Vorgang erzeugt Artefakte, der Cluster ist jedoch nicht funktionsfähig. Wenn dieses Problem Sie betrifft, führen Sie die folgenden Schritte aus, um Artefakte zu bereinigen und einen Cluster zu erstellen:
Schritte zur Problemumgehung ansehen
Führen Sie den folgenden Befehl aus, um Clusterartefakte zu löschen und den Knotencomputer zurückzusetzen:
bmctlreset-cUSER_CLUSTER_NAME
Führen Sie den folgenden Befehl aus, um den Vorgang der Clustererstellung zu starten:
Das Flag --keep-bootstrap-cluster ist wichtig, wenn dieser Befehl fehlschlägt.
Wenn der Befehl zur Clustererstellung erfolgreich ist, können Sie die verbleibenden Schritte überspringen. Andernfalls fahren Sie mit der Erstellung fort.
Führen Sie den folgenden Befehl aus, um die Version für den Bootstrap-Cluster abzurufen:
Führen Sie den folgenden Befehl aus, um den Bootstrap-Cluster zu löschen:
bmctlresetbootstrap
Installation, VM Runtime on GDC
1.11, 1.12
Installation meldet Fehler beim Abgleich der VM-Laufzeit
Der Vorgang zur Clustererstellung kann einen Fehler wie den folgenden melden:
I042301:17:20.8956403935589logs.go:82]"msg"="Cluster reconciling:""message"="Internal error occurred: failed calling webhook \"vvmruntime.kb.io\": failed to call webhook: Post \"https://vmruntime-webhook-service.kube-system.svc:443/validate-vm-cluster-gke-io-v1vmruntime?timeout=10s\": dial tcp 10.95.5.151:443: connect: connection refused""name"="xxx""reason"="ReconciliationError"
Problemumgehung
Dieser Fehler ist harmlos und kann ignoriert werden.
Installation
1.10, 1.11, 1.12
Die Clustererstellung schlägt fehl, wenn Multi-NIC, containerd und HTTPS-Proxy verwendet werden.
Die Clustererstellung schlägt fehl, wenn die folgende Kombination von Bedingungen vorliegt:
Der Cluster ist so konfiguriert, dass containerd als Containerlaufzeit verwendet wird (nodeConfig.containerRuntime ist in der Clusterkonfigurationsdatei auf containerd gesetzt), der Standard für Google Distributed Cloud-Version 1.13 und höher.
Der Cluster ist so konfiguriert, dass mehrere Netzwerkschnittstellen mit mehreren NICs für Pods bereitgestellt werden (clusterNetwork.multipleNetworkInterfaces ist in der Cluster-Konfigurationsdatei auf true gesetzt).
Der Cluster ist für die Verwendung eines Proxys konfiguriert (spec.proxy.url wird in der Clusterkonfigurationsdatei angegeben). Obwohl die Clustererstellung fehlschlägt, wird diese Einstellung übernommen, wenn Sie versuchen, einen Cluster zu erstellen. Diese Proxyeinstellung wird möglicherweise als Umgebungsvariable HTTPS_PROXY oder in der Konfiguration containerd (/etc/systemd/system/containerd.service.d/09-proxy.conf) angezeigt.
Problemumgehung
Hängen Sie Dienst-CIDRs (clusterNetwork.services.cidrBlocks) an die Umgebungsvariable NO_PROXY auf allen Knotenmaschinen an.
Installation
1.10, 1.11, 1.12
Fehler bei Systemen mit restriktiver umask-Einstellung
Mit Google Distributed Cloud-Release 1.10.0 wurde eine Funktion für eine Steuerungsebene ohne Root eingeführt, die alle Komponenten der Steuerungsebene als Nicht-Root-Nutzer ausführt. Die Ausführung aller Komponenten als Nicht-Root-Nutzer kann zu Installations- oder Upgradefehlern auf Systemen mit der restriktiveren umask-Einstellung 0077 führen.
Problemumgehung
Setzen Sie die Knoten der Steuerungsebene zurück und ändern Sie die umask-Einstellung in 0022 auf allen Maschinen der Steuerungsebene. Wiederholen Sie die Installation, nachdem die Maschinen aktualisiert wurden.
Alternativ können Sie die Verzeichnis- und Dateiberechtigungen von /etc/kubernetes auf den Maschinen der Steuerungsebene ändern, damit die Installation oder das Upgrade fortgesetzt wird.
/etc/kubernetes und alle zugehörigen Unterverzeichnisse allgemein lesbar machen: chmod o+rx.
Alle Dateien von Nutzer root im Verzeichnis (rekursiv) /etc/kubernetes allgemein lesbar machen (chmod o+r). Private Schlüsseldateien (.key) von diesen Änderungen ausschließen, da sie bereits mit den richtigen Eigentumsrechten und Berechtigungen erstellt wurden.
Kontrollgruppe v2 (cgroup v2) wird in Versionen 1.13 und früher von Google Distributed Cloud nicht unterstützt. In Version 1.14 wird cgroup v2 jedoch als Vorschau
-Funktion unterstützt. Das Vorhandensein von /sys/fs/cgroup/cgroup.controllers gibt an, dass Ihr System cgroup v2 verwendet.
Problemumgehung
Wenn Ihr System cgroup v2 verwendet, führen Sie ein Upgrade Ihres Clusters auf Version 1.14 durch.
Preflight-Prüfungen und Anmeldedaten für Dienstkonten
Bei Installationen, die durch Administrator- oder Hybridcluster ausgelöst werden, also Cluster, die nicht mit bmctl erstellt wurden, wie etwa Nutzercluster, werden bei der Preflight-Prüfung die Anmeldedaten des Google Cloud -Dienstkontos oder deren zugehörigen Berechtigungen nicht geprüft.
Wenn Sie Bare-Metal-Cluster auf vSphere-VMs installieren, müssen Sie die Flags tx-udp_tnl-segmentation und tx-udp_tnl-csum-segmentation deaktivieren. Diese Flags beziehen sich auf die Auslagerung der Hardwaresegmentierung von vSphere. Treiber-VMXNET3 und funktionieren nicht mit dem GENEVE-Tunnel von Bare-Metal-Clustern.
Problemumgehung
Führen Sie auf jedem Knoten den folgenden Befehl aus, um die aktuellen Werte für diese Flags zu prüfen:
ethtool-kNET_INTFC|grepsegm
Ersetzen Sie NET_INTFC durch die Netzwerkschnittstelle, die der IP-Adresse des Knotens zugeordnet ist.
Die Antwort sollte Einträge wie die folgenden enthalten:
Manchmal zeigt ethtool in RHEL 8.4 an, dass diese Flags deaktiviert sind, obwohl sie aktiv sind. Um diese Flags explizit zu deaktivieren, aktivieren und deaktivieren Sie die Flags mit folgenden Befehlen:
Diese Flag-Änderung bleibt bei Neustarts nicht bestehen. Konfigurieren Sie die Startskripts so, dass diese Flags beim Systemstart explizit festgelegt werden.
Upgrades und Updates
1.10
bmctl kann keine Nutzercluster niedrigerer Version erstellen, aktualisieren oder zurücksetzen.
Über die bmctl-Befehlszeile kann kein Nutzercluster mit einer niedrigeren Nebenversion erstellt, aktualisiert oder zurückgesetzt werden, unabhängig von der Version des Administratorclusters. Sie können beispielsweise bmctl mit einer Version von 1.N.X nicht verwenden, um einen Nutzercluster der Version 1.N-1.Y zurückzusetzen, auch wenn der Administratorcluster ebenfalls die Version 1.N.X hat.
Wenn Sie von diesem Problem betroffen sind, sollten Sie bei der Verwendung von bmctl ähnliche Logs wie die folgenden sehen:
Verwenden Sie kubectl, um die benutzerdefinierte Ressource des Nutzerclusters im Administratorcluster zu erstellen, zu bearbeiten oder zu löschen.
Die Möglichkeit, Nutzercluster zu aktualisieren, ist nicht betroffen.
Upgrades und Updates
1.12
Clusterupgrades auf Version 1.12.1 können zum Stillstand kommen
Das Upgraden von Clustern auf Version 1.12.1 kommt manchmal zum Stillstand, weil der API-Server nicht mehr verfügbar ist. Dieses Problem betrifft alle Clustertypen und alle unterstützten Betriebssysteme. Wenn dieses Problem auftritt, kann der bmctl
upgrade cluster-Befehl an mehreren Stellen fehlschlagen, auch während der zweiten Phase der Preflight-Prüfungen.
Problemumgehung
Sie können in Ihren Upgradeprotokollen nachsehen, ob Sie von diesem Problem betroffen sind. Upgrade-Logs befinden sich standardmäßig in /baremetal/bmctl-workspace/CLUSTER_NAME/log/upgrade-cluster-TIMESTAMP.
Das Formular „upgrade-cluster.log“ enthält möglicherweise Fehler wie die folgenden:
HAProxy und Keepalived müssen auf jedem Knoten der Steuerungsebene ausgeführt werden, bevor Sie versuchen, Ihren Cluster noch einmal auf Version 1.12.1 zu aktualisieren. Prüfen Sie mit der crictl-Befehlszeilenschnittstelle auf jedem Knoten, ob die Container haproxy und keepalived ausgeführt werden:
Wenn HAProxy oder Keepalived auf einem Knoten nicht ausgeführt wird, starten Sie kubelet auf dem Knoten neu:
systemctlrestartkubelet
Upgrades und Updates, VM Runtime on GDC
1.11, 1.12
Das Upgrade von Clustern auf Version 1.12.0 oder höher schlägt fehl, wenn die VM Runtime on GDC aktiviert ist.
In Clustern der Version 1.12.0 werden alle Ressourcen, die sich auf die VM Runtime on GDC beziehen, zum Namespace vm-system migriert, um den GA-Release der VM Runtime on GDC besser zu unterstützen. Wenn Sie die VM Runtime on GDC in einem Cluster der Version 1.11.x oder niedriger aktiviert haben, schlägt das Upgrade auf Version 1.12.0 oder höher fehl, sofern Sie nicht zuerst die VM Runtime on GDC deaktivieren. Wenn Sie von diesem Problem betroffen sind, wird beim Upgrade-Vorgang der folgende Fehler gemeldet:
Failed to upgrade cluster: cluster isn't upgradable with vmruntime enabled from
version 1.11.x to version 1.12.0: please disable VMruntime before upgrade to
1.12.0 and higher version
Problemumgehung
So deaktivieren Sie die VM Runtime on GDC:
Bearbeiten Sie die benutzerdefinierte VMRuntime-Ressource:
kubectleditvmruntime
Legen Sie enabled in der Spezifikation auf false fest:
Upgrade bleibt bei error during manifests operations hängen
In einigen Situationen können Clusterupgrades nicht abgeschlossen werden und die bmctl-Befehlszeile reagiert nicht mehr. Dieses Problem kann durch eine falsch aktualisierte Ressource verursacht werden. So können Sie feststellen, ob Sie von diesem Problem betroffen sind, und es beheben: Prüfen Sie die anthos-cluster-operator-Logs und suchen Sie nach Fehlern, die den folgenden Einträgen ähneln:
controllers/Cluster"msg"="error during manifests operations""error"="1 error occurred: ... {RESOURCE_NAME} is invalid: metadata.resourceVersion: Invalid value: 0x0: must be specified for an update
Diese Einträge sind ein Symptom einer falsch aktualisierten Ressource, wobei {RESOURCE_NAME} der Name der problematischen Ressource ist.
Problemumgehung
Wenn diese Fehler in Ihren Logs auftreten, führen Sie die folgenden Schritte aus:
Entfernen Sie die Annotation kubectl.kubernetes.io/last-applied-configuration aus der Ressource aus der Lognachricht mit kubectl edit.
Speichern Sie die Änderungen und wenden Sie sie auf die Ressource an.
Wiederholen Sie das Clusterupgrade.
Upgrades und Updates
1.10, 1.11, 1.12
Upgrades werden für Cluster mit Funktionen blockiert, die Network Gateway for GDC verwenden
Clusterupgrades von 1.10.x auf 1.11.x schlagen bei Clustern fehl, die entweder ein NAT-Gateway für ausgehenden Traffic oder gebündeltes Load-Balancing mit BGP verwenden. Beide Funktionen verwenden das Network Gateway for GDC. Clusterupgrades bleiben bei der Befehlszeilenmeldung Waiting for upgrade to complete... hängen und der anthos-cluster-operator protokolliert Fehler wie die folgenden:
apply run failed ... MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field
is immutable...
Problemumgehung
Führen Sie die folgenden Befehle für den Cluster aus, für den Sie ein Upgrade durchführen, um die Blockierung des Upgrades aufzuheben:
Mit dem Befehl bmctl update kann der Abschnitt maintenanceBlocks nicht aus der Konfiguration der Clusterressource entfernt oder geändert werden.
Problemumgehung
Weitere Informationen, einschließlich Anweisungen zum Entfernen von Knoten aus dem Wartungsmodus, finden Sie unter Knoten in den Wartungsmodus versetzen.
Vorgang
1.10, 1.11, 1.12
Knoten werden nicht mehr isoliert, wenn Sie den Wartungsmodus nicht verwenden.
Wenn Sie Cluster der Version 1.12.0 (anthosBareMetalVersion: 1.12.0) oder niedriger ausführen und kubectl cordon manuell auf einem Knoten verwenden, kann es sein, dass Google Distributed Cloud for Bare Metal den Knoten aufhebt, bevor Sie bereit sind, um den erwarteten Status abzugleichen.
Problemumgehung
Verwenden Sie für Cluster mit Version 1.12.0 und niedriger den Wartungsmodus, um Knoten sicher abzusichern und zu leeren.
In Version 1.12.1 (anthosBareMetalVersion: 1.12.1) oder höher werden Ihre Knoten in Google Distributed Cloud für Bare Metal nicht unerwartet aus dem Cordon entfernt, wenn Sie kubectl cordon verwenden.
Vorgang
1.11
Cluster der Version 11, die einen Registry-Spiegel verwenden, können keine Cluster der Version 1.10 verwalten
Wenn Ihr Administratorcluster die Version 1.11 hat und einen Registry-Spiegel verwendet, kann er keine Nutzercluster verwalten, die eine niedrigere Nebenversion haben. Dieses Problem wirkt sich auf das Zurücksetzen, Aktualisieren und Upgraden von Vorgängen im Nutzercluster aus.
Prüfen Sie Ihre Logs auf Clustervorgänge wie Erstellen, Upgrade oder Zurücksetzen, um festzustellen, ob dieses Problem Sie betrifft. Diese Logs befinden sich standardmäßig im Ordner bmctl-workspace/CLUSTER_NAME/. Wenn das Problem von Ihnen betroffen ist, enthalten Ihre Logs die folgende Fehlermeldung:
flag provided but not defined: -registry-mirror-host-to-endpoints
Vorgang
1.10, 1.11
kubeconfig-Secret überschrieben
Der Befehl bmctl check cluster überschreibt bei Ausführung in Nutzerclustern das kubeconfig-Secret des Nutzerclusters mit der Administratorcluster-kubeconfig. Das Überschreiben der Datei führt dazu, dass Standard-Clustervorgänge wie das Aktualisieren und Upgraden für betroffene Nutzercluster fehlschlagen. Dieses Problem betrifft die Clusterversionen 1.11.1 und früher.
Führen Sie den folgenden Befehl aus, um festzustellen, ob dieses Problem einen Nutzercluster betrifft:
ADMIN_KUBECONFIG: der Pfad zur kubeconfig-Datei des Administratorclusters.
USER_CLUSTER_NAMESPACE: der Namespace für den Cluster. Standardmäßig sind die Namen der Cluster-Namespaces der Name des Clusters, dem cluster- vorangestellt ist. Wenn Sie Ihren Cluster beispielsweise test nennen, lautet der standardmäßige Namespace cluster-test.
USER_CLUSTER_NAME: der Name des zu prüfenden Nutzerclusters.
Wenn der Clustername in der Ausgabe (siehe contexts.context.cluster in der folgenden Beispielausgabe) der Name des Administratorclusters ist, ist der angegebene Nutzercluster betroffen.
Mit den folgenden Schritten stellen Sie die Funktion in einem betroffenen Nutzercluster wieder her (USER_CLUSTER_NAME):
Suchen Sie die kubeconfig-Datei des Nutzerclusters. Google Distributed Cloud for Bare Metal generiert die kubeconfig-Datei auf der Administrator-Workstation, wenn Sie einen Cluster erstellen. Die Datei befindet sich standardmäßig im Verzeichnis bmctl-workspace/USER_CLUSTER_NAME.
Prüfen Sie, ob die kubeconfig-Datei die richtige Nutzercluster-kubeconfig ist:
Ersetzen Sie PATH_TO_GENERATED_FILE durch den Pfad zur Kubeconfig-Datei des Nutzerclusters. In der Antwort werden Details zu den Knoten für den Nutzercluster zurückgegeben. Prüfen Sie, ob die Maschinennamen für Ihren Cluster korrekt sind.
Führen Sie den folgenden Befehl aus, um die beschädigte kubeconfig-Datei im Administratorcluster zu löschen:
Snapshot als angemeldeter Nutzer ohne Root-Berechtigung erstellen
Wenn Sie containerd als Containerlaufzeit verwenden, muss zur Ausführung eines Snapshots als Nicht-Root-Nutzer /usr/local/bin im PATH des Nutzers enthalten sein.
Andernfalls schlägt der Vorgang mit dem Fehler crictl: command not found fehl.
Wenn Sie nicht als Root-Nutzer angemeldet sind, wird sudo zum Ausführen der Snapshot-Befehle verwendet. Der PATH sudo kann sich vom Root-Profil unterscheiden und darf nicht /usr/local/bin enthalten.
Problemumgehung
Aktualisieren Sie secure_path in /etc/sudoers, um /usr/local/bin einzuschließen. Alternativ können Sie einen symbolischen Link für crictl in einem anderen /bin-Verzeichnis erstellen.
Logging und Monitoring
1.10
stackdriver-log-forwarder hat [parser:cri] invalid
time format Warnungslogs
Wenn der CRI-Parser (Container Runtime Interface) einen falschen regulären Ausdruck zum Parsen der Zeit verwendet, enthalten die Logs für den stackdriver-log-forwarder-Pod Fehler und Warnungen wie die folgenden:
Ihre bearbeitete Ressource sollte in etwa so aussehen:
[PARSER]# https://rubular.com/r/Vn30bO78GlkvyBNamecri
Formatregex
# The timestamp is described inhttps://www.rfc-editor.org/rfc/rfc3339#section-5.6
Regex^(?<time>[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt][0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]+)?(?:[Zz]|[+-][0-9]{2}:[0-9]{2}))(?<stream>stdout|stderr)(?<logtag>[^]*)(?<log>.*)$Time_KeytimeTime_Format%Y-%m-%dT%H:%M:%S.%L%z
Time_Keepoff
Bei Clusterversionen 1.10 bis 1.15 haben einige Kunden auf der Seite Abrechnung eine unerwartet hohe Abrechnung für Metrics volume festgestellt. Dieses Problem betrifft Sie nur, wenn die beiden folgenden Umstände zutreffen:
Anwendungsmonitoring ist aktiviert (enableStackdriverForApplications=true)
Wenn Sie von diesem Problem betroffen sind, empfehlen wir Ihnen, ein Upgrade Ihrer Cluster auf Version 1.12 durchzuführen und zur neuen Lösung für das Anwendungsmonitoring managed-service-for-prometheus zu wechseln, die dieses Problem behebt:
Separate Flags zum Steuern der Erfassung von Anwendungslogs und Anwendungsstatistiken
Google Cloud Managed Service for Prometheus im Paket
Wenn Sie kein Upgrade auf Version 1.12 durchführen können, gehen Sie so vor:
Suchen Sie die Quell-Pods und -Dienste mit den unerwünschten Abrechnungen:
Entfernen Sie die Annotation prometheus.io/scrap=true aus dem Pod oder Dienst.
Logging und Monitoring
1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.28
Änderungen an metrics-server-config werden nicht beibehalten
Eine hohe Pod-Dichte kann in extremen Fällen zu einem übermäßigen Logging- und Monitoring-Overhead führen, was dazu führt, dass Metrics Server beendet und neu gestartet wird. Sie können die ConfigMap metrics-server-config bearbeiten, um weitere Ressourcen zuzuweisen, damit Metrics Server weiter ausgeführt wird. Aufgrund des Abgleichs können Änderungen an metrics-server-config jedoch während eines Clusteraktualisierungs- oder Upgradevorgangs auf den Standardwert zurückgesetzt werden.
Der Metrics Server ist nicht sofort betroffen, aber beim nächsten Neustart wird der zurückgesetzte ConfigMap-Objekt verwendet und ist wieder für übermäßigen Overhead anfällig.
Problemumgehung
Bei Version 1.11.x können Sie ein Skript für die ConfigMap-Bearbeitung erstellen und es mit Aktualisierungen oder Upgrades des Clusters ausführen. Bei Version 1.12 und höher wenden Sie sich bitte an den Support.
Logging und Monitoring
1.11, 1.12
Verworfene Messwerte wirken sich auf das Cloud Monitoring-Dashboard aus
Mehrere Google Distributed Cloud-Messwerte, die nur Software betreffen, wurden verworfen. Ab Google Distributed Cloud-Release 1.11 werden keine Daten mehr für diese verworfenen Messwerte erfasst. Wenn Sie diese Messwerte in einer Ihrer Benachrichtigungsrichtlinien verwenden, gibt es keine Daten, die die Benachrichtigungsbedingung auslösen.
In der folgenden Tabelle sind die einzelnen Messwerte aufgeführt, die verworfen wurden, und der Messwert, der sie ersetzt.
In Clusterversionen unter 1.11 verwendet die Richtliniendefinitionsdatei für die empfohlene Anthos on baremetal node cpu usage exceeds
80 percent (critical)-Benachrichtigung die verworfenen Messwerte. Die JSON-Definitionsdatei node-cpu-usage-high.json wird für die Versionen 1.11.0 und höher aktualisiert.
Problemumgehung
Führen Sie die folgenden Schritte aus, um zu den Ersatzmesswerten zu migrieren:
Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche: Zu Monitoring
Wählen Sie im Navigationsbereich Dashboards aus und löschen Sie das Dashboard für den Anthos-Clusterknotenstatus.
Klicken Sie auf den Tab Beispielbibliothek und installieren Sie das Dashboard für den Anthos-Clusterknotenstatus neu.
In manchen Situationen kann der Logging-Agent fluent-bit bei der Verarbeitung beschädigter Chunks hängen bleiben. Wenn der Logging-Agent beschädigte Blöcke nicht umgehen kann, stellen Sie möglicherweise fest, dass stackdriver-log-forwarder weiterhin mit dem Fehler CrashloopBackOff abstürzt. Wenn dieses Problem auftritt, haben Ihre Logs folgende Einträge:
[2022/03/09 02:18:44] [engine] caught signal (SIGSEGV) #0 0x5590aa24bdd5
in validate_insert_id() at plugins/out_stackdriver/stackdriver.c:1232
#1 0x5590aa24c502 in stackdriver_format() at plugins/out_stackdriver/stackdriver.c:1523
#2 0x5590aa24e509 in cb_stackdriver_flush() at plugins/out_stackdriver/stackdriver.c:2105
#3 0x5590aa19c0de in output_pre_cb_flush() at include/fluent-bit/flb_output.h:490
#4 0x5590aa6889a6 in co_init() at lib/monkey/deps/flb_libco/amd64.c:117 #5 0xffffffffffffffff in ???() at ???:0
Workaround:
Bereinigen Sie die Puffer-Chunks für den Stackdriver Log Forwarder.
Hinweis: Ersetzen Sie in den folgenden Befehlen KUBECONFIG durch den Pfad zur kubeconfig-Datei des Administratorclusters.
Unbekannter Messwertfehler im gke-metrics-agent-Log
gke-metrics-agent ist ein DaemonSet, das Messwerte auf jedem Knoten erfasst und an Cloud Monitoring weiterleitet. Es werden möglicherweise Protokolle wie die folgenden erstellt:
Diese Fehlerlogs können ignoriert werden, da die darin enthaltenen Messwerte nicht unterstützt werden und für das Monitoring nicht kritisch sind.
Logging und Monitoring
1.10, 1.11
Intermittierende Messwertexportunterbrechungen
Bei Clustern kann es zu Unterbrechungen beim normalen, kontinuierlichen Export von Messwerten oder zu fehlenden Messwerten auf einigen Knoten kommen. Wenn dieses Problem Ihre Cluster betrifft, können Datenlücken für die folgenden Messwerte (mindestens) auftreten:
Aktualisieren Sie Ihre Cluster auf Version 1.11.1 oder höher.
Wenn Sie kein Upgrade durchführen können, führen Sie die folgenden Schritte aus:
Öffnen Sie die Ressource stackdriver zum Bearbeiten:
kubectl-nkube-systemeditstackdriverstackdriver
Fügen Sie dem Manifest stackdriver den folgenden Abschnitt resourceAttrOverride hinzu, um die CPU-Anfrage für gke-metrics-agent von 10m auf 50m zu erhöhen:
Der Befehl sucht cpu: 50m, wenn Ihre Änderungen wirksam wurden.
Netzwerk
1.10
Mehrere Standardgateways unterbrechen die Konnektivität zu externen Endpunkten
Wenn Sie mehrere Standardgateways in einem Knoten haben, kann dies zu einer unterbrochenen Verbindung von einem Pod zu externen Endpunkten wie google.com führen.
Führen Sie den folgenden Befehl auf dem Knoten aus, um festzustellen, ob Sie von diesem Problem betroffen sind:
iprouteshow
Mehrere Instanzen von default in der Antwort geben an, dass Sie betroffen sind.
Netzwerk
1.12
Änderungen an benutzerdefinierten Netzwerkressourcen in Nutzerclustern werden überschrieben
In Clustern der Version 1.12.x können Sie benutzerdefinierte Netzwerkressourcen in Ihrem Nutzercluster manuell bearbeiten. Google Distributed Cloud gleicht benutzerdefinierte Ressourcen in den Nutzerclustern mit den benutzerdefinierten Ressourcen in Ihrem Administratorcluster während Clusterupgrades ab. Bei diesem Abgleich werden alle Änderungen überschrieben, die direkt an den benutzerdefinierten Netzwerkressourcen im Nutzercluster vorgenommen wurden. Die benutzerdefinierten Netzwerkressourcen sollten nur im Administratorcluster geändert werden. In Clustern der Version 1.12.x wird diese Anforderung jedoch nicht erzwungen.
Sie bearbeiten diese benutzerdefinierten Ressourcen in Ihrem Administratorcluster. Im Abgleichsschritt werden die Änderungen auf Ihre Nutzercluster angewendet.
Problemumgehung
Wenn Sie eine der oben genannten benutzerdefinierten Ressourcen in einem Nutzercluster geändert haben, müssen Sie die entsprechenden benutzerdefinierten Ressourcen in Ihrem Administratorcluster vor dem Upgrade anpassen. So wird sichergestellt, dass Ihre Konfigurationsänderungen beibehalten werden. Bei Clusterversionen 1.13.0 und höher können Sie die benutzerdefinierten Netzwerkressourcen in Ihren Nutzerclustern nicht direkt ändern.
Netzwerk
1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.28
Pod-Konnektivitätsfehler und Filterung für umgekehrte Pfade
Google Distributed Cloud konfiguriert die Filterung für umgekehrte Pfade auf Knoten, um die Quellvalidierung zu deaktivieren (net.ipv4.conf.all.rp_filter=0). Wenn die Einstellung rp_filter in 1 oder 2 geändert wird, schlagen Pods fehl, da außerhalb der Knoten das Kommunikationszeitlimit überschritten wird.
Die Filterung für umgekehrte Pfade wird mit rp_filter-Dateien im IPv4-Konfigurationsordner (net/ipv4/conf/all) festgelegt. Dieser Wert kann auch von sysctl überschrieben werden. Damit werden Einstellungen der Filterung für umgekehrte Pfade in einer Netzwerksicherheitskonfigurationsdatei gespeichert, z. B. /etc/sysctl.d/60-gce-network-security.conf.
Problemumgehung
Die Pod-Verbindung kann durch eine der folgenden Problemumgehungen wiederhergestellt werden:
Legen Sie den Wert für net.ipv4.conf.all.rp_filter manuell wieder auf 0 fest und führen Sie dann sudo sysctl -p aus, um die Änderung zu übernehmen.
Oder
Starten Sie den anetd-Pod neu, um net.ipv4.conf.all.rp_filter wieder auf 0 zurückzusetzen. Für einen Neustart des anetd-Pods verwenden Sie die folgenden Befehle, um den anetd-Pod zu ermitteln und zu löschen und einen neuen anetd-Pod an seiner Stelle zu starten:
Ersetzen Sie ANETD_XYZ durch den Namen des anetd-Pods.
Prüfen Sie nach der Ausführung einer der beiden Problemumgehungen, ob der Wert net.ipv4.conf.all.rp_filter auf 0 gesetzt ist. Führen Sie dazu sysctl net.ipv4.conf.all.rp_filter auf jedem Knoten aus.
Cluster-IP-Adressen vom Typ Bootstrap und IP-Adressen von Clusterknoten:
192.168.122.0/24 und 10.96.0.0/27 sind die Standard-Pod- und Dienst-CIDRs, die vom Bootstrap-Cluster (Typ) verwendet werden.
Preflight-Prüfungen schlagen fehl, wenn sie sich mit IP-Adressen von Clusterknoten überschneiden.
Problemumgehung
Zur Vermeidung des Konflikts können Sie die Flags --bootstrap-cluster-pod-cidr und --bootstrap-cluster-service-cidr an bmctl übergeben, um andere Werte anzugeben.
Betriebssystem
1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.28
Fehler beim Erstellen oder Upgraden von Clustern unter CentOS
Im Dezember 2020 gaben die CentOS-Community und Red Hat die Einstellung von CentOS bekannt. Am 31. Januar 2022 hat CentOS 8 das Ende des Produktzyklus (End of Life, EOL) erreicht. Aufgrund der EOL-Dauer funktionieren yum-Repositories nicht mehr für CentOS, was dazu führt, dass Clustererstellung und Cluster-Upgrade-Vorgänge fehlschlagen. Dies gilt für alle unterstützten Versionen von CentOS und betrifft alle Versionen von Clustern.
Problemumgehung
Schritte zur Problemumgehung ansehen
Um das Problem zu umgehen, führen Sie die folgenden Befehle aus, damit Ihr CentOS einen Archiv-Feed verwendet:
Container kann nicht in VOLUME schreiben, das in Dockerfile mit containerd und SELinux definiert ist.
Wenn Sie containerd als Containerlaufzeit verwenden und auf Ihrem Betriebssystem SELinux aktiviert ist, ist das in der Anwendungs-Dockerfile definierte VOLUME möglicherweise nicht beschreibbar. Beispielsweise können Container, die mit dem folgenden Dockerfile erstellt wurden, nicht in den Ordner /tmp schreiben.
FROM ubuntu:20.04 RUN chmod -R 777 /tmp VOLUME /tmp
Führen Sie den folgenden Befehl auf dem Knoten aus, auf dem der problematische Container gehostet wird, um zu prüfen, ob Sie von diesem Problem betroffen sind:
ausearch-mavc
Wenn Sie von diesem Problem betroffen sind, wird ein denied-Fehler wie der folgende angezeigt:
Führen Sie eine der folgenden Änderungen aus, um dieses Problem zu umgehen:
Deaktivieren Sie SELinux.
Verwenden Sie die VOLUME-Funktion nicht in Dockerfile.
Upgrades und Updates
1.10, 1.11, 1.12
Node Problem Detector ist nach Cluster-Upgrades nicht standardmäßig aktiviert
Wenn Sie Cluster aktualisieren, ist der Node Problem Detector nicht standardmäßig aktiviert. Dieses Problem tritt bei Upgrades von Version 1.10 auf Version 1.12.1 auf und wurde in Version 1.12.2 behoben.
Workaround:
So aktivieren Sie den Node Problem Detector:
Prüfen Sie, ob der node-problem-detector systemd-Dienst auf dem Knoten ausgeführt wird.
Stellen Sie mit dem SSH-Befehl eine Verbindung zum Knoten her.
Prüfen Sie, ob der node-problem-detector systemd-Dienst auf dem Knoten ausgeführt wird:
systemctlis-activenode-problem-detector
Wenn im Ergebnis des Befehls inactive angezeigt wird, wird der Node Problem Detector nicht auf dem Knoten ausgeführt.
Wenn Sie Node Problem Detector aktivieren möchten, verwenden Sie den Befehl kubectl edit und bearbeiten Sie die ConfigMap node-problem-detector-config. Weitere Informationen finden Sie unter Node Problem Detector.
Vorgang
1.9, 1.10
Cluster-Sicherung schlägt fehl, wenn die Anmeldung nicht als Root erfolgt
Der Befehl bmctl backup cluster schlägt fehl, wenn nodeAccess.loginUser auf einen Nicht-Root-Nutzernamen festgelegt ist.]
Workaround:
Dieses Problem betrifft die Versionen 1.9.x, 1.10.0 und 1.10.1 und wurde in Version 1.10.2 und höher behoben.
Netzwerk
1.10, 1.11, 1.12
Load-Balancer-Dienste funktionieren nicht mit Containern im Hostnetzwerk der Steuerungsebene.
In anetd gibt es einen Fehler, bei dem Pakete für LoadBalancer-Dienste verworfen werden, wenn die Backend-Pods sowohl auf dem Steuerungsebenenknoten ausgeführt werden als auch das Feld hostNetwork: true in der Spezifikation des Containers verwenden.
Der Fehler tritt in Version 1.13 oder höher nicht auf.
Workaround:
Die folgenden Problemumgehungen können helfen, wenn Sie einen LoadBalancer-Dienst verwenden, der von hostNetwork-Pods unterstützt wird:
Führen Sie sie auf Worker-Knoten (nicht auf Knoten der Steuerungsebene) aus.
Verwaister Pod „anthos-version-$version$“ kann Image nicht abrufen
Beim Upgrade von Clustern von Version 1.12.x auf 1.13.x kann es zu einem Fehler bei einem anthos-version-$version$-Pod mit dem Fehler „ImagePullBackOff“ kommen.
Dies liegt an der Race Condition, die beim Upgrade von anthos-cluster-operator auftritt. Sie sollte sich nicht auf die regulären Clusterfunktionen auswirken.
Der Fehler tritt in Version 1.13 oder höher nicht auf.
Workaround:
Löschen Sie den Job von dynamic-version-installer mit
kubectl delete job anthos-version-$version$ -n kube-system
.
Upgrades und Updates
1.13
1.12-Cluster, die von 1.11 aktualisiert wurden, können nicht auf 1.13.0 aktualisiert werden
Cluster der Version 1.12, die von Version 1.11 aktualisiert wurden, können nicht auf Version 1.13.0 aktualisiert werden. Dieses Upgrade-Problem betrifft keine Cluster, die mit Version 1.12 erstellt wurden.
Prüfen Sie die Logs des Upgrade-Jobs, der den String upgrade-first-no* im Administratorcluster enthält, um festzustellen, ob Sie betroffen sind.
Wenn Sie die folgende Fehlermeldung sehen, sind Sie betroffen.
Es gibt ein Problem in stackdriver-operator, das dazu führt, dass mehr CPU-Zeit als normal benötigt wird. Die normale CPU-Auslastung beträgt weniger als 50 milliCPU (50m) für stackdriver-operator im Leerlauf. Die Ursache ist eine Diskrepanz zwischen den Zertifikatsressourcen, die stackdriver-operator anwendet, und den Erwartungen von cert-manager. Diese Diskrepanz führt zu einer Wettlaufbedingung zwischen cert-manager und stackdriver-operator beim Aktualisieren dieser Ressourcen.
Dieses Problem kann zu einer geringeren Leistung auf Clustern mit begrenzter CPU-Verfügbarkeit führen.
Workaround:
Bis Sie auf eine Version aktualisieren können, in der dieser Fehler behoben wurde, können Sie so vorgehen:
Wenn Sie stackdriver-operator vorübergehend auf 0 Replikate herunterskalieren möchten, wenden Sie eine benutzerdefinierte AddonConfiguration-Ressource an:
Nachdem Sie ein Upgrade auf eine Version durchgeführt haben, in der dieses Problem behoben wurde, können Sie stackdriver-operator wieder hochskalieren:
Das Erfassen von annotierungsbasierten Messwerten funktioniert nicht
In der Google Distributed Cloud-Nebenversion 1.16 ist das Feld enableStackdriverForApplications in der Spezifikation der benutzerdefinierten Ressource stackdriver veraltet. Dieses Feld wird in der benutzerdefinierten Stackdriver-Ressource durch die beiden Felder enableCloudLoggingForApplications und enableGMPForApplications ersetzt.
Wir empfehlen, Google Cloud Managed Service for Prometheus zum Überwachen Ihrer Arbeitslasten zu verwenden. Verwenden Sie das Feld enableGMPForApplications, um diese Funktion zu aktivieren.
Wenn Sie sich auf die Erfassung von Messwerten verlassen, die durch prometheus.io/scrape-Annotationen für Ihre Arbeitslasten ausgelöst werden, können Sie das alte Verhalten mit dem Feature-Gate-Flag annotationBasedApplicationMetrics beibehalten. Es gibt jedoch ein Problem, das verhindert, dass annotationBasedApplicationMetrics richtig funktioniert. Dadurch können keine Messwerte aus Ihren Anwendungen in Cloud Monitoring erfasst werden.
Workaround:
Aktualisieren Sie Ihren Cluster auf Version 1.16.2 oder höher, um dieses Problem zu beheben.
Bei der Erfassung von Arbeitslastmesswerten auf Grundlage von Annotationen, die durch das Feature-Gate annotationBasedApplicationMetrics aktiviert wird, werden Messwerte für Objekte mit der Annotation prometheus.io/scrape erfasst. Viele Softwaresysteme mit Open-Source-Ursprung verwenden möglicherweise diese Annotation. Wenn Sie diese Methode zur Erfassung von Messwerten weiterhin verwenden, sollten Sie sich dieser Abhängigkeit bewusst sein, damit Sie nicht von Gebühren für Messwerte in Cloud Monitoring überrascht werden.
Cloud-Audit-Logging-Fehler aufgrund einer abgelehnten Berechtigung
Cloud-Audit-Logs erfordert eine spezielle Berechtigungseinrichtung, die vom Clusteroperator über GKE Hub automatisch ausgeführt wird.
Wenn jedoch ein Administratorcluster mehrere Cluster mit unterschiedlichen Projekt-IDs verwaltet, würde ein Fehler im Clusteroperator dazu führen, dass dasselbe Dienstkonto wiederholt an die Zulassungsliste angehängt wird. Die Anfrage für die Zulassungsliste würde aufgrund der Größenbeschränkung fehlschlagen. Dies würde dazu führen, dass Audit-Logs aus einigen oder allen dieser Cluster nicht in Google Cloudeingefügt werden können.
Das Symptom ist eine Reihe von Permission Denied-Fehlern im Pod audit-proxy im betroffenen Cluster.
Ein weiteres Symptom ist der Fehlerstatus und eine lange Liste mit doppelten Dienstkonten, wenn Sie die Zulassungsliste für Cloud-Audit-Logs über GKE Hub prüfen:
Um das Problem zu beheben, können Sie Ihren Cluster auf mindestens Version 1.28.1000, 1.29.500 oder 1.30.200 aktualisieren, in denen das Problem behoben wurde. Alternativ können Sie den folgenden Workaround anwenden:
Schritte zur Problemumgehung ansehen
Löschen Sie das GKE Hub-Feature für Cloud-Audit-Logging und erstellen Sie es neu, um die Automatisierung der Zulassungsliste noch einmal zu erzwingen.
Sie können die Hub-Funktion cloudauditlogging auf folgende Weise löschen:
Alle Patchversionen in 1.29 und früher, 1.30.400 und früher sowie 1.31.0
Die Konfiguration des Registry-Spiegels auf Knoten wird nicht aktualisiert, wenn nur das Feld hosts geändert wird.
Wenn Sie das Feld containerRuntime.registryMirrors.hosts für einen Registry-Mirror-Endpunkt in der Clusterspezifikation aktualisieren, werden die Änderungen nicht automatisch auf die Clusterknoten angewendet. Dieses Problem tritt auf, weil die Abgleichslogik Änderungen, die ausschließlich am Feld hosts vorgenommen wurden, nicht erkennt. Folglich werden die Maschinen-Updatejobs, die für die Aktualisierung der containerd-Konfiguration auf den Knoten zuständig sind, nicht ausgelöst.
Überprüfung:
Sie können dieses Problem überprüfen, indem Sie nur das Feld hosts für einen Registry-Mirror ändern und dann die containerd-Konfigurationsdatei auf einem Worker-Knoten prüfen. Der Pfad kann je nach Version und Einrichtung /etc/containerd/config.toml oder /etc/containerd/config.d/01-containerd.conf sein. In der Datei wird die aktualisierte hosts-Liste für den Spiegelendpunkt nicht angezeigt.
Workaround:
Wählen Sie eine der folgenden Optionen aus:
Upgrade auf eine Version mit dem Fix:Aktualisieren Sie Ihre Cluster auf 1.30.500-gke.126 oder höher, 1.31.100-gke.136 oder höher oder 1.32.0.
Update über eine NodePool-Änderung auslösen:Nehmen Sie eine triviale Änderung an der NodePool-Spezifikation für die betroffenen Knoten vor. Fügen Sie beispielsweise ein temporäres Label oder eine Annotation hinzu. Dadurch wird der Aktualisierungsprozess für die Maschine ausgelöst, bei dem die Änderungen am Registry-Mirror übernommen werden. Sie können die unwichtige Änderung später wieder entfernen.
Nächste Schritte
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.
Weitere Informationen zu Supportressourcen finden Sie unter Support. Dazu gehören:
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2026-02-25 (UTC)."],[],[]]