Bekannte Probleme mit GKE on Bare Metal

Auf dieser Seite werden alle bekannten Probleme bei Google Distributed Cloud Virtual for Bare Metal aufgeführt. Filtern Sie die bekannten Probleme nach Produktversion oder Kategorie, indem Sie die entsprechenden Filter aus den folgenden Drop-down-Menüs auswählen.

Wählen Sie Ihre GDCV für Bare-Metal-Version aus:

Wählen Sie die Problemkategorie aus:

Sie können auch nach Ihrem Problem suchen:

Kategorie Erkannte Version(en) Problem und Problemumgehung
Zurücksetzen/Löschen 1.29.0

Beim Zurücksetzen des Nutzerclusters konnte kein Namespace gelöscht werden

Wenn bmctl reset cluster -c ${USER_CLUSTER} ausgeführt wird und alle zugehörigen Jobs abgeschlossen sind, kann der Nutzercluster-Namespace mit dem Befehl nicht gelöscht werden. Der Nutzercluster-Namespace bleibt im Status Terminating hängen. Irgendwann wird beim Zurücksetzen des Clusters eine Zeitüberschreitung ausgegeben und ein Fehler zurückgegeben.

Workaround:

Führen Sie die folgenden Schritte aus, um den Namespace zu entfernen und das Zurücksetzen des Nutzerclusters abzuschließen:

  1. Löschen Sie den Pod metrics-server aus dem Administratorcluster:
    kubectl delete pods -l k8s-app=metrics-server \
        -n gke-managed-metrics-server --kubeconfig ADMIN_KUBECONFIG_PATH
    
    In diesem Fall verhindert der Pod metrics-server das Entfernen des Cluster-Namespace.
  2. Erzwingen Sie im Administratorcluster das Entfernen des Finalierers im Namespace des Nutzerclusters:
    kubectl get ns ${USER_CLUSTER_NAMESPACE} -ojson | \
        jq '.spec.finalizers = []' | \
        kubectl replace --raw "/api/v1/namespaces/${USER_CLUSTER_NAMESPACE}/finalize" -f -
    
    Nachdem der Finalierer entfernt wurde, wird der Cluster-Namespace entfernt und der Cluster wurde zurückgesetzt.
Konfiguration, Installation, Sicherheit 1.16.0 bis 1.16.7 und 1.28.0 bis 1.28.400

Im Deployment zur Binärautorisierung fehlt ein nodeSelector

Wenn Sie die Binärautorisierung für GKE on Bare Metal aktiviert haben und eine Version von 1.16.0 bis 1.16.7 oder 1.28.0 bis 1.28.400 verwenden, tritt möglicherweise ein Problem mit der Planung der Pods für das Feature auf. In diesen Versionen fehlt dem Deployment zur Binärautorisierung ein nodeSelector. Daher können die Pods für das Feature auf Worker-Knoten anstelle von Knoten der Steuerungsebene geplant werden. Dieses Verhalten verursacht zwar keinen Fehler, ist aber nicht beabsichtigt.

Workaround:

Führen Sie für alle betroffenen Cluster die folgenden Schritte aus:

  1. Öffnen Sie die Deployment-Datei für die Binärautorisierung:
    kubectl edit -n binauthz-system deployment binauthz-module-deployment
  2. Fügen Sie den folgenden nodeSelector in den spec.template.spec-Block ein:
  3.       nodeSelector:
            node-role.kubernetes.io/control-plane: ""
    
  4. Speichern Sie die Änderungen.

Nachdem die Änderung gespeichert wurde, werden die Pods nur noch auf den Knoten der Steuerungsebene noch einmal bereitgestellt. Diese Korrektur muss nach jedem Upgrade durchgeführt 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

Ein Upgrade von Clustern, die vor der Version 1.11.0 auf die Versionen 1.28.0 bis 1.28.300 erstellt wurden, kann dazu führen, dass der Pod zum Bereitstellen des Lebenszyklus-Controllers während des Upgrades in einen Fehlerstatus wechselt. In diesem Fall erhalten die Logs des Lebenszyklus-Controller-Bereitsteller-Pods eine Fehlermeldung wie diese:

"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:

kubectl patch customresourcedefinitions/nodepoolclaims.baremetal.cluster.gke.io \
    --subresource status --type json \
    --patch='[{ "op": "replace", "path": "/status/storedVersions", "value": ["v1"]}]'

kubectl patch customresourcedefinitions/machineclasses.baremetal.cluster.gke.io \
    --subresource status --type json \
    --patch='[{ "op": "replace", "path": "/status/storedVersions", "value": ["v1"]}]'

kubectl patch customresourcedefinitions/inventorymachines.baremetal.cluster.gke.io \
    --subresource status --type json \
    --patch='[{ "op": "replace", "path": "/status/storedVersions", "value": ["v1"]}]'
Logging und Monitoring 1,13,7, 1,14, 1,15, 1,16, 1,28

Falsche Projekt-ID im Log-Explorer angezeigt

Manchmal werden Cluster- oder Containerlogs mit einer anderen Projekt-ID in resource.labels.project_id im Log-Explorer getaggt.

Dies kann passieren, wenn der Cluster für die Verwendung des PROJECT_ONE für die Beobachtbarkeit konfiguriert ist, der in der Clusterkonfiguration im Feld clusterOperations.projectID festgelegt ist. Das cloudOperationsServiceAccountKeyPath in der Konfiguration enthält 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 aus dem Log-Explorer.
Netzwerk 1.29.0

Leistungsverschlechterung bei Clustern, die gebündeltes Load-Balancing mit BGP verwenden

Bei Clustern der Version 1.29.0, die gebündeltes Load-Balancing mit BGP verwenden, kann die Leistung des Load-Balancings sinken, wenn die Gesamtzahl der Dienste vom Typ LoadBalancer 2.000 erreicht. Wenn die Leistung abnimmt, dauert die Verbindung mit neu erstellten Diensten entweder sehr lange oder kann von einem Client nicht erreicht werden. Vorhandene Dienste funktionieren weiterhin, können jedoch Fehlermodi wie den Verlust eines Load-Balancer-Knotens nicht effektiv handhaben. Diese Dienstprobleme treten auf, wenn das ang-controller-manager-Deployment aufgrund von zu wenig Arbeitsspeicher beendet wird.

Wenn Ihr Cluster von diesem Problem betroffen ist, sind die Dienste im Cluster nicht erreichbar und nicht fehlerfrei und das ang-controller-manager-Deployment befindet sich in einer CrashLoopBackOff. Die Antwort beim Auflisten der ang-controller-manager-Deployments sieht in etwa so aus:

ang-controller-manager-79cdd97b88-9b2rd   0/1    CrashLoopBackOff   639 (59s ago)   2d10h   10.250.210.152   vm-bgplb-centos4-n1-02   <none>   <none>

ang-controller-manager-79cdd97b88-r6tcl   0/1   CrashLoopBackOff   620 (4m6s ago)   2d10h   10.250.202.2     vm-bgplb-centos4-n1-11   <none>   <none>

Problemumgehung

Als Behelfslösung können Sie das Limit für Arbeitsspeicherressourcen des Deployments ang-controller-manager um 100 MiB erhöhen und das CPU-Limit entfernen:

kubectl edit deployment ang-controller-manager -n kube-system --kubeconfig ADMIN_KUBECONFIG

Nachdem Sie die Änderungen vorgenommen und den Editor geschlossen haben, sollten Sie die folgende Ausgabe sehen:

deployment.apps/ang-controller-manager edited

Prüfen Sie das Manifest von ang-controller-manager im Cluster, um zu prüfen, ob die Änderungen angewendet wurden:

kubectl get deployment ang-controller-manager \
   -n kube-system \
   -o custom-columns=NAME:.metadata.name,CPU_LIMITS:.spec.template.spec.containers[*].resources.limits.cpu,MEMORY_LIMITS:.spec.template.spec.containers[*].resources.limits.memory \
   --kubeconfig ADMIN_KUBECONFIG

Die Antwort sollte in etwa so aussehen:

NAME                     CPU_LIMITS   MEMORY_LIMITS
ang-controller-manager   <none>       400Mi
Installation, Upgrades, Sicherung und Wiederherstellung 1.28.0, 1.28.100

Verbindungsprobleme am Container Registry-Endpunkt gcr.io können Clustervorgänge blockieren

Durch mehrere Clustervorgänge für Administratorcluster wird ein Bootstrap-Cluster erstellt. Bevor ein Bootstrap-Cluster erstellt wird, führt bmctl eine Google Cloud-Erreichbarkeitsprüfung über die Administratorworkstation durch. Diese Prüfung kann aufgrund von Verbindungsproblemen mit dem Container Registry-Endpunkt gcr.io fehlschlagen. Außerdem wird eine Fehlermeldung wie die folgende angezeigt:

        system checks failed for bootstrap machine: GCP reachability check failed: failed to reach url https://gcr.io: Get "https://cloud.google.com/artifact-registry/": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
        

Problemumgehung

Wiederholen Sie den Vorgang mit dem Flag --ignore-validation-errors, um dieses Problem zu umgehen.

Netzwerk 1,15; 1,16

GKE Dataplane V2 mit einigen Speichertreibern nicht kompatibel

GKE on Bare Metal-Cluster verwenden die GKE Dataplane V2, die mit einigen Speicheranbietern nicht kompatibel ist. Es können Probleme mit hängenden NFS-Volumes oder Pods auftreten. Dies 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 Dienst-Volumes)
  • 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 höher als linux-image-5.4.0-166-generic ist.
  • 22.04 LTS: Verwenden Sie entweder ein Kernel-Image der Version 5.15.0, das höher als linux-image-5.15.0-88-generic ist, oder den HWE-Kernel 6.5.

Wenn Sie eine andere Version 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 Pod gke-metrics-agent, der sich auf demselben Knoten wie kube-state-metrics befindet, keinen Arbeitsspeicher (OOM) hat.

Dies kann bei Clustern mit mehr als 50 Knoten oder mit vielen Kubernetes-Objekten der Fall sein.

Problemumgehung

Um dieses Problem zu beheben, aktualisieren Sie die benutzerdefinierte Ressourcendefinition stackdriver, um das Feature-Gate ksmNodePodMetricsOnly zu verwenden. Dieses Feature-Gate sorgt dafür, dass nur eine kleine Anzahl kritischer Messwerte verfügbar ist.

Führen Sie die folgenden Schritte aus, um diese Problemumgehung zu verwenden:

  1. Prüfen Sie die benutzerdefinierte Ressourcendefinition stackdriver auf verfügbare Feature-Gatter:
    kubectl -n kube-system get crd stackdrivers.addons.gke.io -o yaml | grep ksmNodePodMetricsOnly
            
  2. Aktualisieren Sie die benutzerdefinierte Ressourcendefinition stackdriver, um ksmNodePodMetricsOnly zu aktivieren:
    kind:stackdriver
    spec:
      featureGates:
         ksmNodePodMetricsOnly: true
            
Installation 1.28.0-1.28.200

Preflight-Prüfung schlägt unter RHEL 9.2 aufgrund fehlender iptables fehl

Bei der Installation eines Clusters unter dem Betriebssystem Red Hat Enterprise Linux (RHEL) 9.2 kann aufgrund des fehlenden iptables-Pakets ein Fehler auftreten. Der Fehler tritt während Preflight-Prüfungen auf und löst eine Fehlermeldung aus, die in etwa so aussieht:

'check_package_availability_pass': "The following packages are not available: ['iptables']"
        

RHEL 9.2 befindet sich in der Vorabversion für GKE on Bare Metal-Version 1.28.

Problemumgehung

Um den Preflight-Prüfungsfehler zu umgehen, legen Sie spec.bypassPreflightCheck für Ihre Clusterressource auf true fest.

Vorgang 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16

Langsamer MetalLB-Failover in großem Maßstab

Wenn MetalLB eine hohe Anzahl von Diensten verarbeitet (über 10.000), kann der Failover über eine Stunde dauern. Dies liegt daran, dass MetalLB eine ratenbegrenzte Warteschlange verwendet, die bei hoher Skalierung eine Weile dauern kann, um zu dem Dienst zu gelangen, der ein Failover erfordert.

Problemumgehung

Führen Sie ein Upgrade des Clusters auf Version 1.28 oder höher durch. Wenn Sie kein Upgrade durchführen können, führt das manuelle Bearbeiten des Dienstes (z. B. durch Hinzufügen einer Annotation) dazu, dass das Failover des Dienstes schneller ausgeführt wird.

Vorgang 1.16.0–1.16.6, 1.28.0–1.28.200

Umgebungsvariablen müssen auf der Administratorworkstation festgelegt sein, wenn der Proxy aktiviert ist

bmctl check cluster kann aufgrund von Proxyfehlern fehlschlagen, wenn Sie die Umgebungsvariablen HTTPS_PROXY und NO_PROXY nicht auf der Administratorworkstation definiert haben. Der Befehl „bmctl“ meldet eine Fehlermeldung darüber, dass einige Google-Dienste nicht aufgerufen werden können, wie im folgenden Beispiel:

[2024-01-29 23:49:03+0000] error validating cluster config: 2 errors occurred:
        * GKERegister check failed: 2 errors occurred:
        * Get "https://gkehub.googleapis.com/v1beta1/projects/baremetal-runqi/locations/global/memberships/ci-ec1a14a903eb1fc": oauth2: cannot fetch token: Post "https://oauth2.googleapis.com/token": dial tcp 108.177.98.95:443: i/o timeout
        * Post "https://cloudresourcemanager.googleapis.com/v1/projects/baremetal-runqi:testIamPermissions?alt=json&prettyPrint=false": oauth2: cannot fetch token: Post "https://oauth2.googleapis.com/token": dial tcp 74.125.199.95:443: i/o timeout

Problemumgehung

Legen Sie HTTPS_PROXY und NO_PROXY manuell auf der Administratorworkstation fest.

Upgrades und Updates 1.28.0-gke.435

Upgrades auf Version 1.28.0-gke.435 schlagen möglicherweise fehl, wenn die Eigentümerschaft von audit.log falsch ist

In einigen Fällen ist für die Datei /var/log/apiserver/audit.log auf Knoten der Steuerungsebene sowohl die Gruppen- als auch die Nutzerinhaberschaft auf root festgelegt. Diese Einstellung für die Dateieigentümerschaft führt zu Upgradefehlern für die Knoten der Steuerungsebene, 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 für Cluster ab Version 1.9 standardmäßig aktiviert.

Problemumgehung

Wenn Sie Ihren Cluster nicht auf Version 1.28.100-gke.146 aktualisieren können, führen Sie die folgenden Schritte 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 die Eigentümerschaft von /var/log/apiserver/audit.log in das übergeordnete Verzeichnis /var/log/apiserver.
Netzwerk, Upgrades und Updates 1.28.0-gke.435

MetalLB weist VIP-Diensten keine IP-Adressen zu

GKE on Bare Metal verwendet MetalLB für gebündeltes Load-Balancing. In der GKE on Bare Metal-Version 1.28.0-gke.435 wird das gebündelte MetalLB auf Version 0.13 aktualisiert, mit der CRD-Unterstützung für IPAddressPools eingeführt wird. Da ConfigMaps jedoch jeden beliebigen Namen für ein IPAddressPool zulässt, mussten die Poolnamen in einen Kubernetes-kompatiblen Namen umgewandelt werden. Dazu muss am Ende des Namens der IPAddressPool ein Hash angehängt werden. 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 upgraden.

Da MetalLB einen bestimmten Namen eines IPPool zur Auswahl benötigt, verhindert die Namenskonvertierung, dass MetalLB eine Poolauswahl trifft und IP-Adressen zuweist. Daher erhalten Dienste, die metallb.universe.tf/address-pool als Annotation zur Auswahl des Adresspools für eine IP-Adresse verwenden, keine IP-Adresse mehr vom MetalLB-Controller.

Dieses Problem wurde in GKE on Bare Metal Version 1.28.100-gke.146 behoben.

Problemumgehung

Wenn Sie Ihren Cluster nicht auf Version 1.28.100-gke.146 aktualisieren können, verwenden Sie die folgenden Schritte als Behelfslösung:

  1. Rufen Sie den konvertierten Namen von IPAddressPool ab:
    kubectl get IPAddressPools -n kube-system
    
  2. Aktualisieren Sie den betroffenen Dienst, um die Annotation metallb.universe.tf/address-pool auf den konvertierten Namen mit dem Hash festzulegen.

    Wenn beispielsweise der Name IPAddressPool von default in einen Namen wie default-qpvpd konvertiert wurde, ändern Sie die Annotation metallb.universe.tf/address-pool: default im Dienst in metallb.universe.tf/address-pool: default-qpvpd.

Der bei der Namenskonvertierung verwendete Hash ist deterministisch, sodass die Problemumgehung dauerhaft ist.

Upgrades und Updates 1,14, 1,15, 1,16, 1,28, 1,29

Verwaiste Pods nach Upgrade auf Version 1.14.x

Wenn Sie ein Upgrade von GKE on Bare-Metal-Clustern auf Version 1.14.x durchführen, werden einige Ressourcen aus der vorherigen Version nicht gelöscht. Insbesondere sehen Sie möglicherweise eine Reihe von verwaisten Pods wie die folgenden:

capi-webhook-system/capi-controller-manager-xxx
capi-webhook-system/capi-kubeadm-bootstrap-controller-manager-xxx

Diese verwaisten Objekte wirken sich nicht direkt auf den Clusterbetrieb aus. Als Best Practice empfehlen wir jedoch, sie zu entfernen.

  • Führen Sie die folgenden Befehle aus, um die verwaisten Objekte zu entfernen:
    kubectl delete ns capi-webhook-system
    kubectl delete validatingwebhookconfigurations capi-validating-webhook-configuration
    kubectl delete mutatingwebhookconfigurations capi-mutating-webhook-configuration
    

Dieses Problem wurde in GKE on Bare Metal Version 1.15.0 und höher behoben.

Installation 1,14

Clustererstellung bleibt beim machine-init-Job hängen

Wenn Sie versuchen, Version 1.14.x von Google Distributed Cloud Virtual for Bare Metal zu installieren, kann aufgrund der machine-init-Jobs ein Fehler auftreten, der der folgenden Beispielausgabe ähnelt:

"kubeadm join" task failed due to:
error execution phase control-plane-join/etcd: error creating local etcd static pod manifest file: etcdserver: re-configuration failed due to not enough started members

"kubeadm reset" task failed due to:
panic: runtime error: invalid memory address or nil pointer dereference

Workaround:

Entfernen Sie das veraltete etcd-Mitglied, das dazu führt, dass der Job machine-init fehlschlägt. Führen Sie die folgenden Schritte für einen funktionierenden Knoten der Steuerungsebene aus:

  1. Listen Sie die vorhandenen etcd-Mitglieder auf:
    etcdctl --key=/etc/kubernetes/pki/etcd/peer.key \
      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      --cert=/etc/kubernetes/pki/etcd/peer.crt \
      member list
    
    Suchen Sie nach Mitgliedern mit dem Status unstarted, wie in der folgenden Beispielausgabe gezeigt:
    5feb7ac839625038, started, vm-72fed95a, https://203.0.113.11:2380, https://203.0.113.11:2379, false
    99f09f145a74cb15, started, vm-8a5bc966, https://203.0.113.12:2380, https://203.0.113.12:2379, false
    bd1949bcb70e2cb5, unstarted, , https://203.0.113.10:2380, , false
    
  2. Entfernen Sie das fehlgeschlagene etcd-Mitglied:
    etcdctl --key=/etc/kubernetes/pki/etcd/peer.key \
      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      --cert=/etc/kubernetes/pki/etcd/peer.crt \
      member remove MEMBER_ID
    
    Ersetzen Sie MEMBER_ID durch die ID des ausgefallenen etcd-Mitglieds. In der vorherigen Beispielausgabe lautet diese ID bd1949bcb70e2cb5.

    Die folgende Beispielausgabe zeigt, dass das Mitglied entfernt wurde:
    Member bd1949bcb70e2cb5 removed from cluster  9d70e2a69debf2f
    
Netzwerk 1.28.0

Cilium-operator fehlen Berechtigungen für Knoten list und watch

In Cilium 1.13 sind die ClusterRole-Berechtigungen cilium-operator falsch. Die Berechtigungen list und watch für den Knoten fehlen. cilium-operator startet keine automatische Speicherbereinigung, was zu folgenden Problemen führt:

  • Ausspähen von Cilium-Ressourcen.
  • Veraltete Identitäten werden nicht aus den TCF-Richtlinienzuordnungen entfernt.
  • Richtlinienzuordnungen erreichen möglicherweise das Limit von 16.000.
    • Es können keine neuen Einträge hinzugefügt werden.
    • Falsche NetworkPolicy-Erzwingung.
  • Identitäten können das Limit von 64.000 unter Umständen erreichen.
    • Es können keine neuen Pods erstellt werden.

Ein Operator, bei dem die Knotenberechtigungen fehlen, meldet die folgende Beispiel-Lognachricht:

2024-01-02T20:41:37.742276761Z level=error msg=k8sError error="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 gibt eine Fehlermeldung aus, wenn er keinen Eintrag in eine Richtlinienzuordnung einfügen kann. Beispiel:

level=error msg="Failed to add PolicyMap key" bpfMapKey="{6572100 0 0 0}" containerID= datapathPolicyRevision=0 desiredPolicyRevision=7 endpointID=1313 error="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=128 ipv4= ipv6= k8sPodName=/ port=0 subsys=endpoint

Workaround:

Entfernen Sie die Cilium-Identitäten und fügen Sie dem Operator dann die fehlenden ClusterRole-Berechtigungen hinzu:

  1. Entfernen Sie die vorhandenen CiliumIdentity-Objekte:
    kubectl delete ciliumid –-all
    
  2. Bearbeiten Sie das ClusterRole-Objekt cilium-operator:
    kubectl edit clusterrole cilium-operator
    
  3. Fügen Sie einen Abschnitt für nodes hinzu, der die fehlenden Berechtigungen enthält, wie im folgenden Beispiel gezeigt:
    - apiGroups:
      - ""
      resources:
      - nodes
      verbs:
      - get
      - list
      - watch
    
  4. Speichern 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 des Upgrades ausgeführt wird, schlägt möglicherweise mit der folgenden Fehlermeldung fehl:

[ERROR CreateJob]: could not delete Job \"upgrade-health-check\" in the namespace \"kube-system\": jobs.batch \"upgrade-health-check\" not found

Sie können diesen Fehler ignorieren. Wenn dieser Fehler auftritt, der das Upgrade blockiert, führen Sie den Upgradebefehl noch einmal aus.

Wenn dieser Fehler beim Ausführen des Preflights mit dem Befehl bmctl preflightcheck auftritt, wird durch den Fehler 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 Upgrade-Befehl noch einmal aus oder, wenn er während bmctl preflightcheck auftritt, noch einmal den preflightcheck-Befehl.

Vorgang 1.14, 1.15.0–1.15.7, 1.16.0–1.16.3, 1.28.0

Die regelmäßige Netzwerkdiagnose schlägt fehl, wenn ein Knoten ersetzt oder entfernt wird

Dieses Problem betrifft Cluster, die regelmäßige Netzwerk-Systemdiagnosen durchführen, nachdem ein Knoten ersetzt oder entfernt wurde. Wenn für Ihren Cluster regelmäßige Systemdiagnosen durchgeführt werden, schlägt sie nach dem Ersetzen oder Entfernen eines Knotens fehl, da die ConfigMap des Netzwerkinventars nach dem Erstellen nicht aktualisiert wird.


Workaround:

Die empfohlene Problemumgehung besteht darin, die Inventar-ConfigMap und die regelmäßige Netzwerkdiagnose zu löschen. Der Clusteroperator erstellt sie automatisch mit den neuesten Informationen neu.

Führen Sie für 1.14.x-Cluster die folgenden Befehle aus:

kubectl delete configmap \
    $(kubectl get cronjob CLUSTER_NAME-network -o=jsonpath='{.spec.jobTemplate.spec.template.spec.volumes[?(@name=="inventory-config-volume")].configMap.name}' \
    -n CLUSTER_NAMESPACE) \
    -n CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG
kubectl delete healthchecks.baremetal.cluster.gke.io \
    CLUSTER_NAME-network -n CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG

Führen Sie für Cluster ab 1.15.0 die folgenden Befehle aus:

kubectl delete configmap \
    $(kubectl get cronjob bm-system-network -o=jsonpath='{.spec.jobTemplate.spec.template.spec.volumes[?(@.name=="inventory-config-volume")]configMap.name}' \
    -n CLUSTER_NAMESPACE) \
    -n CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG
kubectl delete healthchecks.baremetal.cluster.gke.io \
    bm-system-network -n CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG
Netzwerk 1.14, 1.15, 1.16.0–1.16.2

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 Network Gateway for GDC prüft, ob die Erkennung von Duplikaten (DAD) aktiviert ist, kann die Prüfung fehlschlagen und daher nicht abgeglichen werden.

Das Verhalten unterscheidet sich je nach Clusterversion:

  • 1.14 und 1.15: Dieser Fehler tritt nur auf, wenn Sie IPv6-Floating-IP-Adressen verwenden. Wenn Sie keine IPv6-Floating-IP-Adressen verwenden, wird dieses Problem nicht angezeigt, wenn Ihre Gerätenamen einen Punkt enthalten.
  • 1.16.0–1.16.2: Dieser Fehler tritt immer auf, wenn Gerätenamen einen Punkt enthalten.

Workaround:

Führen Sie ein Upgrade des Clusters auf Version 1.16.3 oder höher durch.

Entfernen Sie als Behelfslösung im Namen des Geräts den Punkt (.), bis Sie Ihre Cluster aktualisieren können.

Upgrades und Updates, Netzwerk, Sicherheit 1.16.0

Upgrades auf 1.16.0 schlagen fehl, wenn seccomp deaktiviert ist

Wenn seccomp für Ihren Cluster deaktiviert ist (spec.clusterSecurity.enableSeccomp auf false gesetzt), schlagen Upgrades auf Version 1.16.0 fehl.

GKE on Bare Metal Version 1.16 verwendet die Kubernetes-Version 1.27. Ab Kubernetes-Version 1.27.0 ist die Funktion zum Festlegen von seccomp-Profilen allgemein verfügbar. Es wird kein Feature-Gate mehr verwendet. 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 ab Version 1.16.1 behoben. Wenn Sie das Feld cluster.spec.clusterSecurity.enableSeccomp auf false gesetzt haben, können Sie ein Upgrade auf Version 1.16.1 oder höher ausführen.

Cluster, für die spec.clusterSecurity.enableSeccomp nicht konfiguriert oder auf true gesetzt ist, sind nicht betroffen.

Installation, Betrieb 1.11, 1.12, 1.13, 1.14, 1.15.0–1.15.5, 1.16.0–1.16.1

containerd-Metadaten können nach einem Neustart beschädigt werden, wenn /var/lib/containerd bereitgestellt wird.

Wenn Sie /var/lib/containerd optional bereitgestellt 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.

Wenn Sie prüfen möchten, ob dieses Problem Sie betrifft, prüfen Sie, ob in /etc/fstab eine optionale Bereitstellung für /var/lib/containerd/ definiert ist und nofail in den Bereitstellungsoptionen enthalten ist.


Workaround:

Entfernen Sie die Bereitstellungsoption 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

Möglicherweise werden von einem Deployment (ReplikatSet) verwaltete Pods mit dem Status Failed und dem Status TaintToleration angezeigt. 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:

kubectl get pods –A | grep TaintToleration

Die folgende Beispielausgabe zeigt einen Pod mit dem Status TaintToleration:

kube-system    stackdriver-metadata-agent-[...]    0/1    TaintToleration    0

Workaround:

Prüfen Sie für jeden Pod mit den beschriebenen Symptomen das Replikatset, zu dem der Pod gehört. Wenn das Replikatset zufrieden ist, können Sie die Pods löschen:

  1. Rufen Sie das Replikatset ab, das den Pod verwaltet, und suchen Sie den Wert ownerRef.Kind:
    kubectl get pod POD_NAME -n NAMESPACE -o yaml
    
  2. Rufen Sie das Replikatset ab und prüfen Sie, ob status.replicas mit spec.replicas übereinstimmt:
    kubectl get replicaset REPLICA_NAME -n NAMESPACE -o yaml
    
  3. Wenn die Namen übereinstimmen, löschen Sie den Pod:
    kubectl delete pod POD_NAME -n NAMESPACE.
    
Upgrades 1.16.0

etcd-Ereignisse können beim Upgrade auf Version 1.16.0 verzögert werden

Wenn Sie einen vorhandenen Cluster auf Version 1.16.0 upgraden, können Pod-Fehler im Zusammenhang mit etcd-Ereignissen den Vorgang verzögern. Insbesondere schlägt der Upgrade-Knotenjob für den Schritt TASK [etcd_events_install : Run etcdevents] fehl.

Wenn Sie von diesem Problem betroffen sind, werden Pod-Fehler wie die folgenden angezeigt:

  • Der Pod kube-apiserver kann mit dem folgenden Fehler nicht gestartet werden:
    connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:2382: connect: connection refused"
    
  • Der Pod etcd-events kann nicht mit dem folgenden Fehler gestartet werden:
    Error: error syncing endpoints with etcd: context deadline exceeded
    

Workaround:

Wenn Sie Ihren Cluster nicht auf eine Version mit dieser Version aktualisieren können, verwenden Sie die folgende vorübergehende Problemumgehung, um die Fehler zu beheben:

  1. Greifen Sie mit SSH auf den Knoten der Steuerungsebene mit den gemeldeten Fehlern zu.
  2. Bearbeiten Sie die Manifestdatei /etc/kubernetes/manifests/etcd-events.yaml von etcd-events und entfernen Sie das Flag initial-cluster-state=existing.
  3. Wenden Sie das Manifest an.
  4. 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 verwendet GKE on Bare Metal immer Random.

Dieses Problem tritt auf, weil die CoreDNS-Vorlage nicht aktualisiert wurde. Dadurch wird orderPolicy ignoriert.


Workaround:

Aktualisieren Sie die CoreDNS-Vorlage und wenden Sie die Korrektur an. Diese Problembehebung bleibt bis zu einem Upgrade bestehen.

  1. Bearbeiten Sie die vorhandene Vorlage:
    kubectl edit cm -n kube-system coredns-template
    
    Ersetzen Sie den Inhalt der Vorlage durch Folgendes:
    coredns-template: |-
      .:53 {
        errors
        health {
          lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
    {{- if .PrivateGoogleAccess }}
        import zones/private.Corefile
    {{- end }}
    {{- if .RestrictedGoogleAccess }}
        import zones/restricted.Corefile
    {{- end }}
        prometheus :9153
        forward . {{ .UpstreamNameservers }} {
          max_concurrent 1000
          {{- if ne .OrderPolicy "" }}
          policy {{ .OrderPolicy }}
          {{- end }}
        }
        cache 30
    {{- if .DefaultDomainQueryLogging }}
        log
    {{- end }}
        loop
        reload
        loadbalance
    }{{ range $i, $stubdomain := .StubDomains }}
    {{ $stubdomain.Domain }}:53 {
      errors
    {{- if $stubdomain.QueryLogging }}
      log
    {{- end }}
      cache 30
      forward . {{ $stubdomain.Nameservers }} {
        max_concurrent 1000
        {{- if ne $.OrderPolicy "" }}
        policy {{ $.OrderPolicy }}
        {{- end }}
      }
    }
    {{- end }}
    
Netzwerk, Betrieb 1,10, 1,11, 1,12, 1,13, 1,14

Netzwerk-Gateway für GDC-Komponenten aufgrund fehlender Prioritätsklasse entfernt oder ausstehend

Netzwerk-Gateway-Pods in kube-system können den Status Pending oder Evicted anzeigen, wie in der folgenden komprimierten Beispielausgabe gezeigt:

$ kubectl -n kube-system get pods | grep ang-node
ang-node-bjkkc     2/2     Running     0     5d2h
ang-node-mw8cq     0/2     Evicted     0     6m5s
ang-node-zsmq7     0/2     Pending     0     7h

Diese Fehler weisen auf Bereinigungsereignisse hin oder darauf, dass Pods aufgrund von Knotenressourcen nicht geplant werden können. Da Netzwerk-Gateway für 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 DaemonSet ang-node, 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 aus.

Als kurzfristige Lösung können Sie dem Netzwerk-Gateway für GDC-Komponenten manuell eine PriorityClass zuweisen. Der GKE on Bare Metal-Controller überschreibt diese manuellen Änderungen während eines Abgleichsprozesses, z. B. während eines Clusterupgrades.

  • Weisen Sie den Clustercontroller-Deployments ang-controller-manager und autoscaler die PriorityClass system-cluster-critical zu.
  • Weisen Sie dem DaemonSet des Knotens ang-daemon die PriorityClass system-node-critical zu.
Installation, Upgrades und Updates 1.15.0, 1.15.1, 1.15.2

Clustererstellung und ‐upgrades schlagen aufgrund der Länge des Clusternamens fehl

Das Erstellen von Clustern der Version 1.15.0, 1.15.1 oder 1.15.2 oder das Upgrade von Clustern auf Version 1.15.0, 1.15.1 oder 1.15.2 schlägt fehl, wenn der Clustername mehr als 48 Zeichen (Version 1.15.0) oder 45 Zeichen (Version 1.15.1 oder 1) umfasst. Beim Erstellen und Aktualisieren von Clustern erstellt GKE on Bare Metal eine Systemdiagnose-Ressource mit einem Namen, der den Namen und die Version des Clusters enthält:

  • Bei Clustern der Version 1.15.0 lautet der Ressourcenname für die Systemdiagnose CLUSTER_NAME-add-ons-CLUSTER_VER.
  • Bei Clustern der Version 1.15.1 oder 1.15.2 lautet der Ressourcenname für die Systemdiagnose CLUSTER_NAME-kubernetes-CLUSTER_VER.

Bei langen Clusternamen überschreitet der Name der Systemdiagnose-Ressource die Kubernetes-Beschränkung für Labelnamen mit 63 Zeichen. Dadurch kann die Systemdiagnose-Ressource nicht erstellt werden. Ohne eine erfolgreiche Systemdiagnose schlägt der Clustervorgang fehl.

Wenn Sie feststellen möchten, ob Sie von diesem Problem betroffen sind, verwenden Sie kubectl describe, um die ausgefallene Ressource zu prüfen:

kubectl describe healthchecks.baremetal.cluster.gke.io \
    HEALTHCHECK_CR_NAME -n CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG

Wenn dieses Problem dich betrifft, enthält die Antwort eine Warnung für ein ReconcileError wie die folgende:

...
Events:
  Type     Reason          Age                   From                    Message
  ----     ------          ----                  ----                    -------
  Warning  ReconcileError  77s (x15 over 2m39s)  healthcheck-controller  Reconcile error, retrying: 1 error occurred:
           * failed to create job for health check
db-uat-mfd7-fic-hybrid-cloud-uk-wdc-cluster-02-kubernetes-1.15.1: Job.batch
"bm-system-db-uat-mfd7-fic-hybrid-cloud-u24d5f180362cffa4a743" is invalid: [metadata.labels: Invalid
value: "db-uat-mfd7-fic-hybrid-cloud-uk-wdc-cluster-02-kubernetes-1.15.1": must be no more than 63
characters, spec.template.labels: Invalid value:
"db-uat-mfd7-fic-hybrid-cloud-uk-wdc-cluster-02-kubernetes-1.15.1": must be no more than 63 characters]

Problemumgehung

Wenn Sie die Blockierung des Clusterupgrades oder der Clustererstellung aufheben möchten, können Sie die Systemdiagnose umgehen. Verwenden Sie den folgenden Befehl, um die benutzerdefinierte Systemdiagnose-Ressource mit Übergabe-Status zu patchen: (status: {pass: true})

kubectl patch healthchecks.baremetal.cluster.gke.io \
    HEALTHCHECK_CR_NAME -n CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG --type=merge \
    --subresource status --patch 'status: {pass: true}'
Upgrades und Updates 1,14, 1,15

Cluster der Versionen 1.14.0 und 1.14.1 mit Vorschaufunktionen können nicht auf Version 1.15.x aktualisiert werden.

Wenn für die Cluster der Version 1.14.0 und 1.14.1 eine Vorschaufunktion aktiviert ist, wird das Upgrade auf Version 1.15.x für die Cluster blockiert. Dies gilt für Vorschaufeatures wie die Möglichkeit, einen Cluster ohne kube-proxy zu erstellen, der mit der folgenden Annotation in der Clusterkonfigurationsdatei aktiviert wird:

preview.baremetal.cluster.gke.io/kube-proxy-free: "enable"

Wenn Sie von diesem Problem betroffen sind, wird während des Clusterupgrades eine Fehlermeldung wie die folgende angezeigt:

[2023-06-20 23:37:47+0000] error judging if the cluster is managing itself:
error to parse the target cluster: error parsing cluster config: 1 error
occurred:

Cluster.baremetal.cluster.gke.io "$cluster-name" is invalid:
Annotations[preview.baremetal.cluster.gke.io/$preview-feature-name]:
Forbidden: preview.baremetal.cluster.gke.io/$preview-feature-name feature
isn't supported in 1.15.1 Anthos Bare Metal version

Dieses Problem wurde in Clustern ab Version 1.14.2 behoben.


Workaround:

Wenn Sie Ihre Cluster vor dem Upgrade auf Version 1.15.x nicht auf Version 1.14.2 oder höher upgraden können, können Sie mithilfe eines Bootstrap-Clusters direkt auf Version 1.15.x upgraden:

bmctl upgrade cluster --use-bootstrap=true
Vorgang 1.15

Cluster der Version 1.15 akzeptieren keine doppelten Floating-IP-Adressen

Mit Network Gateway for GDC können Sie keine neuen benutzerdefinierten NetworkGatewayGroup-Ressourcen erstellen, die IP-Adressen in spec.floatingIPs enthalten, die bereits in vorhandenen benutzerdefinierten NetworkGatewayGroup-Ressourcen verwendet werden. Diese Regel wird durch einen Webhook in GKE on Bare-Metal-Clustern ab Version 1.15.0 erzwungen. Bereits vorhandene doppelte Floating-IP-Adressen verursachen keine Fehler. Der Webhook verhindert nur das Erstellen neuer benutzerdefinierter NetworkGatewayGroups-Ressourcen, die doppelte IP-Adressen enthalten.

Die Webhook-Fehlermeldung enthält die in Konflikt stehende IP-Adresse und die vorhandene benutzerdefinierte Ressource, die sie bereits verwendet:

IP address exists in other gateway with name default

In der ersten Dokumentation für erweiterte Netzwerkfeatures wie das NAT-Gateway für ausgehenden Traffic wird nicht vor doppelten IP-Adressen gewarnt. Anfangs wurde nur die NetworkGatewayGroup-Ressource default vom Abgleich erkannt. Network Gateway for 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:

  1. Verwenden Sie den folgenden Befehl, um benutzerdefinierte NetworkGatewayGroups-Ressourcen aufzulisten:
    kubectl get NetworkGatewayGroups --kubeconfig ADMIN_KUBECONFIG \
        -n kube-system -o yaml
    
  2. Öffnen Sie vorhandene benutzerdefinierte NetworkGatewayGroup-Ressourcen und entfernen Sie alle in Konflikt stehenden Floating-IP-Adressen (spec.floatingIPs):
    kubectl edit NetworkGatewayGroups --kubeconfig ADMIN_KUBECONFIG \
        -n kube-system RESOURCE_NAME
    
  3. Schließen und speichern Sie die bearbeiteten benutzerdefinierten Ressourcen, um die Änderungen zu übernehmen.
VM-Laufzeit auf GDC 1.13.7

VMs werden möglicherweise nicht in Clustern mit Version 1.13.7 gestartet, die eine private Registry verwenden

Wenn Sie die VM-Laufzeit auf GDC in einem neuen oder aktualisierten Cluster der Version 1.13.7 aktivieren, der eine private Registry verwendet, werden VMs, die eine Verbindung zum Knotennetzwerk herstellen oder eine GPU verwenden, möglicherweise nicht richtig gestartet. Dieses Problem ist darauf zurückzuführen, dass einige System-Pods im Namespace vm-system Image-Abruffehler erhalten. Wenn Ihre VM beispielsweise das Knotennetzwerk verwendet, melden einige Pods möglicherweise Image-Abruffehler wie die folgenden:

macvtap-4x9zp              0/1   Init:ImagePullBackOff  0     70m

Dieses Problem wurde in Version 1.14.0 und höher von GKE on Bare-Metal-Clustern behoben.

Problemumgehung

Wenn Sie Ihre Cluster nicht sofort aktualisieren können, können Sie Images manuell abrufen. Mit den folgenden Befehlen rufen Sie das CNI-Plug-in-Image für Macvtap für Ihre VM ab und übertragen es in Ihre private Registry:

docker pull \
    gcr.io/anthos-baremetal-release/kubevirt/macvtap-cni:v0.5.1-gke.:21
docker tag \
    gcr.io/anthos-baremetal-release/kubevirt/macvtap-cni:v0.5.1-gke.:21 \
    REG_HOST/anthos-baremetal-release/kubevirt/macvtap-cni:v0.5.1-gke.:21
docker push \
    REG_HOST/anthos-baremetal-release/kubevirt/macvtap-cni:v0.5.1-gke.:21

Ersetzen Sie REG_HOST durch den Domainnamen eines Hosts, den Sie lokal gespiegelt haben.

Installation 1,11, 1,12

Beim Erstellen des Clusters im Typcluster kann der Pod „gke-metric-agent“ nicht gestartet werden

Während der Clustererstellung im Typcluster kann der Pod „gke-metrics-agent“ aufgrund eines folgenden Fehlers beim Abrufen von 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 finden Sie im containerd-Log des Bootstrap-Clusters den folgenden Eintrag:

Sep 13 23:54:20 bmctl-control-plane containerd[198]: time="2022-09-13T23:54:20.378172743Z" level=info msg="PullImage \"gcr.io/gke-on-prem-staging/gke-metrics-agent:1.8.3-anthos.2\" " Sep 13 23:54:21 bmctl-control-plane containerd[198]: time="2022-09-13T23:54:21.057247258Z" level=error msg="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 angezeigt, dass der Abruf fehlgeschlagen ist:

gcr.io/gke-on-prem-staging/gke-metrics-agent

Problemumgehung

Trotz der Fehler wird die Clustererstellung nicht blockiert, da der Zweck des Pods „gke-metrics-agent“ im Typcluster darin besteht, die Erfolgsquote der Clustererstellung zu erleichtern und internes Tracking und Monitoring zu ermöglichen. In diesem Fall können Sie diesen Fehler ignorieren.

Problemumgehung

Trotz der Fehler wird die Clustererstellung nicht blockiert, da der Zweck des Pods „gke-metrics-agent“ im Typcluster darin besteht, die Erfolgsquote der Clustererstellung zu erleichtern und internes Tracking und Monitoring zu ermöglichen. In diesem Fall können Sie diesen Fehler ignorieren.

Betrieb, 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 Kernel-Version 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 Kernel-Version auf dem LoadBalancer-Knoten mit dem Befehl uname -a.


Workaround:

Aktualisieren Sie den LoadBalancer-Knoten auf die Kernel-Version kernel-4.18.0-372.46.1.el8_6 oder höher. Diese Kernel-Version 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 Knotenneustart

Nach dem Neustart eines Knotens können zeitweise Verbindungsprobleme für einen NodePort- oder LoadBalancer-Dienst auftreten. Beispielsweise können zeitweise Fehler beim TLS-Handshake oder beim Zurücksetzen der Verbindung auftreten. Dieses Problem wurde für die Clusterversion 1.14.1 und höher behoben.

Wenn Sie prüfen möchten, ob Sie von diesem Problem betroffen sind, sehen Sie sich die iptables-Weiterleitungsregeln auf Knoten an, auf denen der Back-End-Pod für den betroffenen Dienst ausgeführt wird:

sudo iptables -L FORWARD

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, auf dem das Problem besteht:

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 Knoten neu, der falsch konfiguriert ist. Nachdem Sie den anetd-Pod neu gestartet haben, sollte die Weiterleitungsregel in iptables korrekt 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

Für die Vorschaufunktion bleiben die ursprünglichen Berechtigungen und Informationen zum Inhaber nicht erhalten

Die Vorabversion eines 1.9.x-Clusters mit bmctl 1.9.x behält nicht die ursprünglichen Berechtigungen und Inhaberinformationen. Extrahieren Sie die gesicherte Datei mit dem folgenden Befehl, um zu prüfen, ob Sie von diesem Feature betroffen sind:

tar -xzvf BACKUP_FILE

Problemumgehung

Prüfen Sie, ob metadata.json vorhanden ist und bmctlVersion 1.9.x ist. Wenn metadata.json nicht vorhanden ist, führen Sie ein Upgrade auf den 1.10.x-Cluster durch und verwenden Sie bmctl 1.10.x zum Sichern/Wiederherstellen.

Upgrades und Kreationen 1.14.2

clientconfig-operator bleibt bei CreateContainerConfigError im Status „Ausstehend“

Wenn Sie ein Upgrade auf einen Cluster der Version 1.14.2 mit einer OIDC/LDAP-Konfiguration durchgeführt oder einen solchen erstellt haben, bleibt der Pod clientconfig-operator möglicherweise im Status „Ausstehend“ hängen. Bei diesem Problem gibt es zwei clientconfig-operator-Pods, einer im Status „Wird ausgeführt“ und der andere im Status „Ausstehend“.

Dieses Problem betrifft nur Cluster der Version 1.14.2. Frühere Clusterversionen wie 1.14.0 und 1.14.1 sind nicht betroffen. Dieses Problem wurde in Version 1.14.3 und allen nachfolgenden Releases, einschließlich 1.15.0 und höher, behoben.


Workaround:

Als Behelfslösung können Sie die clientconfig-operator-Bereitstellung patchen, um zusätzlichen Sicherheitskontext hinzuzufügen und die Bereitstellung sicherzustellen.

Verwenden Sie den folgenden Befehl, um clientconfig-operator im Zielcluster zu patchen:

kubectl patch deployment clientconfig-operator -n kube-system \
    -p '{"spec":{"template":{"spec":{"containers": [{"name":"oidcproxy","securityContext":{"runAsGroup":2038,"runAsUser":2038}}]}}}}' \
    --kubeconfig CLUSTER_KUBECONFIG

Ersetzen Sie Folgendes:

  • CLUSTER_KUBECONFIG: der Pfad der kubeconfig-Datei für den Zielcluster.
Vorgang 1,11, 1,12, 1,13, 1,14, 1,15

Die Rotation der Zertifizierungsstelle schlägt bei Clustern 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 Nachricht aus, bevor er nicht mehr reagiert:

Signing CA completed in 3/0 control-plane nodes

In diesem Fall schlägt der Befehl fehl. Das Log der Zertifizierungsstelle für die Rotation bei einem Cluster mit drei Steuerungsebenen kann Einträge wie die folgenden enthalten:

[2023-06-14 22:33:17+0000] waiting for all nodes to trust CA bundle OK
[2023-06-14 22:41:27+0000] waiting for first round of pod restart to complete OK
Signing CA completed in 0/0 control-plane nodes
Signing CA completed in 1/0 control-plane nodes
Signing CA completed in 2/0 control-plane nodes
Signing CA completed in 3/0 control-plane nodes
...
Unable to connect to the server: x509: certificate signed by unknown
authority (possibly because of "crypto/rsa: verification error" while
trying to verify candidate authority certificate "kubernetes")

Problemumgehung

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 Absturzschleifen in Dual-Stack-Clustern

Wenn Sie einen Dual-Stack-Cluster (einen Cluster mit IPv4- und IPv6-Adressen) bereitstellen, können die ipam-controller-manager-Pods in einer Absturzschleife auftreten. 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.

Prüfen Sie, ob die ipam-controller-manager-Pods mit CrashLoopBackOff-Fehlern fehlschlagen, um festzustellen, ob Sie von diesem Problem betroffen sind:

kubectl -n kube-system get pods | grep  ipam-controller-manager

Die folgende Beispielausgabe zeigt Pods mit dem Status CrashLoopBackOff:

ipam-controller-manager-h7xb8   0/1  CrashLoopBackOff   3 (19s ago)   2m ipam-controller-manager-vzrrf   0/1  CrashLoopBackOff   3 (19s ago)   2m1s
ipam-controller-manager-z8bdw   0/1  CrashLoopBackOff   3 (31s ago)   2m2s

Rufen Sie Details zum Knoten mit dem Status NotReady ab:

kubectl describe node <node-name> | grep PodCIDRs

In einem Cluster mit diesem Problem sind einem Knoten keine PodCIDRs zugewiesen, wie in der folgenden Beispielausgabe gezeigt:

PodCIDRs:

In einem fehlerfreien Cluster sollten allen Knoten Dual-Stack-Pod-CIDRs zugewiesen sein, wie in der folgenden Beispielausgabe gezeigt:

PodCIDRs:    192.168.6.0/24,222:333:444:555:5:4:7:0/120

Workaround:

Starten Sie die ipam-controller-manager Pods neu:

kubectl -n kube-system rollout restart ds ipam-controller-manager
Vorgang 1,6, 1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13 und 1,14

EZD-Smartwatch-Aushunger

Bei Clustern, auf denen die etcd-Version 3.4.13 oder niedriger ausgeführt wird, kann es zu einem Watch-Mangel und nicht operativen Ressourcen-Uhren kommen, was zu folgenden Problemen führen kann:

  • Pod-Planung ist unterbrochen
  • Knoten können nicht registriert werden
  • Kubelet beobachtet keine Pod-Änderungen

Diese Probleme können dazu führen, dass der Cluster nicht mehr funktioniert.

Dieses Problem wurde in GDCV für Bare-Metal-Version 1.12.9, 1.13.6, 1.14.3 und nachfolgenden Releases behoben. Diese neueren Releases verwenden die etcd-Version 3.4.21. Von diesem Problem sind alle früheren Versionen von GDCV für Bare Metal betroffen.

Problemumgehung

Wenn Sie kein sofortiges Upgrade durchführen können, können Sie das Risiko eines Clusterausfalls verringern, indem Sie die Anzahl der Knoten im Cluster reduzieren. Entfernen Sie Knoten, bis der Messwert etcd_network_client_grpc_sent_bytes_total unter 300 Mbit/s liegt.

So rufen Sie diesen Messwert im Metrics Explorer auf:

  1. Rufen Sie in der Google Cloud Console den Metrics Explorer auf:

    Zum Metrics Explorer

  2. Wählen Sie den Tab Konfiguration aus.
  3. Maximieren Sie Messwert auswählen, geben Sie Kubernetes Container in die Filterleiste ein und wählen Sie dann über die Untermenüs den Messwert aus:
    1. Wählen Sie im Menü Aktive Ressourcen die Option Kubernetes-Container aus.
    2. Wählen Sie im Menü Aktive Messwertkategorien die Option Anthos aus.
    3. Wählen Sie im Menü Aktive Messwerte die Option etcd_network_client_grpc_sent_bytes_total aus.
    4. Klicken Sie auf „Anwenden“.
Netzwerk 1.11.6, 1.12.3

vfio-pci-Modus des SR-IOV-Operators: Status „Fehlgeschlagen“

Der syncStatus des SriovNetworkNodeState-Objekts kann den Wert „Fehlgeschlagen“ für einen konfigurierten Knoten melden. Führen Sie den folgenden Befehl aus, um den Status eines Knotens anzusehen und festzustellen, ob das Problem Sie betrifft:

kubectl -n gke-operators get \
    sriovnetworknodestates.sriovnetwork.k8s.cni.cncf.io NODE_NAME \
    -o jsonpath='{.status.syncStatus}'

Ersetzen Sie NODE_NAME durch den Namen des zu prüfenden Knotens.


Workaround:

Wenn der Objektstatus SriovNetworkNodeState „Fehlgeschlagen“ ist, führen Sie ein Upgrade des Clusters auf Version 1.11.7 oder höher bzw. Version 1.12.4 oder höher aus.

Upgrades und Updates 1.10, 1.11, 1.12, 1.13, 1.14.0, 1.14.1

Einige Worker-Knoten befinden sich nach dem Upgrade nicht im Status „Bereit“

Nach Abschluss des Upgrades ist bei einigen Worker-Knoten die Bedingung „Bereit“ auf false gesetzt. Auf 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 dem angehaltenen Computer anmelden, ist die CNI-Konfiguration auf dem Computer leer:

sudo ls /etc/cni/net.d/

Problemumgehung

Starten Sie den Pod anetd 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 diesem:

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 unter folgenden Umständen auftreten:

  • Wenn Sie zwei manuelle, vom cert Manager ausgestellte Zertifikatsrotationen in einem Cluster ausgeführt haben, die älter als 180 Tage sind, und den anthos-cluster-operator nie neu gestartet haben.
  • Wenn Sie eine manuelle cert-manager-Zertifikatsrotation in einem Cluster ausgeführt haben, der älter als 90 Tage ist, und anthos-cluster-operator noch nie neu gestartet haben.

Problemumgehung

Starten Sie den Pod neu, indem Sie anthos-cluster-operator beenden.

Upgrades und Updates 1.14.0

Veraltete Lebenszyklus-Controller-Deployer-Pods, die beim Nutzerclusterupgrade erstellt wurden

In Version 1.14.0-Administratorclustern werden bei Upgrades von Nutzerclustern möglicherweise ein oder mehrere veraltete Lebenszyklus-Controller-Deployer-Pods erstellt. Dieses Problem betrifft Nutzercluster, die ursprünglich mit Versionen vor 1.12 erstellt wurden. Die unbeabsichtigt erstellten Pods behindern Upgradevorgänge nicht, können aber in einem unerwarteten Zustand gefunden werden. Wir empfehlen, die veralteten Pods zu entfernen.

Dieses Problem wurde in Version 1.14.1 behoben.

Workaround:

So entfernen Sie die veralteten Bereitstellungs-Pods des Lebenszyklus-Controllers:

  1. Ressourcen für Preflight-Prüfungen auflisten:
    kubectl get preflightchecks --kubeconfig ADMIN_KUBECONFIG -A
    

    Sie erhalten folgende Ausgabe:

    NAMESPACE                    NAME                      PASS   AGE
    cluster-ci-87a021b9dcbb31c   ci-87a021b9dcbb31c        true   20d
    cluster-ci-87a021b9dcbb31c   ci-87a021b9dcbb31cd6jv6   false  20d
    

    Dabei ist ci-87a021b9dcbb31c der Clustername.

  2. Ressourcen löschen, deren Wert in der Spalte BESTANDEN entweder true oder false ist.

    Verwenden Sie beispielsweise die folgenden Befehle, um die Ressourcen aus der vorherigen Beispielausgabe zu löschen:

    kubectl delete preflightchecks ci-87a021b9dcbb31c \
        -n cluster-ci-87a021b9dcbb31c \
        --kubeconfig ADMIN_KUBECONFIG 
    kubectl delete preflightchecks ci-87a021b9dcbb31cd6jv6 \
        -n cluster-ci-87a021b9dcbb31c \
        --kubeconfig ADMIN_KUBECONFIG
    
Netzwerk 1,9, 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28

Der Status BGPSession ändert sich aufgrund einer großen Anzahl eingehender Routen kontinuierlich

Im erweiterten GKE on Bare Metal-Netzwerk werden BGP-Sitzungen nicht korrekt verwaltet, wenn externe Peers eine große Anzahl von Routen (etwa 100 oder mehr) anbieten. Bei einer großen Anzahl von eingehenden Routen braucht der lokale BGP-Controller des Knotens zu lange für den Abgleich von BGP-Sitzungen und kann den Status nicht aktualisieren. Das Fehlen von Statusaktualisierungen oder eine Systemdiagnose führt dazu, dass die Sitzung gelöscht wird, da sie veraltet ist.

Unerwünschtes Verhalten bei BGP-Sitzungen, das Sie möglicherweise bemerken und auf ein Problem hinweisen können, ist beispielsweise:

  • Kontinuierliches Löschen und Wiederherstellen von bgpsession.
  • bgpsession.status.state wird nie zu Established
  • Routen, die nicht beworben werden oder wiederholt beworben und zurückgezogen werden.

Probleme beim BGP-Load-Balancing können bei Verbindungsproblemen zu LoadBalancer-Diensten auftreten.

Das BGP-Problem FlatIP kann mit Verbindungsproblemen zu Pods auftreten.

Ermitteln Sie, ob Ihre BGP-Probleme dadurch verursacht werden, dass Remote-Peers zu viele Routen bewerben. Prüfen Sie mit den folgenden Befehlen den zugehörigen Status und die zugehörige Ausgabe:

  • Verwenden Sie kubectl get bgpsessions für den betroffenen Cluster. Die Ausgabe zeigt bgpsessions mit dem Status „Nicht eingerichtet“. Die letzte Berichtszeit wird kontinuierlich bis etwa 10 bis 12 Sekunden gezählt, bevor sie auf null zurückgesetzt wird.
  • Die Ausgabe von kubectl get bgpsessions zeigt, dass die betroffenen Sitzungen wiederholt neu erstellt werden:
    kubectl get bgpsessions \
        -o jsonpath="{.items[*]['metadata.name', 'metadata.creationTimestamp']}"
    
  • Lognachrichten zeigen an, dass veraltete BGP-Sitzungen gelöscht werden:
    kubectl logs ang-controller-manager-POD_NUMBER
    

    Ersetzen Sie POD_NUMBER durch den Leader-Pod in Ihrem Cluster.


Workaround:

Reduzieren oder entfernen Sie die Anzahl der vom Remote-Peer zum Cluster beworbenen Routen mit einer Exportrichtlinie.

In GKE on Bare Metal-Clusterversion 1.14.2 und höher können Sie auch das Feature deaktivieren, das empfangene Routen mit einem AddOnConfiguration verarbeitet. Fügen Sie dem bgpd-Container des ang-daemon-Daemonsets das Argument --disable-received-routes hinzu.

Netzwerk 1,14, 1,15, 1,16, 1,28

Anwendungszeitüberschreitungen, die durch Fehler beim Einfügen von Conntrack-Tabellen verursacht werden

Cluster, die auf einem Ubuntu-Betriebssystem mit Kernel 5.15 oder höher ausgeführt werden, sind anfällig für Fehler beim Einfügen von Tabellen mit Netfilter-Verbindungsverfolgung (Conntrack). Einfügungsfehler können auch dann auftreten, wenn in der Conntrack-Tabelle Platz für neue Einträge vorhanden ist. Die Fehler werden durch Änderungen in Kernel 5.15 und höher verursacht, die das Einfügen von Tabellen je nach Kettenlänge einschränken.

Um festzustellen, ob Sie von diesem Problem betroffen sind, können Sie die Systemstatistiken der In-Kernel-Verbindungsverfolgung mit dem folgenden Befehl überprüfen:

sudo conntrack -S

Die Antwort sieht so aus:

cpu=0       found=0 invalid=4 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=1       found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=2       found=0 invalid=16 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=3       found=0 invalid=13 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=4       found=0 invalid=9 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=5       found=0 invalid=1 insert=0 insert_failed=0 drop=0 early_drop=0 error=519 search_restart=0 clash_resolve=126 chaintoolong=0
...

Wenn ein chaintoolong-Wert in der Antwort eine Zahl ungleich null ist, sind Sie von diesem Problem betroffen.

Problemumgehung

Zur vorläufigen Abhilfe können Sie die Größe der Netfiler-Hash-Tabelle (nf_conntrack_buckets) und der Netfilter-Verbindungs-Tracking-Tabelle (nf_conntrack_max) erhöhen. Verwenden Sie die folgenden Befehle auf jedem Clusterknoten, um die Tabellengröße zu erhöhen:

sysctl -w net.netfilter.nf_conntrack_buckets=TABLE_SIZE

sysctl -w net.netfilter.nf_conntrack_max=TABLE_SIZE

Ersetzen Sie TABLE_SIZE durch die neue Größe in Byte. Der Standardwert für die Tabellengröße ist 262144. Es empfiehlt sich, einen Wert festzulegen, 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.

Upgrades und Updates 1.11.3, 1.11.4, 1.11.5, 1.11.6, 1.11.7, 1.11.8, 1.12.4, 1.12.5, 1.12.6, 1.12.7, 1.12.8, 1.13.4, 1.13.5

Clustersicherungen mit bmctl können bei einigen Versionen nicht wiederhergestellt werden

Wir empfehlen, die Cluster vor dem Upgrade zu sichern, damit Sie die frühere Version wiederherstellen können, wenn das Upgrade nicht erfolgreich ist. Ein Problem mit dem Befehl bmctl restore cluster führt dazu, dass Sicherungen von Clustern mit den identifizierten Versionen nicht wiederhergestellt werden können. Dieses Problem betrifft nur Upgrades, bei denen Sie eine Sicherung einer früheren Version wiederherstellen.

Wenn Ihr Cluster betroffen ist, enthält das Log bmctl restore cluster den folgenden Fehler:

Error: failed to extract image paths from profile: anthos version VERSION not supported

Workaround:

Bis zur Behebung dieses Problems 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 enthält

Mit NetworkGatewayGroup können keine Daemons für Knoten erstellt werden, die nicht sowohl IPv4- als auch IPv6-Schnittstellen haben. Dies führt dazu, dass Features wie das BGP-Load-Balancing und IngressNAT fehlschlagen. Wenn Sie die Logs des fehlerhaften ang-node-Pods im Namespace kube-system prüfen, werden Fehler wie im folgenden Beispiel angezeigt, 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 ist auf der ens192-Schnittstelle keine IPv6-Adresse vorhanden. Ähnliche ARP-Fehler werden angezeigt, wenn dem Knoten eine IPv4-Adresse fehlt.

NetworkGatewayGroup versucht, eine ARP-Verbindung 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 fährt nicht weiter.

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-Adresse enthält, eine IPv4- oder IPv6-Adresse hinzu. Im vorherigen Beispiellogeintrag war diese Schnittstelle ens192:

ip address add dev INTERFACE scope link ADDRESS

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

Absturzschleife von anthos-cluster-operator beim Entfernen eines Knotens der Steuerungsebene

Wenn Sie versuchen, einen Knoten der Steuerungsebene durch Entfernen der IP-Adresse aus dem Cluster.Spec zu entfernen, tritt der anthos-cluster-operator in eine Absturzschleife auf, die alle anderen Vorgänge blockiert.


Workaround:

Das Problem wurde in 1.13.3 und 1.14.0 und höher behoben. Alle anderen Versionen sind davon betroffen. Upgrade auf eine der korrigierten Versionen ausführen

Um das Problem zu umgehen, führen Sie den folgenden Befehl aus:

kubectl label baremetalmachine IP_ADDRESS \
    -n CLUSTER_NAMESPACE baremetal.cluster.gke.io/upgrade-apply-

Ersetzen Sie Folgendes:

  • IP_ADDRESS: Die IP-Adresse des Knotens in einer Absturzschleife.
  • 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 Tokenabweichungen fehl

Wenn Sie GKE in Bare-Metal-Clustern mit einer großen Anzahl von Knoten installieren, wird möglicherweise eine kubeadmin join-Fehlermeldung ähnlich dem 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 GDCV für Bare-Metal-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. Passen Sie dann die Größe des Clusters an und fügen Sie nach Abschluss der Installation weitere Knoten hinzu.

Logging und Monitoring 1.10, 1.11, 1.12, 1.13.0

Niedriges CPU-Limit für metrics-server in Edge-Clustern

In GKE on Bare-Metal-Edge-Clustern können niedrige CPU-Limits für metrics-server zu häufigen Neustarts von metrics-server führen. Horizontales Pod-Autoscaling (HPA) funktioniert nicht, weil metrics-server fehlerhaft ist.

Wenn das CPU-Limit für metrics-server unter 40m liegt, können Ihre Cluster betroffen sein. Prüfen Sie die CPU-Limits metrics-server in einer der folgenden Dateien:

  • GKE on Bare Metal-Cluster Version 1.x-1.12:
    kubectl get deployment metrics-server -n kube-system \
        -o yaml > metrics-server.yaml
    
  • GKE on Bare Metal-Cluster Version 1.13 oder höher:
    kubectl get deployment metrics-server -n gke-managed-metrics-server \
        -o yaml > metrics-server.yaml
    

Workaround:

Dieses Problem wurde in GKE on Bare-Metal-Clustern ab Version 1.13.1 behoben. Aktualisieren Sie Ihre Cluster, um dieses Problem zu beheben.

Eine kurzfristige Problemumgehung besteht darin, die CPU-Limits für metrics-server manuell zu erhöhen, bis Sie Cluster upgraden können:

  1. metrics-server-operator herunterskalieren:
    kubectl scale deploy metrics-server-operator --replicas=0
  2. Aktualisieren Sie die Konfiguration und erhöhen Sie die CPU-Limits:
    • GKE on Bare Metal-Cluster Version 1.x-1.12:
      kubectl -n kube-system edit deployment metrics-server
    • GKE on Bare Metal-Cluster Version 1.13:
      kubectl -n gke-managed-metrics-server edit deployment metrics-server

    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
    [...]
    
  3. Speichern und schließen Sie metrics-server, um die Änderungen zu übernehmen.
Netzwerk 1,14, 1,15, 1,16

Direkte NodePort-Verbindung zum hostNetwork-Pod funktioniert nicht

Die Verbindung zu einem Pod, der über den NodePort-Dienst mit hostNetwork aktiviert wurde, schlägt fehl, wenn sich der Back-End-Pod auf demselben Knoten wie der gewünschte NodePort befindet. Dieses Problem betrifft LoadBalancer-Dienste, wenn sie mit hostNetwork-ed Pods verwendet werden. Bei mehreren Back-Ends kann es zu einem sporadischen Verbindungsfehler kommen.

Dieses Problem wird durch einen Fehler im eBPF-Programm verursacht.


Workaround:

Wenn Sie einen Nodeport-Dienst verwenden, wählen Sie nicht den Knoten aus, auf dem einer der Back-End-Pods ausgeführt wird. Achten Sie bei Verwendung des LoadBalancer-Dienstes darauf, dass die Pods mit hostNetwork nicht auf LoadBalancer-Knoten ausgeführt werden.

Upgrades und Updates 1.12.3, 1.13.0

1.13.0-Administratorcluster können keine 1.12.3-Nutzercluster verwalten

Administratorcluster mit Version 1.13.0 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 der Administratorcluster durch.

Upgrades und Updates 1.12

Das Upgrade auf 1.13.x wird für Administratorcluster mit Worker-Knotenpools blockiert

Administratorcluster der Version 1.13.0 und höher können keine Worker-Knotenpools enthalten. Upgrades auf Version 1.13.0 oder höher für Administratorcluster mit Worker-Knotenpools werden blockiert. Wenn das Upgrade des Administratorclusters angehalten wird, können Sie prüfen, ob Worker-Knotenpools die Ursache sind. Prüfen Sie dazu den folgenden Fehler in der Datei upgrade-cluster.log im Ordner bmctl-workspace:

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 Eingabe und geplante Änderungen rückgängig.

So können Sie beispielsweise versuchen, die benutzerdefinierte Ressource Stackdriver so zu bearbeiten, dass Sie zuerst die Ressource abrufen und dann eine aktualisierte Version anwenden:

  1. Rufen Sie die vorhandene YAML-Definition ab:
    kubectl get stackdriver -n kube-system stackdriver \
        -o yaml > stackdriver.yaml
    
  2. Aktivieren Sie Features oder aktualisieren Sie die Konfiguration in der YAML-Datei.
  3. Wenden Sie die aktualisierte YAML-Datei wieder an:
    kubectl apply -f stackdriver.yaml
    

Im letzten Schritt für kubectl apply können Probleme auftreten.


Workaround:

Verwenden Sie kubectl apply nicht, um Änderungen an vorhandenen Ressourcen vorzunehmen. Verwende stattdessen kubectl edit oder kubectl patch, wie in den folgenden Beispielen gezeigt:

  1. Bearbeiten Sie die benutzerdefinierte Ressource Stackdriver:
    kubectl edit stackdriver -n kube-system stackdriver
    
  2. Aktivieren Sie Features oder aktualisieren Sie die Konfiguration in der YAML-Datei.
  3. Speichern und Editor beenden

Alternativer Ansatz mit kubectl patch:

  1. Rufen Sie die vorhandene YAML-Definition ab:
    kubectl get stackdriver -n kube-system stackdriver \
        -o yaml > stackdriver.yaml
    
  2. Aktivieren Sie Features oder aktualisieren Sie die Konfiguration in der YAML-Datei.
  3. Wenden Sie die aktualisierte YAML-Datei wieder an:
    kubectl patch stackdriver stackdriver --type merge \
        -n kube-system --patch-file stackdriver.yaml
    
Logging und Monitoring 1,12, 1,13, 1,14, 1,15, 1,16

Beschädigte Backlog-Chunks verursachen eine Absturzschleife von stackdriver-log-forwarder

Die Absturzschleifen von stackdriver-log-forwarder, wenn versucht wird, einen beschädigten Backlog-Chunk 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 diese Absturzschleife auftritt, werden in Cloud Logging keine Logs angezeigt.


Workaround:

So beheben Sie diese Fehler:

  1. Identifizieren Sie die beschädigten Backlog-Chunks. Sehen Sie sich die folgenden Beispielfehlermeldungen an:
    [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, fehlerhaft. Jede *.flb-Datei, die die Formatprüfung nicht bestanden hat, muss entfernt werden.
  2. Beenden Sie die ausgeführten Pods für stackdriver-log-forwarder:
    kubectl --kubeconfig KUBECONFIG -n kube-system \
        patch daemonset stackdriver-log-forwarder \
        -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'
    
    Ersetzen Sie KUBECONFIG durch den Pfad zur kubeconfig-Datei Ihres Nutzerclusters.

    Prüfen Sie, ob die stackdriver-log-forwarder-Pods gelöscht wurden, bevor Sie mit dem nächsten Schritt fortfahren.
  3. Stellen Sie über SSH eine Verbindung zum Knoten her, auf dem stackdriver-log-forwarder ausgeführt wird.
  4. 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 anwenden möchten, um alle Rückstände zu bereinigen, verwenden Sie die folgenden Skripts:
    1. Stellen Sie ein DaemonSet bereit, um alle schmutzigen Daten in Puffern in fluent-bit zu bereinigen:
      kubectl --kubeconfig KUBECONFIG -n kube-system apply -f - << EOF
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        name: fluent-bit-cleanup
        namespace: kube-system
      spec:
        selector:
          matchLabels:
            app: fluent-bit-cleanup
        template:
          metadata:
            labels:
              app: fluent-bit-cleanup
          spec:
            containers:
            - name: fluent-bit-cleanup
              image: debian:10-slim
              command: ["bash", "-c"]
              args:
              - |
                rm -rf /var/log/fluent-bit-buffers/
                echo "Fluent Bit local buffer is cleaned up."
                sleep 3600
              volumeMounts:
              - name: varlog
                mountPath: /var/log
              securityContext:
                privileged: true
            tolerations:
            - key: "CriticalAddonsOnly"
              operator: "Exists"
            - key: node-role.kubernetes.io/master
              effect: NoSchedule
            - key: node-role.gke.io/observability
              effect: NoSchedule
            volumes:
            - name: varlog
              hostPath:
                path: /var/log
      EOF
      
    2. Prüfen Sie, ob das DaemonSet alle Knoten bereinigt hat. Die Ausgabe der folgenden beiden Befehle sollte der Anzahl der Knoten im Cluster entsprechen:
      kubectl --kubeconfig KUBECONFIG logs \
          -n kube-system -l app=fluent-bit-cleanup | grep "cleaned up" | wc -l
      kubectl --kubeconfig KUBECONFIG \
          -n kube-system get pods -l app=fluent-bit-cleanup --no-headers | wc -l
      
    3. Löschen Sie das Bereinigungs-DaemonSet:
      kubectl --kubeconfig KUBECONFIG -n kube-system delete ds \
          fluent-bit-cleanup
      
    4. Starten Sie die stackdriver-log-forwarder-Pods neu:
      kubectl --kubeconfig KUBECONFIG \
          -n kube-system patch daemonset stackdriver-log-forwarder --type json \
          -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]'
      
Netzwerk, VM-Laufzeit auf GDC 1.14.0

Der Neustart von Dataplane V2 (anetd) in Clustern kann dazu führen, dass vorhandene VMs nicht an ein Nicht-Pod-Netzwerk angehängt werden können

In Clustern mit mehreren NICs kann ein Neustart von Dataplane V2 (anetd) dazu führen, dass virtuelle Maschinen nicht an Netzwerke angehängt werden können. In den Pod-Logs anetd kann ein ähnlicher Fehler wie der folgende auftreten:

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. Damit das Problem nicht noch einmal auftritt, führen Sie ein Upgrade Ihres Clusters auf Version 1.14.1 oder höher durch.

Vorgang 1.13, 1.14.0, 1.14.1

gke-metrics-agent hat kein Arbeitsspeicherlimit für Edge-Profilcluster

Abhängig von der Arbeitslast des Clusters kann gke-metrics-agent mehr als 4.608 MiB Arbeitsspeicher verwenden. Dieses Problem betrifft nur GKE on Bare Metal Edge-Profilcluster. Standardprofilcluster sind davon nicht betroffen.


Workaround:

Führen Sie ein Upgrade des Clusters auf Version 1.14.2 oder höher durch.

Installation 1,12, 1,13

Die Clustererstellung kann aufgrund von Race-Bedingungen fehlschlagen

Wenn Sie Cluster mit kubectl erstellen, wird die Preflight-Prüfung aufgrund von Race-Bedingungen möglicherweise nie abgeschlossen. Daher kann die Clustererstellung in bestimmten Fällen fehlschlagen.

Der Abgleich der Preflight-Prüfungen erstellt ein SecretForwarder, um das Standard-ssh-key-Secret in den Ziel-Namespace zu kopieren. In der Regel werden bei der Preflight-Prüfung die Inhaberverweise genutzt und nach Abschluss von SecretForwarder abgeglichen. In seltenen Fällen können die Inhaberverweise von SecretForwarder jedoch den Verweis auf die Preflight-Prüfung verlieren, wodurch die Preflight-Prüfung hängen bleibt. Daher schlägt die Clustererstellung fehl. Um den Abgleich für die Controller-gesteuerte Preflight-Prüfung fortzusetzen, löschen Sie den Cluster-Operator-Pod oder die Preflight-check-Ressource. Wenn Sie die Preflight-Check-Ressource löschen, wird eine neue erstellt und der Abgleich fortgesetzt. Alternativ können Sie Ihre vorhandenen Cluster, die mit einer früheren Version erstellt wurden, auf eine korrigierte Version aktualisieren.

Netzwerk 1,9, 1,10, 1,11, 1,12, 1,13, 1,14, 1,15

Reservierte IP-Adressen werden nicht freigegeben, wenn das Standort-Plug-in mit der Multi-NIC-Funktion verwendet wird

Wenn Sie in der Multi-Nic-Funktion das CNI-Standort-Plug-in verwenden und den CNI-DEL-Vorgang zum Löschen einer Netzwerkschnittstelle für einen Pod verwenden, werden einige reservierte IP-Adressen möglicherweise nicht ordnungsgemäß freigegeben. Dies geschieht, wenn der CNI DEL-Vorgang unterbrochen wird.

Sie können die nicht verwendeten IP-Adressreservierungen der Pods prüfen, indem Sie den folgenden Befehl ausführen:

kubectl get ippools -A --kubeconfig KUBECONFIG_PATH

Problemumgehung:

Löschen Sie die nicht verwendeten IP-Adressen (ippools) manuell.

Installation 1.10, 1.11.0, 1.11.1, 1.11.2

Node Problem Detector schlägt im Nutzercluster 1.10.4 fehl

Der Node Problem Detector kann in Nutzerclustern der Version 1.10.x fehlschlagen, wenn die Administratorcluster der Version 1.11.0, 1.11.1 oder 1.11.2 die Nutzercluster der Version 1.10.x verwalten. Wenn der Node Problem Detector fehlschlägt, wird das Log mit der folgenden Fehlermeldung aktualisiert:

Error - NPD not supported for anthos baremetal version 1.10.4:
anthos version 1.10.4 not supported.

Problemumgehung

Führen Sie ein Upgrade des Administratorclusters auf 1.11.3 durch, um das Problem zu beheben.

Vorgang 1,14

1,14-IPv4-Clusterknoten im Inselmodus haben eine Pod-CIDR-Maskengröße von 24

In Version 1.14 wird die Einstellung maxPodsPerNode für Cluster im Inselmodus nicht berücksichtigt. Daher wird den Knoten eine Pod-CIDR-Maskengröße von 24 (256 IP-Adressen) zugewiesen. Dies kann dazu führen, dass dem Cluster früher als erwartet keine Pod-IP-Adressen mehr zur Verfügung stehen. 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 in einem Zeitraum mit hoher Pod-Abwanderung zu Netzwerkinstabilität kommen, wenn maxPodsPerNode auf 129 oder höher festgelegt ist und im Pod-CIDR-Bereich nicht genügend Aufwand für jeden Knoten vorhanden ist.

Wenn Ihr Cluster betroffen ist, meldet der Pod anetd den folgenden Fehler, wenn Sie dem Cluster einen neuen Knoten hinzufügen und kein podCIDR verfügbar ist:

error="required IPv4 PodCIDR not available"

Problemumgehung

Gehen Sie so vor, um das Problem zu beheben:

  1. Führen Sie ein Upgrade auf 1.14.1 oder eine höhere Version durch.
  2. Entfernen Sie die Worker-Knoten und fügen Sie sie wieder hinzu.
  3. Entfernen Sie die Knoten der Steuerungsebene und fügen Sie sie wieder hinzu, vorzugsweise nacheinander, 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 der Version 1.14.0 oder 1.14.1 fehlschlagen. Wenn Sie einen Cluster von 1.14.0 auf 1.14.1 upgraden und dann versuchen, mit dem Befehl bmctl restore cluster ein Rollback auf 1.14.0 durchzuführen, wird möglicherweise ein Fehler wie der folgende zurückgegeben:

I0119 22:11:49.705596  107905 client.go:48] Operation failed, retrying with backoff.
Cause: error updating "baremetal.cluster.gke.io/v1, Kind=HealthCheck" cluster-user-ci-f3a04dc1b0d2ac8/user-ci-f3a04dc1b0d2ac8-network: admission webhook "vhealthcheck.kb.io"
denied the request: HealthCheck.baremetal.cluster.gke.io "user-ci-f3a04dc1b0d2ac8-network" is invalid:
Spec: Invalid value: v1.HealthCheckSpec{ClusterName:(*string)(0xc0003096e0), AnthosBareMetalVersion:(*string)(0xc000309690),
Type:(*v1.CheckType)(0xc000309710), NodePoolNames:[]string(nil), NodeAddresses:[]string(nil), ConfigYAML:(*string)(nil),
CheckImageVersion:(*string)(nil), IntervalInSeconds:(*int64)(0xc0015c29f8)}: Field is immutable

Workaround:

Löschen Sie alle healthchecks.baremetal.cluster.gke.io-Ressourcen unter dem Cluster-Namespace und führen Sie dann den Befehl bmctl restore cluster noch einmal aus:

  1. Alle healthchecks.baremetal.cluster.gke.io-Ressourcen auflisten:
    kubectl get healthchecks.baremetal.cluster.gke.io \
        --namespace=CLUSTER_NAMESPACE \
        --kubeconfig=ADMIN_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAMESPACE: der Namespace für den Cluster.
    • ADMIN_KUBECONFIG: der Pfad zur kubeconfig-Datei des Administratorclusters.
  2. Löschen Sie alle healthchecks.baremetal.cluster.gke.io-Ressourcen, die im vorherigen Schritt aufgeführt wurden:
    kubectl delete healthchecks.baremetal.cluster.gke.io \
        HEALTHCHECK_RESOURCE_NAME \
        --namespace=CLUSTER_NAMESPACE \
        --kubeconfig=ADMIN_KUBECONFIG
    
    Ersetzen Sie HEALTHCHECK_RESOURCE_NAME durch den Namen der Systemdiagnose-Ressourcen.
  3. Führen Sie den Befehl bmctl restore cluster noch einmal aus.
Netzwerk 1.12.0

Die externe IP-Adresse des Dienstes funktioniert im Flat-Modus nicht

In einem Cluster, für den flatIPv4 auf true gesetzt ist, sind Dienste vom Typ LoadBalancer über ihre externen IP-Adressen nicht zugänglich.

Dieses Problem wurde in Version 1.12.1 behoben.


Workaround:

Legen Sie in der ConfigMap cilium-config enable-415 auf "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 ein direktes Upgrade von 1.13.0 auf 1.14.x mit bmctl 1.14.0 und dem Flag --use-bootstrap=false ausfü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 1.13.1 durch, bevor Sie auf 1.14.x upgraden. Ein direktes Upgrade von 1.13.0 auf 1.13.1 sollte funktionieren. Alternativ können Sie ein Upgrade von 1.13.0 auf 1.14.x ohne das Flag --use-bootstrap=false ausführen.

Upgrades und Updates, Sicherheit 1,13 und 1,14

Bei Clustern, die auf 1.14.0 aktualisiert wurden, gehen Mastermarkierungen verloren

Für die Knoten der Steuerungsebene sind eine von zwei spezifischen Markierungen erforderlich, um zu verhindern, dass Arbeitslast-Pods dafür geplant werden. Wenn Sie GKE-Cluster der Version 1.13 auf Version 1.14.0 upgraden, verlieren die Knoten der Steuerungsebene die folgenden erforderlichen Markierungen:

  • node-role.kubernetes.io/master:NoSchedule
  • node-role.kubernetes.io/master:PreferNoSchedule

Dieses Problem führt nicht zu Upgradefehlern, aber es können jetzt Pods von Pods, die nicht auf den Knoten der Steuerungsebene ausgeführt werden sollten, dazu kommen. Diese Arbeitslast-Pods können Knoten der Steuerungsebene überlasten und zu Clusterinstabilität führen.

Ermitteln, ob Sie betroffen sind

  1. Suchen Sie mit dem folgenden Befehl die Knoten der Steuerungsebene:
    kubectl get node -l 'node-role.kubernetes.io/control-plane' \
        -o name --kubeconfig KUBECONFIG_PATH
    
  2. Verwenden Sie den folgenden Befehl, um die Liste der Markierungen auf einem Knoten aufzurufen:
    kubectl describe node NODE_NAME \
        --kubeconfig KUBECONFIG_PATH
    

    Wenn keine der erforderlichen Markierungen aufgeführt ist, sind Sie davon betroffen.

Problemumgehung

Führen Sie die folgenden Schritte für jeden Knoten der Steuerungsebene des betroffenen Clusters der Version 1.14.0 aus, um die ordnungsgemäße Funktion wiederherzustellen. Diese Schritte gelten für die Markierung node-role.kubernetes.io/master:NoSchedule und die zugehörigen Pods. Wenn die Knoten der Steuerungsebene die Markierung PreferNoSchedule verwenden sollen, passen Sie die Schritte entsprechend an.

Vorgang, VM-Laufzeit auf GDC 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28, 1,29

VM-Erstellung schlägt zeitweise mit Uploadfehlern fehl

Das Erstellen einer neuen virtuellen Maschine (VM) mit dem Befehl kubectl virt create vm schlägt beim Hochladen des Images selten fehl. Dieses Problem betrifft sowohl Linux- als auch Windows-VMs. Der Fehler sieht in etwa so aus:

PVC default/heritage-linux-vm-boot-dv not found DataVolume default/heritage-linux-vm-boot-dv created
Waiting for PVC heritage-linux-vm-boot-dv upload pod to be ready... Pod now ready
Uploading data to https://10.200.0.51

 2.38 MiB / 570.75 MiB [>----------------------------------------------------------------------------------]   0.42% 0s

fail to upload image: unexpected return value 500,  ...

Problemumgehung

Wiederholen Sie den Befehl kubectl virt create vm, um die VM zu erstellen.

Upgrades und Updates, Logging und Monitoring 1.11

Verwaltete Sammlungskomponenten in Clustern der Version 1.11 werden bei Upgrades auf Version 1.12 nicht beibehalten.

Komponenten der verwalteten Sammlung sind Teil von Managed Service for Prometheus. Wenn Sie Komponenten der verwalteten Sammlung im Namespace gmp-system Ihrer Cluster der Version 1.11 manuell bereitgestellt haben, bleiben die zugehörigen Ressourcen beim Upgrade auf Version 1.12 nicht erhalten.

Ab Version 1.12.0 werden Komponenten von Managed Service for Prometheus im Namespace gmp-system und zugehörige benutzerdefinierte Ressourcendefinitionen von stackdriver-operator mit dem Feld enableGMPForApplications verwaltet. Das Feld enableGMPForApplications ist standardmäßig auf true gesetzt. Wenn Sie also vor dem Upgrade auf Version 1.12 manuell Komponenten von Managed Service for Prometheus im Namespace bereitstellen, werden die Ressourcen von stackdriver-operator gelöscht.

Problemumgehung

So behalten Sie manuell verwaltete Sammlungsressourcen bei:

  1. Alle vorhandenen benutzerdefinierten PodMonitoring-Ressourcen sichern.
  2. Führen Sie ein Upgrade des Clusters auf Version 1.12 durch und aktivieren Sie Managed Service for Prometheus.
  3. Stellen Sie die benutzerdefinierten PodMonitoring-Ressourcen noch einmal im aktualisierten Cluster 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 kein Upgrade auf Version 1.13 durchgeführt werden:

baremetal.cluster.gke.io/allow-docker-container-runtime:  "true"

Wenn dieses Problem bei Ihnen auftritt, schreibt bmctl den folgenden Fehler in die Datei upgrade-cluster.log im Ordner bmctl-workspace:

Operation failed, retrying with backoff. Cause: error creating "baremetal.cluster.gke.io/v1, Kind=Cluster": admission webhook
"vcluster.kb.io" denied the request: Spec.NodeConfig.ContainerRuntime: Forbidden: Starting with Anthos Bare Metal version 1.13 Docker container
runtime will not be supported. Before 1.13 please set the containerRuntime to containerd in your cluster resources.

Although highly discouraged, you can create a cluster with Docker node pools until 1.13 by passing the flag "--allow-docker-container-runtime" to bmctl
create cluster or add the annotation "baremetal.cluster.gke.io/allow-docker- container-runtime: true" to the cluster configuration file.

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 zur Aufrechterhaltung der Docker-Containerlaufzeit nicht erforderlich ist. In diesem Fall haben Cluster beim Upgrade auf 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 Annotation entweder während oder nach dem Abbruch des Upgrades hinzufügen, bevor Sie das Upgrade wiederholen.

Installation 1.11

bmctl wird beendet, bevor die Clustererstellung abgeschlossen ist

Die Clustererstellung kann für GDCV für Bare Metal Version 1.11.0 fehlschlagen. Dieses Problem wurde in GDCV für Bare Metal-Version 1.11.1 behoben. In einigen Fällen wird der Befehl bmctl create cluster vorzeitig beendet und es werden Fehler wie die folgenden in die Logs geschrieben:

Error creating cluster: error waiting for applied resources: provider cluster-api watching namespace USER_CLUSTER_NAME not found in the target cluster

Problemumgehung

Der fehlgeschlagene Vorgang erzeugt Artefakte, der Cluster ist jedoch nicht betriebsbereit. Wenn Sie von diesem Problem betroffen sind, führen Sie die folgenden Schritte aus, um Artefakte zu bereinigen und einen Cluster zu erstellen:

Installation, VM-Laufzeit auf GDC 1,11, 1,12

Installationsberichte Fehler beim Abgleich der VM-Laufzeit

Beim Erstellen des Clusters wird möglicherweise ein Fehler wie der folgende gemeldet:

I0423 01:17:20.895640 3935589 logs.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 mehrere NICs, containerd und ein 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 in der Clusterkonfigurationsdatei auf containerd gesetzt, die Standardeinstellung für GDCV für Bare Metal-Version 1.13 und höher).
  • Der Cluster ist so konfiguriert, dass mehrere Netzwerkschnittstellen (Multi-NICs) für Pods bereitgestellt werden (clusterNetwork.multipleNetworkInterfaces in der Clusterkonfigurationsdatei auf true gesetzt).
  • Der Cluster ist für die Verwendung eines Proxys konfiguriert (spec.proxy.url ist in der Clusterkonfigurationsdatei angegeben). Auch wenn die Clustererstellung fehlschlägt, wird diese Einstellung weitergegeben, wenn Sie versuchen, einen Cluster zu erstellen. Diese Proxyeinstellung wird möglicherweise als HTTPS_PROXY-Umgebungsvariable oder in Ihrer containerd-Konfiguration (/etc/systemd/system/containerd.service.d/09-proxy.conf) angezeigt.

Problemumgehung

Hängen Sie auf allen Knotenmaschinen Dienst-CIDRs (clusterNetwork.services.cidrBlocks) an die Umgebungsvariable NO_PROXY an.

Installation 1.10, 1.11, 1.12

Fehler bei Systemen mit restriktiver umask-Einstellung

Bei der GDCV für Bare Metal-Version 1.10.0 wurde eine wurzellose Steuerungsebene eingeführt, die alle Komponenten der Steuerungsebene als Nicht-Root-Nutzer ausführt. Wenn alle Komponenten als Nicht-Root-Nutzer ausgeführt werden, kann es bei Systemen mit einer restriktiveren umask-Einstellung von 0077 zu Installations- oder Upgradefehlern kommen.


Problemumgehung

Setzen Sie die Knoten der Steuerungsebene zurück und ändern Sie die Einstellung umask auf allen Maschinen der Steuerungsebene in 0022. Wiederholen Sie nach dem Aktualisieren der Maschinen die Installation.

Alternativ können Sie die Verzeichnis- und Dateiberechtigungen von /etc/kubernetes auf den Maschinen der Steuerungsebene ändern, damit die Installation oder das Upgrade fortgesetzt werden kann.

  • Mache /etc/kubernetes und alle zugehörigen Unterverzeichnisse lesbar: chmod o+rx.
  • Alle Dateien des root-Nutzers im Verzeichnis /etc/kubernetes (rekursiv) allgemein lesbar (chmod o+r). Schließen Sie private Schlüsseldateien (.key) von diesen Änderungen aus, da sie bereits mit den richtigen Eigentümerschafts- und Berechtigungen erstellt wurden.
  • Mache /usr/local/etc/haproxy/haproxy.cfg weltweit lesbar.
  • Mache /usr/local/etc/bgpadvertiser/bgpadvertiser-cfg.yaml weltweit lesbar.
Installation 1,10, 1,11, 1,12, 1,13

Inkompatibilität der Kontrollgruppe v2

Die Kontrollgruppe v2 (cgroup v2) wird in GKE in Bare-Metal-Clustern ab Version 1.13 von GDCV für Bare Metal nicht unterstützt. Version 1.14 unterstützt jedoch cgroup v2 als Vorabversion . Wenn /sys/fs/cgroup/cgroup.controllers vorhanden ist, verwendet Ihr System cgroup v2.


Problemumgehung

Wenn Ihr System cgroup v2 verwendet, führen Sie ein Upgrade Ihres Clusters auf Version 1.14 durch.

Installation 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28, 1,29

Preflight-Prüfungen und Anmeldedaten für Dienstkonten

Bei Installationen, die von Administrator- oder Hybridclustern ausgelöst werden (d. h. Cluster, die nicht mit bmctl erstellt wurden, wie Nutzercluster), prüft die Preflight-Prüfung weder die Anmeldedaten des Google Cloud-Dienstkontos noch die zugehörigen Berechtigungen.

Installation 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28, 1,29

Auf vSphere installieren

Wenn Sie GKE in Bare-Metal-Clustern auf vSphere-VMs installieren, müssen Sie die Flags tx-udp_tnl-segmentation und tx-udp_tnl-csum-segmentation auf „Aus“ setzen. Diese Flags beziehen sich auf das Auslagerung der Hardwaresegmentierung durch den vSphere-Treiber VMXNET3 und funktionieren nicht mit dem GENEVE-Tunnel von GKE on 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 -k NET_INTFC | grep segm

Ersetzen Sie NET_INTFC durch die Netzwerkschnittstelle, die der IP-Adresse des Knotens zugeordnet ist.

Die Antwort sollte Einträge wie die folgenden enthalten:

...
tx-udp_tnl-segmentation: on
tx-udp_tnl-csum-segmentation: on
...
Manchmal zeigt ethtool in RHEL 8.4 an, dass diese Flags deaktiviert sind, während sie nicht aktiv sind. Wenn Sie diese Flags explizit deaktivieren möchten, aktivieren und deaktivieren Sie sie mit den folgenden Befehlen:
ethtool -K ens192 tx-udp_tnl-segmentation on ethtool -K ens192 \
    tx-udp_tnl-csum-segmentation on
ethtool -K ens192 tx-udp_tnl-segmentation off ethtool -K ens192 \
    tx-udp_tnl-csum-segmentation off

Diese Flag-Änderung bleibt bei Neustarts nicht bestehen. Konfigurieren Sie die Startskripts so, dass diese Flags beim Booten des Systems explizit gesetzt werden.

Upgrades und Updates 1.10

bmctl kann keine Nutzercluster mit niedrigerer Version erstellen, aktualisieren oder zurücksetzen

Die bmctl-Befehlszeile kann unabhängig von der Version des Administratorclusters keinen Nutzercluster mit einer niedrigeren Nebenversion erstellen, aktualisieren oder zurücksetzen. Sie können beispielsweise bmctl nicht mit einer Version von 1.N.X verwenden, um einen Nutzercluster der Version 1.N-1.Y zurückzusetzen, selbst wenn der Administratorcluster ebenfalls Version 1.N.X hat.

Wenn Sie von diesem Problem betroffen sind, sollten bei der Verwendung von bmctl die Logs in etwa so aussehen:

[2022-06-02 05:36:03-0500] error judging if the cluster is managing itself: error to parse the target cluster: error parsing cluster config: 1 error occurred:

*   cluster version 1.8.1 isn't supported in bmctl version 1.9.5, only cluster version 1.9.5 is supported

Workaround:

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 verzögert werden

Das Upgrade von Clustern auf Version 1.12.1 wird manchmal unterbrochen, da der API-Server nicht mehr verfügbar ist. Dieses Problem betrifft alle Clustertypen und alle unterstützten Betriebssysteme. Wenn dieses Problem auftritt, kann der Befehl bmctl upgrade cluster an mehreren Punkten fehlschlagen, auch während der zweiten Phase von Preflight-Prüfungen.


Problemumgehung

Anhand der Upgradelogs können Sie feststellen, ob Sie von diesem Problem betroffen sind. Upgradelogs befinden sich standardmäßig in /baremetal/bmctl-workspace/CLUSTER_NAME/log/upgrade-cluster-TIMESTAMP.

upgrade-cluster.log kann Fehler wie die folgenden enthalten:

Failed to upgrade cluster: preflight checks failed: preflight check failed
Das Maschinenlog kann Fehler wie die folgenden enthalten (wiederholte Fehler weisen darauf hin, dass Sie von diesem Problem betroffen sind):
FAILED - RETRYING: Query CNI health endpoint (30 retries left). FAILED - RETRYING: Query CNI health endpoint (29 retries left).
FAILED - RETRYING: Query CNI health endpoint (28 retries left). ...

HAProxy und KeepaErlebnisse müssen auf jedem Knoten der Steuerungsebene ausgeführt werden, bevor Sie noch einmal versuchen, den Cluster auf Version 1.12.1 zu aktualisieren. Prüfen Sie mit der crictl-Befehlszeile auf jedem Knoten, ob die Container haproxy und keepalived ausgeführt werden:

docker/crictl ps | grep haproxy docker/crictl ps | grep keepalived

Wenn HAProxy oder Keepaowned nicht auf einem Knoten ausgeführt werden, starten Sie kubelet auf dem Knoten neu:

systemctl restart kubelet
Upgrades und Updates, VM-Laufzeit auf GDC 1,11, 1,12

Das Upgrade von Clustern auf Version 1.12.0 oder höher schlägt fehl, wenn die VM-Laufzeit auf GDC aktiviert ist.

In GKE on Bare Metal-Clustern in Version 1.12.0 werden alle Ressourcen, die sich auf die VM-Laufzeit in GDC beziehen, zum Namespace vm-system migriert, um den GA-Release der VM-Laufzeit in GDC besser zu unterstützen. Wenn Sie die VM-Laufzeit auf 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 zuvor die VM-Laufzeit auf GDC deaktivieren. Wenn Sie von diesem Problem betroffen sind, wird beim Upgradevorgang 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-Laufzeit auf GDC:

  1. Bearbeiten Sie die benutzerdefinierte Ressource VMRuntime:
    kubectl edit vmruntime
    
  2. Legen Sie enabled in der Spezifikation auf false fest:
    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      ...
    
  3. Speichern Sie die benutzerdefinierte Ressource in Ihrem Editor.
  4. Nachdem das Clusterupgrade abgeschlossen ist, aktivieren Sie die VM-Laufzeit auf GDC wieder.

Weitere Informationen finden Sie unter Mit VM-basierten Arbeitslasten arbeiten.

Upgrades und Updates 1.10, 1.11, 1.12

Upgrade hängt bei error during manifests operations

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. Um festzustellen, ob Sie von diesem Problem betroffen sind, und um es zu 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 Hinweis auf eine falsch aktualisierte Ressource, wobei {RESOURCE_NAME} der Name der Problemressource ist.


Problemumgehung

Wenn Sie diese Fehler in Ihren Protokollen finden, führen Sie die folgenden Schritte aus:

  1. Verwenden Sie kubectl edit, um die Annotation kubectl.kubernetes.io/last-applied-configuration aus der Ressource zu entfernen, die in der Lognachricht enthalten ist.
  2. Speichern Sie die Änderungen und wenden Sie sie auf die Ressource an.
  3. Wiederholen Sie das Clusterupgrade.
Upgrades und Updates 1.10, 1.11, 1.12

Upgrades sind für Cluster mit Funktionen blockiert, die Network Gateway für GDC verwenden.

Clusterupgrades von 1.10.x auf 1.11.x schlagen bei Clustern fehl, die entweder ausgehendes NAT-Gateway oder gebündeltes Load-Balancing mit BGP verwenden. Für diese Funktionen wird Network Gateway for GDC verwendet. Clusterupgrades bleiben in der Waiting for upgrade to complete...-Befehlszeilennachricht und in 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, den Sie aktualisieren möchten, um die Blockierung des Upgrades aufzuheben:

kubectl -n kube-system delete deployment \
    ang-controller-manager-autoscaler
kubectl -n kube-system delete deployment \
    ang-controller-manager
kubectl -n kube-system delete ds ang-node
Upgrades und Updates 1,10, 1,11, 1,12, 1,13, 1,14, 1,15

bmctl update entfernt keine Wartungsblöcke

Mit dem Befehl bmctl update kann der Abschnitt maintenanceBlocks aus der Clusterressourcenkonfiguration weder entfernt noch geändert werden.


Problemumgehung

Weitere Informationen, einschließlich einer Anleitung zum Entfernen von Knoten aus dem Wartungsmodus, finden Sie unter Knoten in den Wartungsmodus versetzen.

Vorgang 1.10, 1.11, 1.12

Knoten werden entsperrt, wenn Sie das Verfahren für den Wartungsmodus nicht verwenden

Wenn Sie Cluster der Version 1.12.0 (anthosBareMetalVersion: 1.12.0) oder niedriger ausführen und kubectl cordon auf einem Knoten manuell verwenden, kann GKE on Bare Metal den Knoten entriegeln, bevor Sie bereit sind, den erwarteten Zustand abzugleichen.


Problemumgehung

Verwenden Sie für Cluster der Version 1.12.0 und niedriger den Wartungsmodus, um Knoten sicher ab- und abzuschalten.

In Version 1.12.1 (anthosBareMetalVersion: 1.12.1) oder höher hebt GKE on Bare Metal die Knoten nicht unerwartet auf, wenn Sie kubectl cordon verwenden.

Vorgang 1.11

Version 11-Administratorcluster, die einen Registrierungsspiegel verwenden, können keine Cluster der Version 1.10 verwalten

Wenn Ihr Administratorcluster die Version 1.11 verwendet und einen Registrierungsspiegel verwendet, kann er keine Nutzercluster mit einer niedrigeren Nebenversion verwalten. Dieses Problem betrifft Vorgänge zum Zurücksetzen, Aktualisieren und Upgraden im Nutzercluster.

Prüfen Sie Ihre Logs auf Clustervorgänge wie Erstellen, Upgraden oder Zurücksetzen, um festzustellen, ob Sie von diesem Problem betroffen sind. Diese Logs befinden sich standardmäßig im Ordner bmctl-workspace/CLUSTER_NAME/. Wenn Sie von diesem Problem betroffen sind, 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 der Ausführung auf Nutzerclustern das kubeconfig-Secret des Nutzerclusters mit der kubeconfig-Datei des Administratorclusters. Das Überschreiben der Datei führt dazu, dass Standardclustervorgänge wie Aktualisierungen und Upgrades bei betroffenen Nutzerclustern fehlschlagen. Dieses Problem gilt für GKE on Bare Metal-Clusterversionen bis einschließlich 1.11.1.

Führen Sie den folgenden Befehl aus, um festzustellen, ob dieses Problem einen Nutzercluster betrifft:

kubectl --kubeconfig ADMIN_KUBECONFIG \
    get secret -n USER_CLUSTER_NAMESPACE \
    USER_CLUSTER_NAME -kubeconfig \
    -o json  | jq -r '.data.value'  | base64 -d

Ersetzen Sie Folgendes:

  • ADMIN_KUBECONFIG: der Pfad zur kubeconfig-Datei des Administratorclusters.
  • USER_CLUSTER_NAMESPACE: der Namespace für den Cluster. Standardmäßig sind die Cluster-Namespaces für GKE on Bare Metal-Cluster der Name des Clusters, dem cluster- vorangestellt ist. Wenn Sie den Cluster beispielsweise test nennen, ist der Standard-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.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data:LS0tLS1CRU...UtLS0tLQo=
    server: https://10.200.0.6:443
  name: ci-aed78cdeca81874
contexts:
- context:
    cluster: ci-aed78cdeca81
    user: ci-aed78cdeca81-admin
  name: ci-aed78cdeca81-admin@ci-aed78cdeca81
current-context: ci-aed78cdeca81-admin@ci-aed78cdeca81
kind: Config
preferences: {}
users:
- name: ci-aed78cdeca81-admin
  user:
    client-certificate-data: LS0tLS1CRU...UtLS0tLQo=
    client-key-data: LS0tLS1CRU...0tLS0tCg==

Problemumgehung

Mit den folgenden Schritten wird die Funktion in einem betroffenen Nutzercluster (USER_CLUSTER_NAME) wiederhergestellt:

  1. Suchen Sie die kubeconfig-Datei des Nutzerclusters. GKE on Bare Metal generiert die kubeconfig-Datei auf der Administratorworkstation, wenn Sie einen Cluster erstellen. Die Datei befindet sich standardmäßig im Verzeichnis bmctl-workspace/USER_CLUSTER_NAME.
  2. Prüfen Sie, ob die kubeconfig-Datei des Nutzerclusters korrekt ist:
    kubectl get nodes \
        --kubeconfig PATH_TO_GENERATED_FILE
    
    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.
  3. Führen Sie den folgenden Befehl aus, um die beschädigte kubeconfig-Datei im Administratorcluster zu löschen:
    kubectl delete secret \
        -n USER_CLUSTER_NAMESPACE \
        USER_CLUSTER_NAME-kubeconfig
    
  4. Führen Sie den folgenden Befehl aus, um das richtige kubeconfig-Secret wieder im Administratorcluster zu speichern:
    kubectl create secret generic \
        -n USER_CLUSTER_NAMESPACE \
        USER_CLUSTER_NAME-kubeconfig \
        --from-file=value=PATH_TO_GENERATED_FILE
    
Vorgang 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28, 1,29

Snapshot als angemeldeter Nutzer ohne Root-Berechtigung erstellen

Wenn Sie containerd als Containerlaufzeit verwenden und einen Snapshot als Nicht-Root-Nutzer ausführen, muss sich /usr/local/bin im PATH des Nutzers befinden. Andernfalls wird der Fehler crictl: command not found zurückgegeben.

Wenn Sie nicht als Root-Nutzer angemeldet sind, wird sudo zum Ausführen der Snapshot-Befehle verwendet. Der Pfad sudo kann sich vom Stammprofil unterscheiden und darf nicht /usr/local/bin enthalten.


Problemumgehung

Aktualisieren Sie secure_path in /etc/sudoers so, dass /usr/local/bin enthalten ist. 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 Warnungsprotokolle

Wenn der CRI-Parser (Container Runtime Interface) einen falschen regulären Ausdruck zum Parsen der Zeit verwendet, enthalten die Logs für den Pod stackdriver-log-forwarder Fehler und Warnungen wie die folgenden:

[2022/03/04 17:47:54] [error] [parser] time string length is too long [2022/03/04 20:16:43] [ warn] [parser:cri] invalid time format %Y-%m-%dT%H:%M:%S.%L%z for '2022-03-04T20:16:43.680484387Z'

Workaround:

Logging und Monitoring 1,10, 1,11, 1,12, 1,13, 1,14, 1,15

Unerwartetes Monitoring der Abrechnung

Bei den GKE on Bare Metal-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 alle der folgenden Umstände zutreffen:

  • Anwendungsmonitoring ist aktiviert (enableStackdriverForApplications=true)
  • Managed Service for Prometheus ist nicht aktiviert (enableGMPForApplications)
  • Anwendungs-Pods haben die Annotation prometheus.io/scrap=true

Wenn Sie prüfen möchten, ob Sie von diesem Problem betroffen sind, Listen Sie Ihre benutzerdefinierten Messwerte auf. Wenn Sie die Abrechnung mit unerwünschten Messwerten sehen, betrifft Sie das Problem.


Problemumgehung

Wenn Sie von diesem Problem betroffen sind, empfehlen wir Ihnen, Ihre Cluster auf Version 1.12 zu aktualisieren und zur neuen Lösung für das Anwendungsmonitoring managed-service-for-prometheus zu wechseln, die dieses Problem behebt:

  • Separate Flags zur Steuerung der Erhebung von Anwendungslogs im Vergleich zu Anwendungsmesswerten
  • Gebündelter Google Cloud Managed Service for Prometheus
  • Wenn Sie kein Upgrade auf Version 1.12 durchführen können, führen Sie die folgenden Schritte aus:

    1. Suchen Sie die Quell-Pods und -dienste mit der unerwünschten Abrechnung:
      kubectl --kubeconfig KUBECONFIG \
          get pods -A -o yaml | grep 'prometheus.io/scrape: "true"'
      kubectl --kubeconfig KUBECONFIG get \
          services -A -o yaml | grep 'prometheus.io/scrape: "true"'
      
    2. 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 im Extremfall zu einem übermäßigen Logging- und Monitoringaufwand führen, was dazu führen kann, dass Metrics Server beendet und neu gestartet wird. Sie können die ConfigMap metrics-server-config bearbeiten, um mehr Ressourcen zuzuweisen, damit der Metrics Server weiter ausgeführt wird. Aufgrund des Abgleichs können jedoch Änderungen an metrics-server-config während einer Clusteraktualisierung oder eines Upgradevorgangs auf den Standardwert zurückgesetzt werden. Metrics Server ist nicht sofort betroffen, aber beim nächsten Neustart übernimmt er die zurückgesetzte ConfigMap und ist wieder anfällig für übermäßigen Mehraufwand.


    Problemumgehung

    Für 1.11.x können Sie ein Script für die ConfigMap-Bearbeitung ausführen und sie zusammen mit Updates oder Upgrades für den Cluster ausführen. Wenden Sie sich ab Version 1.12 an den Support.

    Logging und Monitoring 1,11, 1,12

    Verworfene Messwerte wirken sich auf das Cloud Monitoring-Dashboard aus

    Mehrere GKE on Bare Metal-Messwerte wurden verworfen. Ab GDCV für Bare Metal-Version 1.11 werden für diese verworfenen Messwerte keine Daten mehr erhoben. 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, die eingestellt wurden, sowie die Messwerte aufgeführt, die sie ersetzen.

    Verworfene Messwerte Ersatzmesswert
    kube_daemonset_updated_number_scheduled kube_daemonset_status_updated_number_scheduled
    kube_node_status_allocatable_cpu_cores
    kube_node_status_allocatable_memory_bytes
    kube_node_status_allocatable_pods
    kube_node_status_allocatable
    kube_node_status_capacity_cpu_cores
    kube_node_status_capacity_memory_bytes
    kube_node_status_capacity_pods
    kube_node_status_capacity

    In GKE on Bare Metal-Clusterversionen vor 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 wurde für Releases ab 1.11.0 aktualisiert.


    Problemumgehung

    Führen Sie die folgenden Schritte aus, um zu den Ersatzmesswerten zu migrieren:

    1. Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche:
      Zu Monitoring
    2. Wählen Sie im Navigationsbereich Dashboards aus und löschen Sie das Dashboard Status des Anthos-Clusterknotens.
    3. Klicken Sie auf den Tab Beispielbibliothek und installieren Sie das Dashboard Knotenstatus des Anthos-Clusters neu.
    4. Folgen Sie der Anleitung unter Benachrichtigungsrichtlinien erstellen, um eine Richtlinie mit der aktualisierten Richtliniendefinitionsdatei node-cpu-usage-high.json zu erstellen.
    Logging und Monitoring 1,10; 1,11

    stackdriver-log-forwarder enthält CrashloopBackOff -Fehler

    Es kann vorkommen, dass der Logging-Agent fluent-bit bei der Verarbeitung beschädigter Blöcke hängen bleibt. Wenn der Logging-Agent beschädigte Blöcke nicht umgehen kann, stellen Sie unter Umständen fest, dass stackdriver-log-forwarder ständig mit dem Fehler CrashloopBackOff abstürzt. Wenn dieses Problem auftritt, enthalten Ihre Logs Einträge wie die folgenden:

    [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 Pufferblöcke für den Stackdriver Log Forwarder.

    Hinweis: Ersetzen Sie in den folgenden Befehlen KUBECONFIG durch den Pfad zur kubeconfig-Datei des Administratorclusters.

    1. Beenden Sie alle stackdriver-log-forwarder-Pods:
      kubectl --kubeconfig KUBECONFIG -n kube-system patch daemonset \
          stackdriver-log-forwarder -p \
          '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'
      
      Prüfen Sie, ob die stackdriver-log-forwarder-Pods gelöscht wurden, bevor Sie mit dem nächsten Schritt fortfahren.
    2. Stellen Sie das folgende DaemonSet bereit, um alle beschädigten Daten in fluent-bit-Zwischenspeichern zu bereinigen:
      kubectl --kubeconfig KUBECONFIG -n kube-system apply -f - << EOF
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        name: fluent-bit-cleanup
        namespace: kube-system
      spec:
        selector:
          matchLabels:
            app: fluent-bit-cleanup
        template:
          metadata:
            labels:
              app: fluent-bit-cleanup
          spec:
            containers:
            - name: fluent-bit-cleanup
              image: debian:10-slim
              command: ["bash", "-c"]
              args:
              - |
                rm -rf /var/log/fluent-bit-buffers/
                echo "Fluent Bit local buffer is cleaned up."
                sleep 3600
              volumeMounts:
              - name: varlog
                mountPath: /var/log
              securityContext:
                privileged: true
            tolerations:
            - key: "CriticalAddonsOnly"
              operator: "Exists"
            - key: node-role.kubernetes.io/master
              effect: NoSchedule
            - key: node-role.gke.io/observability
              effect: NoSchedule
            volumes:
            - name: varlog
              hostPath:
                path: /var/log
      EOF
      
    3. Prüfen Sie mit den folgenden Befehlen, ob das DaemonSet alle Knoten bereinigt hat:
      kubectl --kubeconfig KUBECONFIG logs \
          -n kube-system -l \
          app=fluent-bit-cleanup | grep "cleaned up" | wc -l
      kubectl --kubeconfig KUBECONFIG -n \
          kube-system get pods -l \
          app=fluent-bit-cleanup --no-headers | wc -l
      
      Die Ausgabe der beiden Befehle sollte der Anzahl der Knoten in Ihrem Cluster entsprechen.
    4. Löschen Sie das Bereinigungs-DaemonSet:
      kubectl --kubeconfig KUBECONFIG -n \
          kube-system delete ds fluent-bit-cleanup
      
    5. Starten Sie die Logweiterleitungs-Pods neu:
      kubectl --kubeconfig KUBECONFIG \
          -n kube-system patch daemonset \
          stackdriver-log-forwarder --type json \
          -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]'
      
    Logging und Monitoring 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28

    Unbekannter Messwertfehler im Log des gke-metrics-agenten

    gke-metrics-agent ist ein Daemonset, das Messwerte auf jedem Knoten erfasst und an Cloud Monitoring weiterleitet. Dadurch können Logs wie die folgenden erzeugt werden:

    Unknown metric: kubernetes.io/anthos/go_gc_duration_seconds_summary_percentile
    

    Ähnliche Fehler können bei anderen Messwerttypen auftreten, einschließlich, aber nicht beschränkt auf:

    • apiserver_admission_step_admission_duration_seconds_summary
    • go_gc_duration_seconds
    • scheduler_scheduling_duration_seconds
    • gkeconnect_http_request_duration_seconds_summary
    • alertmanager_nflog_snapshot_duration_seconds_summary

    Diese Fehlerlogs können ignoriert werden, da die Messwerte, auf die sie sich beziehen, nicht unterstützt werden und für Monitoringzwecke nicht kritisch sind.

    Logging und Monitoring 1,10; 1,11

    Intermittierende Messwertexportunterbrechungen

    Bei GKE on Bare-Metal-Clustern kann es im normalen Modus, beim kontinuierlichen Export von Messwerten oder bei fehlenden Messwerten auf einigen Knoten zu Unterbrechungen kommen. Wenn dieses Problem Ihre Cluster betrifft, sehen Sie möglicherweise Datenlücken für die folgenden Messwerte (mindestens):

    • kubernetes.io/anthos/container_memory_working_set_bytes
    • kubernetes.io/anthos/container_cpu_usage_seconds_total
    • kubernetes.io/anthos/container_network_receive_bytes_total

    Problemumgehung

    Führen Sie ein Upgrade Ihrer Cluster auf Version 1.11.1 oder höher durch.

    Wenn Sie kein Upgrade durchführen können, führen Sie die folgenden Schritte aus:

    1. Öffnen Sie Ihre stackdriver-Ressource zum Bearbeiten:
      kubectl -n kube-system edit stackdriver stackdriver
      
    2. Wenn Sie die CPU-Anfrage für gke-metrics-agent von 10m auf 50m erhöhen möchten, fügen Sie dem Manifest stackdriver den folgenden Abschnitt resourceAttrOverride hinzu:
      spec:
        resourceAttrOverride:
          gke-metrics-agent/gke-metrics-agent:
            limits:
              cpu: 100m
              memory: 4608Mi
            requests:
              cpu: 50m
              memory: 200Mi
      
      Ihre bearbeitete Ressource sollte in etwa so aussehen:
      spec:
        anthosDistribution: baremetal
        clusterLocation: us-west1-a
        clusterName: my-cluster
        enableStackdriverForApplications: true
        gcpServiceAccountSecretName: ...
        optimizedMetrics: true
        portable: true
        projectID: my-project-191923
        proxyConfigSecretName: ...
        resourceAttrOverride:
          gke-metrics-agent/gke-metrics-agent:
            limits:
              cpu: 100m
              memory: 4608Mi
            requests:
              cpu: 50m
              memory: 200Mi
      
    3. Speichern Sie die Änderungen und schließen Sie den Texteditor.
    4. Prüfen Sie mit dem folgenden Befehl, ob Ihre Änderungen übernommen wurden:
      kubectl -n kube-system get daemonset \
          gke-metrics-agent -o yaml | grep "cpu: 50m"
      
      Der Befehl ermittelt cpu: 50m, wenn Ihre Änderungen wirksam wurden.
    Netzwerk 1.10

    Mehrere Standardgateways unterbrechen die Konnektivität zu externen Endpunkten

    Mehrere Standardgateways in einem Knoten können dazu führen, dass die Verbindung innerhalb eines Pods zu externen Endpunkten wie google.com unterbrochen wird.

    Um festzustellen, ob Sie von diesem Problem betroffen sind, führen Sie den folgenden Befehl auf dem Knoten aus:

    ip route show
    

    Mehrere Instanzen von default in der Antwort weisen darauf hin, dass Sie betroffen sind.

    Netzwerk 1.12

    Änderungen an benutzerdefinierten Netzwerkressourcen in Nutzerclustern werden überschrieben

    GKE on Bare-Metal-Cluster der Version 1.12.x verhindern nicht, dass Sie benutzerdefinierte Netzwerkressourcen in Ihrem Nutzercluster manuell bearbeiten. GKE on Bare Metal gleicht benutzerdefinierte Ressourcen in den Nutzerclustern mit den benutzerdefinierten Ressourcen in Ihrem Administratorcluster während Clusterupgrades ab. Durch diesen 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, aber Cluster der Version 1.12.x erzwingen diese Anforderung nicht.

    Erweiterte Netzwerkfeatures wie gebündeltes Load-Balancing mit BGP, NAT-Gateway für ausgehenden Traffic, SR-IOV-Netzwerk, Flat-Modus mit BGP und Multi-NIC für Pods verwenden die folgenden benutzerdefinierten Ressourcen:

    • BGPLoadBalancer
    • BGPPeer
    • NetworkGatewayGroup
    • NetworkAttachmentDefinition
    • ClusterCIDRConfig
    • FlatIPMode

    Sie bearbeiten diese benutzerdefinierten Ressourcen in Ihrem Administratorcluster und der Abgleichsschritt wendet die Änderungen auf Ihre Nutzercluster an.


    Problemumgehung

    Wenn Sie eine der zuvor genannten benutzerdefinierten Ressourcen in einem Nutzercluster geändert haben, passen Sie die entsprechenden benutzerdefinierten Ressourcen in Ihrem Administratorcluster vor dem Upgrade an. Dadurch wird sichergestellt, dass Ihre Konfigurationsänderungen beibehalten werden. GKE on Bare Metal-Clusterversionen ab 1.13.0 verhindern, dass Sie die benutzerdefinierten Netzwerkressourcen in Ihren Nutzerclustern 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

    GKE on Bare Metal konfiguriert die umgekehrte Pfadfilterung für Knoten, um die Quellvalidierung (net.ipv4.conf.all.rp_filter=0) zu deaktivieren. Wenn die Einstellung rp_filter in 1 oder 2 geändert wird, schlagen Pods aufgrund von Zeitüberschreitungen bei der Kommunikation außerhalb des Knotens fehl.

    Die umgekehrte Pfadfilterung wird mit rp_filter-Dateien im IPv4-Konfigurationsordner (net/ipv4/conf/all) festgelegt. Dieser Wert kann auch durch sysctl überschrieben werden, in dem die Einstellungen für das Filtern von umgekehrten Pfaden in einer Konfigurationsdatei für die Netzwerksicherheit gespeichert werden, z. B. /etc/sysctl.d/60-gce-network-security.conf.


    Problemumgehung

    Die Pod-Verbindung kann mit einer der folgenden Problemumgehungen wiederhergestellt werden:

    Setzen Sie den Wert für net.ipv4.conf.all.rp_filter manuell wieder auf 0 und führen Sie dann sudo sysctl -p aus, um die Änderung zu übernehmen.

    Oder

    Starten Sie den Pod anetd neu, um net.ipv4.conf.all.rp_filter wieder auf 0 zu setzen. Wenn Sie den anetd-Pod neu starten möchten, verwenden Sie die folgenden Befehle, um den anetd-Pod zu suchen und zu löschen. Daraufhin wird an seiner Stelle ein neuer anetd-Pod gestartet:

    kubectl get pods -n kube-system kubectl delete pods -n kube-system ANETD_XYZ
    

    Ersetzen Sie ANETD_XYZ durch den Namen des Pods anetd.

    Nachdem Sie eine der Problemumgehungen durchgeführt haben, prüfen Sie, 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.

    Netzwerk 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28, 1,29

    IP-Adressen von Bootstrap-Clustern (Art) und IP-Adressen von Clusterknoten überschneiden sich

    192.168.122.0/24 und 10.96.0.0/27 sind die Standard-Pod- und Dienst-CIDRs, die vom Bootstrap-Cluster (Art) verwendet werden. Preflight-Prüfungen schlagen fehl, wenn sie sich mit IP-Adressen der Maschinen von Clusterknoten überschneiden.


    Problemumgehung

    Um den Konflikt zu vermeiden, können Sie die Flags --bootstrap-cluster-pod-cidr und --bootstrap-cluster-service-cidr an bmctl übergeben, um unterschiedliche Werte anzugeben.

    Betriebssystem 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28

    Clustererstellung oder -upgrade schlägt unter CentOS fehl

    Im Dezember 2020 haben die CentOS-Community und Red Hat die Einstellung von CentOS angekündigt. Am 31. Januar 2022 hat CentOS 8 das Ende des Produktzyklus (End of Life, EOL) erreicht. Infolge des EOL funktionieren yum-Repositories nicht mehr für CentOS, wodurch die Clustererstellung und Clusterupgrades fehlschlagen. Dies gilt für alle unterstützten CentOS-Versionen und wirkt sich auf alle Versionen von GKE on Bare Metal-Clustern aus.


    Problemumgehung

    Sicherheit 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 1,28

    Container kann nicht in das Feld VOLUME schreiben, das im Dockerfile mit containerd und SELinux definiert ist

    Wenn Sie containerd als Containerlaufzeit verwenden und auf Ihrem Betriebssystem SELinux aktiviert ist, ist der im Dockerfile der Anwendung definierte VOLUME möglicherweise nicht beschreibbar. Mit dem folgenden Dockerfile erstellte Container können beispielsweise nicht in den Ordner /tmp schreiben.

    FROM ubuntu:20.04 RUN chmod -R 777 /tmp VOLUME /tmp
    

    Wenn Sie prüfen möchten, ob Sie von diesem Problem betroffen sind, führen Sie den folgenden Befehl auf dem Knoten aus, auf dem der problematische Container gehostet wird:

    ausearch -m avc
    

    Wenn Sie von diesem Problem betroffen sind, wird ein denied-Fehler wie der folgende angezeigt:

    time->Mon Apr  4 21:01:32 2022 type=PROCTITLE msg=audit(1649106092.768:10979): proctitle="bash" type=SYSCALL msg=audit(1649106092.768:10979): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=55eeba72b320 a2=241 a3=1b6 items=0 ppid=75712 pid=76042 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=4294967295 comm="bash" exe="/usr/bin/bash" subj=system_u:system_r:container_t:s0:c701,c935 key=(null) type=AVC msg=audit(1649106092.768:10979): avc:  denied { write } for  pid=76042 comm="bash" name="aca03d7bb8de23c725a86cb9f50945664cb338dfe6ac19ed0036c" dev="sda2" ino=369501097 scontext=system_u:system_r: container_t:s0:c701,c935 tcontext=system_u:object_r: container_ro_file_t:s0 tclass=dir permissive=0
    

    Problemumgehung

    Führen Sie eine der folgenden Änderungen aus, um dieses Problem zu umgehen:

    • Deaktivieren Sie SELinux.
    • Verwenden Sie das Feature VOLUME nicht im Dockerfile.
    Upgrades und Updates 1.10, 1.11, 1.12

    Node Problem Detector ist nach Clusterupgrades nicht standardmäßig aktiviert

    Wenn Sie ein Upgrade von GKE on Bare-Metal-Clustern durchführen, ist Node Problem Detector standardmäßig nicht aktiviert. Dieses Problem gilt für Upgrades in den Versionen 1.10 bis 1.12.1 und wurde in Version 1.12.2 behoben.


    Workaround:

    So aktivieren Sie die Erkennung von Knotenproblemen:

    1. Prüfen Sie, ob der node-problem-detector systemd-Dienst auf dem Knoten ausgeführt wird.
      1. Stellen Sie mit dem SSH-Befehl eine Verbindung zum Knoten her.
      2. Prüfen Sie, ob der node-problem-detector systemd-Dienst auf dem Knoten ausgeführt wird:
        systemctl is-active node-problem-detector
        
        Wenn im Ergebnis des Befehls inactive angezeigt wird, wird der Knotenproblemdetektor nicht auf dem Knoten ausgeführt.
    2. Verwenden Sie den Befehl kubectl edit und bearbeiten Sie die ConfigMap node-problem-detector-config, um die Erkennung von Knotenproblemen zu aktivieren. Weitere Informationen finden Sie unter Erkennung von Knotenproblemen.
    Vorgang 1,9; 1,10

    Die Clustersicherung schlägt bei Verwendung von Nicht-Root-Anmeldung fehl

    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

    Es gibt einen Fehler in anetd, bei dem Pakete für LoadBalancer-Dienste verworfen werden, wenn die Back-End-Pods auf dem Knoten der Steuerungsebene ausgeführt werden und das Feld hostNetwork: true in der Containerspezifikation verwenden.

    Der Fehler tritt in Version 1.13 oder höher nicht auf.


    Workaround:

    Die folgenden Behelfslösungen können hilfreich sein, wenn Sie einen LoadBalancer-Dienst verwenden, der von hostNetwork-Pods unterstützt wird:

    1. Führen Sie sie auf Worker-Knoten aus (nicht auf Knoten der Steuerungsebene).
    2. Verwenden Sie externalTrafficPolicy: local in der Dienstspezifikation und sorgen Sie dafür, dass Ihre Arbeitslasten auf Load-Balancer-Knoten ausgeführt werden.
    Upgrades und Updates 1,12, 1,13

    Verwaister Pod anthos-version-$version$ kann kein Image abrufen

    Beim Clusterupgrade von 1.12.x auf 1.13.x tritt möglicherweise ein fehlgeschlagener anthos-version-$version$-Pod mit ImagePullBackOff-Fehler auf. Dies liegt daran, dass für anthos-cluster-operator ein Upgrade durchgeführt wird und es sich nicht auf reguläre Clusterfunktionen auswirken sollte.

    Nach Version 1.13 oder höher tritt der Fehler nicht mehr auf.


    Workaround:

    Löschen Sie den Job von dynamic-version-installer bis 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 Upgradeproblem gilt nicht für Cluster, die mit Version 1.12 erstellt wurden.

    Prüfen Sie die Logs des Upgradejobs, der im Administratorcluster den String upgrade-first-no* enthält, um festzustellen, ob Sie betroffen sind. Wenn die folgende Fehlermeldung angezeigt wird, sind Sie davon betroffen.

    TASK [kubeadm_upgrade_apply : Run kubeadm upgrade apply] *******
    ...
    [upgrade/config] FATAL: featureGates: Invalid value: map[string]bool{\"IPv6DualStack\":false}: IPv6DualStack isn't a valid feature name.
    ...
    

    Workaround:

    So umgehen Sie dieses Problem:

    1. Führen Sie auf der Administratorworkstation die folgenden Befehle aus:
      echo '[{ "op": "remove", "path": \
          "/spec/clusterConfiguration/featureGates" }]' \
          > remove-feature-gates.patch
      export KUBECONFIG=$ADMIN_KUBECONFIG
      kubectl get kubeadmconfig -A --no-headers | xargs -L1 bash -c \
          'kubectl patch kubeadmconfig $1 -n $0 --type json \
          --patch-file remove-feature-gates.patch'
      
    2. Versuchen Sie noch einmal, das Clusterupgrade durchzuführen.
    Logging und Monitoring 1.16.2, 1.16.3

    Hohe CPU-Auslastung für stackdriver-operator

    Es gibt ein Problem mit stackdriver-operator, das dazu führt, dass mehr CPU-Zeit beansprucht wird als normal. Die normale CPU-Nutzung beträgt im Ruhezustand weniger als 50 MilliCPU (50m) für stackdriver-operator. Die Ursache ist eine Abweichung der Zertifikatsressourcen, die stackdriver-operator mit den Erwartungen von cert-manager anwendet. Diese Abweichung führt beim Aktualisieren dieser Ressourcen zu einer Wettlaufbedingung zwischen cert-manager und stackdriver-operator.

    Dieses Problem kann bei Clustern mit eingeschränkter CPU-Verfügbarkeit zu einer verringerten Leistung führen.


    Workaround:

    Bis Sie ein Upgrade auf eine Version durchführen können, die diesen Fehler behoben hat, verwenden Sie die folgende Problemumgehung:

    1. Wenden Sie eine benutzerdefinierte AddonConfiguration-Ressource an, um stackdriver-operator vorübergehend auf 0 Replikate herunterzuskalieren:
      kubectl scale deploy stackdriver-operator --replicas=0
      
    2. Sobald Sie ein Upgrade auf eine Version durchgeführt haben, die dieses Problem behebt, skalieren Sie stackdriver-operator wieder hoch:
      kubectl scale deploy stackdriver-operator --replicas=1
      
    Logging und Monitoring 1.16.0, 1.16.1

    Anmerkungsbasiertes Scraping von Messwerten funktioniert nicht

    In der Nebenversion der GDCV für Bare Metal 1.16 wurde das Feld enableStackdriverForApplications in der benutzerdefinierten Ressourcenspezifikation stackdriver eingestellt. Dieses Feld wird durch die beiden Felder enableCloudLoggingForApplications und enableGMPForApplications in der benutzerdefinierten Stackdriver-Ressource ersetzt.

    Wir empfehlen Ihnen, Ihre Arbeitslasten mit Google Cloud Managed Service for Prometheus zu überwachen. Verwenden Sie das Feld enableGMPForApplications, um dieses Feature zu aktivieren.

    Wenn Sie sich auf die Messwerterfassung verlassen, die durch prometheus.io/scrape-Annotationen für Ihre Arbeitslasten ausgelöst wird, können Sie das Feature-Gate-Flag annotationBasedApplicationMetrics verwenden, um das alte Verhalten beizubehalten. Es gibt jedoch ein Problem, das verhindert, dass annotationBasedApplicationMetrics richtig funktioniert, sodass Messwerte aus Ihren Anwendungen nicht in Cloud Monitoring erfasst werden können.


    Workaround:

    Führen Sie ein Upgrade Ihres Clusters auf Version 1.16.2 oder höher durch, um dieses Problem zu beheben.

    Die anmerkungsbasierte Erfassung von Arbeitslastmesswerten, die durch das Feature-Gate annotationBasedApplicationMetrics aktiviert wird, erfasst Messwerte für Objekte mit der Annotation prometheus.io/scrape. Viele Softwaresysteme, die als Open-Source-Software genutzt wurden, können diese Annotation verwenden. Wenn Sie diese Methode der Messwerterfassung weiterhin verwenden, sollten Sie sich dieser Abhängigkeit bewusst sein, damit Sie nicht über die Messwertgebühren in Cloud Monitoring überrascht werden.

    Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.