Bekannte Probleme mit Google Distributed Cloud mit Air Gap 1.12.x

Kategorie Ermittelte Version(en) Problem und Problemumgehung
Sichern und wiederherstellen 1.12.1

Volume-Sicherung löst keine Endpunkte für Objektspeicher auf Organisationsebene auf

Der Speichercluster für die Volumesicherung verwendet den externen DNS-Server anstelle des Forwarders. Dadurch kann die Volumesicherung keine Object Storage-Endpunkte auf Organisationsebene auflösen. In Version 1.12 erfordert Backup-Traffic neue Routen zu jeder Organisation.

Workaround:

IOs müssen den Speichercluster aktualisieren, um die DNS-Auflösung auf Organisationsebene zu aktivieren und eine Route von den logischen Replikationsschnittstellen (LIFs) zu den Objektspeicher-Endpunkten in jeder Organisation zu erstellen. Kopieren Sie die folgenden Befehle aus dem Bootstrapper und fügen Sie sie ein.

  1. Legen Sie die Umgebungsvariable KUBECONFIG fest:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Suchen Sie den Speichercluster:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Suchen Sie den externen CIDR-Bereich der Instanz:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Aktualisieren Sie den Speichercluster, sodass ein Forwarder verwendet wird und eine Route zum externen CIDR der Instanz vorhanden ist:
    kubectl patch storagecluster "${storage_cluster}" -n gpc-system --type='json' -p='[{"op": "replace", "path": "/spec/additionalNetworks/0/destinationSubnets", "value": '"${instance_external_cidr}"'}, {"op": "replace", "path": "/spec/dnsConfig/serviceRef/name", "value": "gpc-coredns-forwarder-udp"}]'
  5. Starten Sie den Controller neu, damit die Änderung übernommen wird:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Sichern und wiederherstellen 1.12.1

Sicherungsroute zu Organisationen schlägt fehl

Symptome:

Das Abrufen des Ingress-Gateways des Organisationsadministrators von ONTAP-Knoten schlägt fehl, da keine Route vom Sicherungssubnetz zu den Steuerungsebenen der Organisation vorhanden ist.

Workaround:

IOs müssen den Speichercluster aktualisieren, um die DNS-Auflösung auf Organisationsebene zu aktivieren und eine Route von den logischen Replikationsschnittstellen (LIFs) zu den Objektspeicher-Endpunkten in jeder Organisation zu erstellen. Kopieren Sie die folgenden Befehle aus dem Bootstrapper und fügen Sie sie ein.

  1. Legen Sie die Umgebungsvariable KUBECONFIG fest:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Suchen Sie den Speichercluster:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Suchen Sie den externen CIDR-Bereich der Instanz:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Aktualisieren Sie den Speichercluster, sodass ein Forwarder verwendet wird und eine Route zum externen CIDR der Instanz vorhanden ist:
    kubectl patch storagecluster "${storage_cluster}" -n gpc-system --type='json' -p='[{"op": "replace", "path": "/spec/additionalNetworks/0/destinationSubnets", "value": '"${instance_external_cidr}"'}, {"op": "replace", "path": "/spec/dnsConfig/serviceRef/name", "value": "gpc-coredns-forwarder-udp"}]'
  5. Starten Sie den Controller neu, damit die Änderung übernommen wird:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Sichern und wiederherstellen 1.12.4

Nichtflüchtige Volumes, die gesichert werden, können nicht gelöscht werden.

Symptome:

Ein nichtflüchtiges Volume kann nicht gelöscht werden, wenn es sich in einer SnapMirror-Beziehung befindet.

Workaround:

Durch einen IO werden die SnapMirror-Beziehungen mit dem Volume als Ziel gelöscht.

  1. Legen Sie die Umgebungsvariable KUBECONFIG fest:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Speichern Sie den Namen des problematischen PV in einer Variablen:
    PV_NAME={ PV_NAME }
  3. Rufen Sie den internen Namen des Volumes ab:
    volume_name=$(kubectl get pv ${PV_NAME?} -o jsonpath='{.spec.csi.volumeAttributes.internalName}')
  4. Folgen Sie der Anleitung im Runbook FILE-A0006, um Zugriff auf ONTAP zu erhalten.
  5. Löschen Sie Beziehungen mit diesem Volume als Quelle mit dem zuvor erfassten Passwort:
    ssh ${username?}@${mgmt_ip?} snapmirror delete -source-volume ${volume_name?} -destination-path "*"
    # enter the password collected from the breakglass secret
Sichern und wiederherstellen 1.12.0
1.12.1
1.12.2

Das Sicherungs-Repository ist fehlerfrei

Wenn das Sicherungs-Repository keinen Fehlerstatus hat, aber eine Benachrichtigung dafür ausgelöst wird, ist der Benachrichtigungs-Messwert für das Repository möglicherweise fälschlicherweise erhöht worden. Dies ist ein bekanntes Problem in Version 1.12.0, das in Version 1.12.4 behoben wurde. Die Ursache für dieses Problem ist, dass das Sicherungs-Repository regelmäßig versucht, eine Verbindung zum Objektspeicher herzustellen, um den Systemstatus zu prüfen. Wenn die Verbindung fehlschlägt, wird der Status „Nicht fehlerfrei“ festgelegt. Wenn das Sicherungs-Repository jedoch wiederhergestellt wird, wird der Messwert für den Systemstatus nicht richtig zurückgesetzt, sodass die Benachrichtigung auf unbestimmte Zeit ausgelöst wird. Um dieses Problem zu beheben, können Sie das Sicherungs-Repository manuell löschen und neu erstellen, um den Integritätsmesswert zurückzusetzen. Folgen Sie der Anleitung im BACK-R0003-Runbook, um das Sicherungs-Repository neu zu erstellen.

Abrechnung 1.12.4

bil-storage-system-cluster - Reconciliation error: E0121-Unterkomponente schlägt fehl

Symptome:

Fehlermeldung: bil-storage-system-cluster - Reconciliation error: E0121- rollback chart: no Job with the name "billing-storage-system-init-job-628" found

Die Unterkomponente bil-storage-system-cluster kann aufgrund veralteter Jobs nicht abgeglichen werden. Die billing-storage-system-init-job-628 und billing-storage-system-init-job-629 bleiben nach einem erfolgreichen Abschluss bestehen.

Workaround:

Gehen Sie folgendermaßen vor:

  1. Sicherungen der alten Abrechnungsjobs erstellen:
    cd /root/USERNAME
    kubectl --kubeconfig /root/release/gdchservices/gdchservices-system-kubeconfig get jobs billing-storage-system-init-job-628 -n billing-system -o yaml > billing-storage-system-init-job-628.yaml
    kubectl --kubeconfig /root/release/gdchservices/gdchservices-system-kubeconfig get jobs billing-storage-system-init-job-629 -n billing-system -o yaml > billing-storage-system-init-job-629.yaml
  2. Unterkomponente pausieren:
    export SUBCOMPONENT_NAME=bil-storage-system-cluster
    export SUBCOMPONENT_NAMESPACE=gdchservices-system-cluster
    
    kubectl annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=true
  3. Löschen Sie die inaktiven Jobs.
  4. Starten Sie oclcm-backend-controller neu.
  5. Heben Sie die Pausierung der untergeordneten Komponente auf.
Blockspeicher 1.12.4

Grafana-Pods bleiben aufgrund von Fehlern bei der Volumebereitstellung im Status Init hängen.

Symptome:

Grafana-Pods in den Namespaces anthos-identity-service-obs-system und platform-obs-obs-system befinden sich aufgrund von Fehlern bei der Volumebereitstellung im Status Init. Die Fehlermeldung in den kubelet-Logs weist auf ein Problem mit mehreren Anhängen hin. Das Problem wird durch einen Fehler in Trident verursacht, bei dem das zugrunde liegende Gerät für LUKS-Zuordnungen nicht richtig identifiziert und überprüft wird, was zu einem Fehler bei der Mehrfachzuordnung führt.

Workaround:

Prüfen Sie, ob der PVC einen deletionTimestamp hat. Wenn kein deletionTimestamp vorhanden ist (Pod-Migration), führen Sie die folgenden Schritte aus:

  1. Sehen Sie in der VolumeAttachment nach der PVC, um herauszufinden, wo das Volume derzeit angehängt ist.
  2. Schließen Sie die Nodes im Cluster aus, die nicht mit diesem Wert übereinstimmen.
  3. Löschen Sie die fehlerhafte Pod. Dadurch sollte sie zur ursprünglichen Node zurückmigriert werden.

Wenn Sie nach der Prüfung feststellen, dass ein deletionTimestamp vorhanden ist (Volume-Löschung), gehen Sie so vor:

  1. Sehen Sie in der VolumeAttachment nach der PVC, um herauszufinden, wo das Volume derzeit angehängt ist.
  2. Geben Sie auf der Node den Inhalt der zugehörigen Tracking-Datei aus:
    cat /var/lib/trident/tracking/PVC_NAME.json
  3. Prüfen Sie, ob das LUKS-Gerät, das im Feld devicePath der Tracking-Datei-Ausgabe gefunden wurde, tatsächlich geschlossen ist. Dieser Pfad sollte zu diesem Zeitpunkt nicht vorhanden sein:
    stat DEVICE_PATH
  4. Prüfen Sie, ob die Seriennummer derzeit einem Multipath-Gerät zugeordnet ist.
    1. Kopieren Sie den Wert im Feld iscsiLunSerial der Tracking-Datei.
    2. Konvertieren Sie diesen Wert in den erwarteten Hex-Wert:
      echo 'iISCSILUNSERIAL>' | xxd -l 12 -ps
    3. Prüfen Sie mit diesem neuen Wert, ob der Multipath-Eintrag noch vorhanden ist:
      multipath -ll | grep SERIAL_HEX
    4. Wenn sie nicht vorhanden ist, löschen Sie die Tracking-Datei.
    5. Wenn sie vorhanden ist, wird ein etwas längerer serieller Hexadezimalwert als der gesuchte Wert angezeigt, der als multipathSerial bezeichnet wird. Führen Sie den folgenden Befehl aus und suchen Sie nach den Blockgeräten:
      multipath -ll MULTIPATH_SERIAL
    6. Führen Sie dann die folgenden Befehle aus. Der letzte Befehl muss für jedes Blockgerät einzeln ausgeführt werden:
                systemctl restart iscsid
                systemctl restart multipathd
                multipath -f MULTIPATH_SERIAL
                echo 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
                  
Clusterverwaltung 1.12.0
1.12.1
1.12.2
1.12.4

machine-init-Job schlägt bei der Clusterbereitstellung fehl

Symptome:

  1. Während der Clusterbereitstellung schlägt der machine-init-Job des zweiten Knotens der Steuerungsebene mit der folgenden Meldung fehl:
    FAILED! => {"changed": true, "cmd": "/usr/bin/kubeadm join phase control-plane-prepare certs --config /dev/stdin --v 5".
  2. Rufen Sie die Logs auf:
    kubectl --kubeconfig=ADMIN_KUBECONFIG logs -p kube-apiserver-{first_node_name} -n kube-system | grep "etcdmain: open /etc/kubernetes/pki/etcd/ca.crt: permission denied"

    Die Ausgabe zeigt ein nicht leeres Ergebnis.

Workaround:

  1. Aktivieren oder deaktivieren Sie die Berechtigung für /etc/kubernetes/pki/etcd/ca.crt. Dies ist ein sehr zeitkritischer Vorgang. Die Berechtigung muss nach dem vorherigen Lauf des machine-init-Jobs, aber vor dem nächsten Lauf des machine-init-Jobs erfolgen, da machine-init die Berechtigung wieder auf „root“ setzt.
  2. Starten Sie etcd auf dem zweiten Knoten neu, um etcd auf dem ersten Knoten aus dem Crash-Loop zu beenden.

    Nachdem Sie diese beiden Schritte ausgeführt haben, wird die kube-apiserver im ersten Knoten ausgeführt und der nächste machine-init-Job wird erfolgreich abgeschlossen.

Clusterverwaltung 1.12.2

Erforderlicher IPv4-PodCIDR nicht verfügbar

Symptome:

Der Cilium-Agent gibt die folgende Warnung aus:

level=warning msg="Waiting for k8s node information" error="required IPv4 PodCIDR not available" subsys=k8s 

Workaround:

  1. Ermitteln Sie die IP-Adresse des Knotens, den Sie entfernen möchten.
  2. Entfernen Sie die IP-Adresse aus spec.nodes in der benutzerdefinierten Ressource NodePool.
  3. Warten Sie, bis der Knoten vollständig aus dem NodePool entfernt wurde. Wenn der Knoten nicht entfernt wird, führen Sie einen force-remove aus:
    1. Fügen Sie der benutzerdefinierten Ressource Machine die Annotation baremetal.cluster.gke.io/force-remove=true hinzu:
      kubectl -n org-1-system-cluster annotate machine IP_ADDRESS baremetal.cluster.gke.io/force-remove=true 
  4. Fügen Sie die IP-Adresse in der benutzerdefinierten Ressource NodePool wieder zu spec.nodes hinzu.
Logging 1.12.0
1.12.1

Kubernetes API-Serverlogs werden nicht an ein SIEM-Ziel weitergeleitet

Symptome:

Nachdem Sie den Export in ein externes SIEM-System eingerichtet haben, ist die SIEM-Eingabe nicht in der Fluent Bit-Verarbeitungspipeline enthalten und Kubernetes API-Serverlogs sind in diesem SIEM nicht vorhanden.

Netzwerk 1.12.4

Der Job machine-init schlägt während des Upgrades fehl

Symptome:

Wenn Sie ein Upgrade von Version 1.12.2 auf Version 1.12.4 durchführen und ein Knoten entfernt und dann wieder hinzugefügt wird, schlägt der machine-init-Prozess für diesen Knoten möglicherweise fehl. Dieser Fehler tritt auf, weil der Netzwerk-Traffic vom neu hinzugefügten Knoten zu wichtigen Diensten der Steuerungsebene durch die Richtlinie ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes abgelehnt wird. Dieser Fehler wird durch die Statusmeldungen in dieser Beispielausgabe hervorgehoben:
      Feb 17 18:52:52.330: 30.0.0.9:41046 (world) <> 30.0.0.7:2379 (host) policy-verdict:none INGRESS DENIED (TCP Flags: SYN)
      Feb 17 18:52:52.330: 30.0.0.9:41046 (world) <> 30.0.0.7:2379 (host) Policy denied DROPPED (TCP Flags: SYN)

Workaround:

So können Sie dieses Problem beheben:

  1. Für den Administrator-Root-Cluster:
    1. Rufen Sie CIDRs aus CIDRClaim/org-external-cidr -n root ab (insbesondere aus dem Feld .status.ipv4AllocationStatus.allocatedCidrBlocks). Führen Sie den folgenden Befehl im Administratorcluster des Stammverzeichnisses aus:
      ROOTCIDRs=$(ka get cidrclaim/org-external-cidr -n root -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Fügen Sie diese CIDRs dem ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes und insbesondere dem Feld .spec.ingress.fromCIDR hinzu. Wenden Sie diese Änderung mit dem folgenden Befehl im Stammadministratorcluster an:
      ka get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ROOTCIDRs}"'}]' \
        | ka apply -f -
  2. Für den Administratorcluster der Organisation:
    1. CIDRs für die Organisation abrufen (z.B. org-1) aus CIDRClaim/org-external-cidr -n org-1 (insbesondere dem Feld .status.ipv4AllocationStatus.allocatedCidrBlocks). Dieser Befehl wird für den Administratorcluster der obersten Ebene ausgeführt, um die CIDRs für „org-1“ abzurufen:
      ORGCIDRs=$(ka get cidrclaim/org-external-cidr -n org-1 -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Fügen Sie diese CIDRs dem ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes und insbesondere dem Feld .spec.ingress.fromCIDR hinzu. Wenden Sie diese Änderung mit dem folgenden Befehl auf den entsprechenden Administratorcluster der Organisation an:
      ko get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ORGCIDRs}"'}]' \
        | ko apply -f -

Diese Änderung muss nur einmal vor dem Upgrade vorgenommen werden.

Netzwerk 1.12.0 
1.12.1

Probleme mit VM- und Container-Updates, Beendigung und Planung

Symptome:

Auf einem Bare-Metal-Knoten des Systemclusters können zwei anetd-Container nicht beendet werden. Nachdem der Prozess zwangsweise beendet und kubelet und containerd neu gestartet wurden, wird der anetd-Pod neu erstellt, aber alle Container bleiben in podInit hängen und containerd meldet die Fehlermeldung:

`failed to create containerd task: failed to create shim task: context deadline exceeded: unknown`.

Dadurch wird verhindert, dass die Container Network Interface (CNI) gestartet wird, und es werden keine weiteren Pods geplant.

Workaround:

Führen Sie diese Maßnahmen aus, um diesen Knotenstatus zu vermeiden:

  • Planen Sie nicht mehr als 10 PVCs gleichzeitig auf einem einzelnen Knoten. Warten Sie, bis sie gemountet sind, bevor Sie weitere planen. Dies war am deutlichsten beim Erstellen von VMs zu sehen.
  • Aktualisieren Sie die Datei /etc/lvm/lvm.conf auf jedem Knoten, sodass sie die Zeile filter = [ "r|/dev/dm.|", "r|/dev/sg.|" ] im Block devices{} enthält.

Wenn der Knoten in einen Zustand gerät, in dem Zeitüberschreitungen für das Anhängen und Mounten von Volumes auftreten oder ein Volume nicht gelöscht werden kann, prüfen Sie die Anzahl der hängenden vgs-Prozesse auf dem Knoten, um festzustellen, ob sich der Knoten in diesem besonders schlechten Zustand befindet. Die zuverlässigste Methode, einen Knoten in diesem Zustand zu beheben, ist, ihn neu zu starten.

Es gibt einen weiteren Fehlermodus, der auftreten kann. Dieser Fehlermodus hat bei dem Mount-Versuch die folgende Signatur: mount(2) system call failed: No space left on device. Dies ist wahrscheinlich auf die Mount-Weitergabe auf dem Knoten zurückzuführen. Prüfen Sie dies mit dem Befehl cat /proc/mounts | grep devtmpfs | awk '{ print $2 }' | sort -n | uniq -c. Wenn einer dieser Werte größer als 1 ist, löschen Sie den Pod, der ihn verwendet. Dadurch sollte das Unmounten ausgelöst werden. Wenn das nicht funktioniert, heben Sie die Bereitstellung des Pfads manuell auf. Wenn das Problem weiterhin besteht, starte das Gerät neu.

Netzwerk 1.12.2

GDC kann während des ersten Bootstrapping-Vorgangs keine Switch-ACLs aus Traffic-Richtlinien erstellen

In bestimmten Szenarien kann es aufgrund von Race-Bedingungen vorkommen, dass bei der ersten Einrichtung von Google Distributed Cloud (GDC) Air-Gapped die erforderlichen Switch-ACLs für Kubernetes-benutzerdefinierte Ressourcen nicht erstellt werden.

Symptome:

Listen Sie die ACL-CRs des Switches auf:

kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

Die Ausgabe dieses Befehls gibt an, dass keine ACLs für den Management-Switch (mgmt-switch-acl) erstellt wurden.

No resources found in gpc-system namespace.

Workaround:

  1. TrafficPolicy-CRs auflisten:
    kubectl get trafficpolicies -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

    Die Ausgabe gibt zwei Kubernetes-CRs für Traffic Policy zurück:

    NAME                          AGE     NAME
    default-traffic-policy-data   4d17h   default-traffic-policy-data
    default-traffic-policy-mgmt   4d17h   default-traffic-policy-mgmt
  2. Bearbeiten Sie die Kubernetes-CR für die default-traffic-policy-mgmt-Trafficrichtlinie:
    kubectl edit trafficpolicies default-traffic-policy-mgmt -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  3. Suchen Sie die letzte Richtlinienregel in dieser Datei. Sie befindet sich möglicherweise am Ende der Datei.
  4. Suchen Sie das Beschreibungsfeld der letzten Richtlinienregel. Das Feld könnte so aussehen:
    Deny All rule for Management Network
  5. Bearbeiten Sie diese Beschreibung und fügen Sie am Anfang der Beschreibungszeile The ein:
    The Deny All rule for Management Network
  6. Speichern Sie die Datei und schließen Sie sie.
  7. Lassen Sie sich die Kubernetes-ACL-CRs für Switches noch einmal auflisten:
    kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  8. In der Ausgabe wird die ACL für den Verwaltungsschalter (mgmt-switch-acl) aufgeführt:
    NAME              AGE   NAME
    mgmt-switch-acl   23h   mgmt-switch-acl
Physische Server 1.12.1
1.12.2

NodePool hat Server mit unbekanntem Status während der Erstellung

Symptome:

Beim Bereitstellen von Server während der Clustererstellung kann es vorkommen, dass der Server als bereitgestellt markiert wird, aber die Bedingung Provision-Ready fehlt. Daher kann NodePool diesen Server nicht nutzen. Eine Beispiel-Fehlermeldung in NodePool könnte so aussehen:

Events:
  Type     Reason          Age    From    Message
  ----     ------          ----   ----    -------
  Warning  ReconcileError  xxx    Server  policy failure PolicyPreflightCompleted(UnreachableError): {PolicyPreflightCompleted False 3 2023-11-07 22:10:56 +0000 UTC UnreachableError reachability err: Failed to connect to the host via ssh: ssh: connect to host xx.xx.xx.xx port 22: Connection timed out}
      

Workaround:

Setzen Sie ILO mit dem folgenden Skript zurück:

      SERVER_NAME=
      ROOT_ADMIN_KUBECONFIG=
      ILO_IP=$(kubectl get servers ${SERVER_NAME} -n gpc-system --template={{.spec.bmc.ip}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG})
      SECRET_NAME=$(kubectl get secrets -o go-template='{{range $index,$pod := .items}}{{.metadata.name}}{{"\n"}}{{end}}' -n gpc-system --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | grep bmc | grep ${SERVER_NAME})
      ILO_USER=$(kubectl get secrets ${SECRET_NAME} -n gpc-system --template={{.data.username}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | base64 -d)
      ILO_PASS=$(kubectl get secrets ${SECRET_NAME} -n gpc-system --template={{.data.password}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | base64 -d)
      # Perform iLO Reset
      
      curl -k -u ${ILO_USER}:${ILO_PASS}  -H "Content-Type: application/json" -H "OData-Version: 4.0" https://${ILO_IP}/redfish/v1/Managers/1/Actions/Manager.Reset --data '{"ResetType":"ForceRestart"}' -X POST | jq
      
      # Perform server power cycle, start with power off target server
       
       curl -k -u ${ILO_USER}:${ILO_PASS} -H "Content-Type: application/json" -H "OData-Version: 4.0" -X POST https://${ILO_IP}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset --data '{"ResetType":"ForceOff"}' | jq .
      
      # Verify target server powered off successfully
      
      curl -kqs -u ${ILO_USER}:${ILO_PASS} https://${ILO_IP}/redfish/v1/Systems/1 | jq '.PowerState'
       
      # Power server back
      
      curl -k -u ${ILO_USER}:${ILO_PASS} -H "Content-Type: application/jsonls " -H "OData-Version: 4.0" -X POST https://${ILO_IP}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset --data '{"ResetType":"On"}' | jq .
       
      

In seltenen Fällen kann es vorkommen, dass das Problem durch das Zurücksetzen von iLO nicht vollständig behoben wird. In diesem Fall muss der Server neu bereitgestellt werden. Die detaillierten Verfahren finden Sie in den Runbooks OS-P0002 und OS-P0003.

Physische Server 1.12.2

Fehler beim Upgrade der Knoten-Firmware in der Mandantenorganisation

Symptome:

Das Upgrade des Bare-Metal-Knotens befindet sich seit mehr als drei Stunden im Status in-progress.

Workaround:

Folgen Sie der Anleitung im SERV-R0005-Runbook.

Netzwerk 1.12.1

Vorinstallationsskript schlägt bei mehreren Switches fehl

Symptome:

Die POAP-Bereitstellung schlägt immer wieder fehl und im POAP-Log wird eine Meldung wie diese angezeigt:

2024 Feb 27 20:20:25 switch %$ VDC-1 %$ %USER-1-SYSTEM_MSG: S/N[FDO26391GHS]-MAC[98:A2:C0:F8:60:6A] - Running: 'nxos.10.3.1.bin' - /script.sh
2024 Feb 27 20:20:25 switch %$ VDC-1 %$ %USER-1-SYSTEM_MSG: S/N[FDO26391GHS]-MAC[98:A2:C0:F8:60:6A] - Target: 'nxos64-cs.10.3.4a.M.bin' - /script.sh

Sie finden nxos.10.3.1.bin nicht, aber etwas Ähnliches wie nxos64-cs.10.3.1.F.bin im Bootflash-Verzeichnis des Switches.

Workaround:

Führen Sie auf dem Bootstrapper-Computer die folgenden Schritte aus. Sie müssen diese Schritte ausführen, während die Vorinstallation läuft. Wenn es mehrere /tmp/preinstall-bootstrap--Ordner gibt, wenden Sie die Änderungen auf den aktuellen Ordner an, der vom Vorinstallationsprozess verwendet wird. Sehen Sie dazu in den Logs des Vorinstallationsprozesses nach. Wenn Sie den Vorinstallationsbefehl neu starten müssen, wird dadurch auch ein neuer /tmp/preinstall-bootstrap--Ordner erstellt.

  1. Wechseln Sie zum Ordner /tmp/preinstall-bootstrap-RANDOM_NUMBER :
  2. Suchen Sie im Ordner nach der Datei poap.py.
  3. Entfernen Sie die Zeile mit der MD5-Prüfsumme vollständig aus dieser Datei, sodass head -n 4 poap.py so aussieht:
    #!/bin/env python3
    import glob
    import os
    import pkgutil
  4. Fügen Sie in derselben Datei die folgenden Zeilen zu version_to_image_file hinzu:
        "nxos.10.2.1.bin": "nxos64.10.2.1.F.bin",
        "nxos.10.2.2.bin": "nxos64-cs.10.2.2.F.bin",
        "nxos.10.2.3.bin": "nxos64-cs.10.2.3.F.bin",
        "nxos.10.2.4.bin": "nxos64-cs.10.2.4.M.bin",
        "nxos.10.2.5.bin": "nxos64-cs.10.2.5.M.bin",
        "nxos.10.2.6.bin": "nxos64-cs.10.2.6.M.bin",
        "nxos.10.2.7.bin": "nxos64-cs.10.2.7.M.bin",
        "nxos.10.3.1.bin": "nxos64-cs.10.3.1.F.bin",
        "nxos.10.3.2.bin": "nxos64-cs.10.3.2.F.bin",

    Der Abschnitt der aktualisierten Datei sieht so aus:

    version_to_image_file = {
        "nxos.10.2.1.bin": "nxos64.10.2.1.F.bin",
        "nxos.10.2.2.bin": "nxos64-cs.10.2.2.F.bin",
        "nxos.10.2.3.bin": "nxos64-cs.10.2.3.F.bin",
        "nxos.10.2.4.bin": "nxos64-cs.10.2.4.M.bin",
        "nxos.10.2.5.bin": "nxos64-cs.10.2.5.M.bin",
        "nxos.10.2.6.bin": "nxos64-cs.10.2.6.M.bin",
        "nxos.10.2.7.bin": "nxos64-cs.10.2.7.M.bin",
        "nxos.10.3.1.bin": "nxos64-cs.10.3.1.F.bin",
        "nxos.10.3.2.bin": "nxos64-cs.10.3.2.F.bin",
        "nxos.10.3.3.bin": "nxos64-cs.10.3.3.F.bin",
        "nxos.10.3.4a.bin": "nxos64-cs.10.3.4a.M.bin",
    }
  5. Führen Sie md5sum poap.py aus, um die MD5-Summe zu erhalten, und fügen Sie sie wieder zu poap.py hinzu, damit head -n 4 poap.py so aussieht:
    #!/bin/env python3
    #md5sum="396bed5a5f579b80da5fac6edf0b590c"
    import glob
    import os
Netzwerk 1.12.1

Das Upgrade von Version 1.11.x auf Version 1.12.1 schlägt fehl, weil der pnet-Controller die benutzerdefinierte Ressource (Custom Resource, CR) hairpinlink nicht erfolgreich generiert.

Workaround:

  1. Bearbeiten Sie nach dem Upgrade im Administratorcluster der obersten Ebene die Datei clusterroles/pnet-core-backend-controllers-role.
  2. Suchen Sie nach hairpinlinks und fügen Sie der Ressource die Berechtigungen create,update,delete hinzu.
  3. Prüfen Sie, ob die CRs hairpinlinks und hairpinbgpsessions generiert wurden.
NTP-Server 1.12.1

NTP-Relay-Server-Pod stürzt nach dem Neustart ab

Symptome:

  • Möglicherweise wird die folgende Meldung angezeigt, wenn Sie den Befehl kubectl get pods ausführen:
    ntp-system                      ntp-relay-server-75bbf                                            1/2     CrashLoopBackOff    123 (5m12s ago)   24h
  • Möglicherweise wird in den Logs eine Warnung zur Aktivitätsprüfung angezeigt:
    Warning  BackOff    5m55s (x82 over 28m)      kubelet  Back-off restarting failed container ntp-image in pod ntp-relay-server-75bbf_ntp-system(28e4e28f-4f99-4c6e-8c26-d271f0c7995c)
    Warning  Unhealthy  <invalid> (x37 over 35m)  kubelet  Liveness probe failed: Leap status is Not synchronised

Dieses Problem kann dazu führen, dass die Zeit auf den Servern nicht synchronisiert ist.

Workaround:

  1. Öffnen Sie das NTP-DaemonSet zum Bearbeiten:
    kubectl edit daemonset/ntp-relay-server -n ntp-system
  2. Entfernen Sie den Abschnitt livenessProbe: bis zur Zeile timeoutSeconds: 30.
  3. Fügen Sie dem Container „ntp-image“ den folgenden Abschnitt hinzu:
    securityContext:
      capabilities:
        add:
        - SYS_TIME
  4. Das Ergebnis ist eine Konfiguration, die so aussieht:

    containers:
      - name: ntp-image
      image: "DOCKER_REGISTRY/DOCKER_REPOSITORY/ntp-relay-server:DOCKER_TAG"
      imagePullPolicy: Always
      securityContext:
        capabilities:
          add:
          - SYS_TIME
  5. Öffnen Sie die NTP-Richtlinie des Betriebssystems zum Bearbeiten:
    kubectl edit ospolicy/bm-ntp-policy -n gpc-system
  6. Entfernen Sie alle NTP-IP-Adressen im Richtlinienabschnitt. Danach sieht die Richtlinie so aus:
    policy:
      installPlaybook:
        extraVars:
          ntp_servers: {}
        name: server-ntp-config
        secrets: {}
          
NTP-Server 1.12.1

ntp-relay-job-xxxx-Pod stürzt nach dem Neustart ab

Symptome:

Möglicherweise wird die folgende Meldung angezeigt, wenn Sie den Befehl kubectl get pods ausführen:

NAMESPACE                       NAME                                                              READY   STATUS              RESTARTS         AGE
ntp-system                      ntp-relay-job-1707869137-kd7p4                                    0/1     CrashLoopBackOff    3 (15s ago)      59s

Dieses Problem wird durch die unsachgemäße Bereinigung des Upgradejobs verursacht. Es sind keine Maßnahmen erforderlich und der Job kann im Absturzschleifenstatus verbleiben.

NTP-Server 1.12.2

Das Betriebssystem des Knotens hat eine nicht synchronisierte Zeit.

Symptome:

In den Logs des Systemclusters wird möglicherweise die folgende Meldung angezeigt:

INFO: task umount:200725 blocked for more than 120 seconds.

Das ist ein Problem für Server, auf denen die Zeit nicht synchronisiert wird. Die Konfiguration wird nicht richtig angewendet und muss in einen anderen Namespace geändert werden, damit sie richtig angewendet wird.

Workaround:

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

  1. Vorhandene Betriebssystemrichtlinien auflisten:
    kubectl get ospolicies -n ntp-system

    Die Ausgabe zeigt admin-ntp-policy oder worker-ntp-policy.

  2. Speichern Sie die Richtlinie anhand ihres Namens in einer YAML-Datei:
    kubectl get ospolicy/admin-ntp-policy -n ntp-system -o yaml > ntp-ospolicy.yaml
    kubectl get ospolicy/worker-ntp-policy -n ntp-system -o yaml > ntp-ospolicy.yaml
  3. Bearbeiten Sie die Datei, indem Sie metadata.namespace von ntp-system in gpc-system ändern und status: line und alles danach entfernen.
  4. Wenden Sie die bearbeitete Datei auf den Cluster an:
    kubectl apply -f ntp-ospolicy.yaml
  5. Warten Sie einige Minuten, bis der Controller die Betriebssystemrichtlinie angewendet hat.
  6. Stellen Sie eine SSH-Verbindung zu einem der Knoten her, auf die die OSPolicy angewendet wird, und führen Sie cat /etc/chrony.conf aus. Die Ausgabe enthält am Anfang der Datei eine Meldung, dass sie von Ansible verwaltet wird und dass die Server nist.time.gov oder ntp.pool aus der Konfiguration entfernt wurden.
VM-Sicherung und ‑Wiederherstellung 1.12.0

VM-Webhook-Einstellungen verhindern, dass Nutzer VM-Sicherungs- und ‑Wiederherstellungsvorgänge starten

Symptome:

Der Sicherungs- und Wiederherstellungsprozess für VMs kann von Nutzern aufgrund falscher rollenbasierter Zugriffssteuerung (Role-based Access Control, RBAC) und Schemaeinstellungen im VM-Manager nicht gestartet werden.
Die Namen von VM-Sicherungsplänen dürfen maximal 63 Zeichen lang sein. Möglicherweise wird die folgende Fehlermeldung angezeigt:

Internal error occurred: failed calling webhook
"vvirtualmachinebackupplantemplates.virtualmachine.gdc.goog":
failed to call webhook: Post "https://vmm-vm-controller-webhooks.vm-system.svc:443/validate-virtualmachine-gdc-goog-v1-virtualmachinebackupplantemplate?timeout=10s":
context deadline exceeded

Workaround:

VM-Sicherungsplannamen sind eine Verkettung des Namens VirtualMachineBackupPlanTemplate, des Ressourcentyps (entweder vm oder vm-disk) und des Namens der Ressource. Dieser verkettete String darf maximal 63 Zeichen lang sein.
Halten Sie die Namen dieser Ressourcen beim Erstellen kurz. Weitere Informationen zum Erstellen dieser Ressourcen finden Sie unter VM-Instanz erstellen und starten und Sicherungsplan für VMs erstellen.

Datenbankdienst 1.12.0

Datenbankdienst-Arbeitslasten werden im Systemcluster ausgeführt

Symptome:

Database Service-Arbeitslasten werden in separaten Projekten im Distributed Cloud-Systemcluster bereitgestellt und konfiguriert. Projekte werden zwar verwendet, um administrative Grenzen in Distributed Cloud zu erzwingen, haben aber keinen Einfluss darauf, wie und wo eine Arbeitslast ausgeführt wird. Daher können diese Arbeitslasten die zugrunde liegende Recheninfrastruktur mit anderen Datenbankinstanzen und verschiedenen Steuerungsebenensystemen gemeinsam nutzen.

Workaround:

Für Datenbankarbeitslasten, die zusätzliche Isolation erfordern, können Nutzer die Erstellung eines Knotenpools im Systemcluster anfordern. Dieser Knotenpool, auf den bei der Projekterstellung verwiesen werden muss, sorgt dafür, dass Datenbankarbeitslasten auf einer dedizierten Recheninfrastruktur bereitgestellt und ausgeführt werden. Die Konfiguration des isolierten Knotenpools muss vom Infrastruktur-Operator abgeschlossen werden.

Datenbankdienst 1.12.2

AlloyDB Omni-DBCluster bleibt im Abgleichsstatus hängen

Symptome:

Wenn in AlloyDB Omni-Version 15.2.1 mehrere AlloyDB Omni-Cluster auf demselben Knoten erstellt werden, bleibt der zuletzt erstellte Cluster im Status „Abgleichen“ hängen. PostgreSQL-Logs mit Befehl abrufen

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- cat /obs/diagnostic/postgresql.log 
Die Datenbank sollte nicht gestartet werden können. Die Stacktraces sollten in etwa so aussehen:

2024-08-19 21:20:15.594 UTC: [9400/walwriter] LOG:  [auxprocess.c:129]  BaseInit started for AuxProcType: walwriter
2024-08-19 21:20:15.595 UTC: [9400/walwriter] LOG:  [auxprocess.c:131]  BaseInit finished for AuxProcType: walwriter
*** SIGABRT received at time=1724102415 on cpu 25 ***
PC: @     0x7f03140a9d3c  (unknown)  (unknown)
2024-08-19 21:20:15.601 UTC: [9399/client backend] alloydbadmin@localhost(33906) [unknown] postgres 66c3b70f.24b7 57P03:FATAL:  [postmaster.c:2601]  the database system is not yet accepting connections
2024-08-19 21:20:15.601 UTC: [9399/client backend] alloydbadmin@localhost(33906) [unknown] postgres 66c3b70f.24b7 57P03:DETAIL:  Consistent recovery state has not been yet reached.
    @     0x5557f3b17e31        208  absl::AbslFailureSignalHandler()
    @     0x7f031405afd0    4677136  (unknown)
    @     0x7f0314e75b20  (unknown)  (unknown)
[PID: 9400] : *** SIGABRT received at time=1724102415 on cpu 25 ***
[PID: 9400] : PC: @     0x7f03140a9d3c  (unknown)  (unknown)
[PID: 9400] :     @     0x5557f3b17f75        208  absl::AbslFailureSignalHandler()
[PID: 9400] :     @     0x7f031405afd0    4677136  (unknown)
[PID: 9400] :     @     0x7f0314e75b20  (unknown)  (unknown)

Workaround:

1. Shell-Verbindung zum Datenbank-Pod herstellen

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- bash 
2. Erstellen Sie manuell eine Konfigurationsdatei unter /mnt/disks/pgsql/data/postgresql.conf.d/.
echo "enable_lux_wal_writer = off" > /mnt/disks/pgsql/data/postgresql.conf.d/55user.conf
3. Starten Sie die Datenbank neu, um die Konfigurationsdatei zu laden.
supervisorctl restart postgres
4. Die Datenbank wird erfolgreich gestartet. Die Ausgabe sieht in etwa so aus:
Chose default config file: /etc/supervisor/supervisord.conf
postgres: ERROR (not running)
postgres: started

Firewall 1.12.0

Firewall-Bootstrap-Datei „secret.yaml“ enthält TO-BE-FILLED

Symptome:

Bei der Bereitstellung für Kunden muss der Administratornutzername der secret.yaml-Datei admin sein. Stattdessen enthält die Datei nach der ersten Erstellung TO-BE-FILLED. Der admin-Nutzername muss verwendet werden, um die erste Konfiguration auf der Firewall zu initialisieren, und zwar über die Loopback-IP admin\admin.

Workaround:

Prüfen Sie, ob TO-BE-FILLED in den folgenden Firewallanmeldedaten vorhanden ist:

  • CELL_ID/CELL_ID-secret.yaml
  • CELL_ID-ab-rack/CELL_ID-secret.yaml
  • CELL_ID-ac-rack/CELL_ID-secret.yaml
  • Prüfen Sie, ob alle Firewall-Administratorkonten den Nutzernamen admin haben.

    Firewall 1.12.2

    bm-system-machine-init schlägt beim ersten Knoten fehl

    Symptome:

    Standardmäßige IDPS-Firewallrichtlinien unterstützen die benutzerdefinierten IPs der Organisation für die Direct Connect-Verbindung nicht. Daher schlägt die Erstellung von Organisationen mit benutzerdefinierten IPs fehl, weil die benutzerdefinierten IPs keine Verbindung zu Harbor im Root-Administrator herstellen können.

    Workaround:

    Um den Traffic zu entsperren, erstellen Sie manuell eine SecurityPolicyRule für die benutzerdefinierten IP-Adressen der Organisation und stellen Sie sie auf den IDPS-Firewalls bereit. Führen Sie die Schritte im Runbook FW-G0002 aus, um die folgenden Schritte auszuführen:

    1. Erstellen Sie einen eingehenden SecurityPolicyRule im virtuellen Root-Firewallsystem, damit die benutzerdefinierten IPs der Organisation auf Root-Harbor zugreifen können.

        apiVersion: firewall.private.gdc.goog/v1alpha2
        kind: SecurityPolicyRule
        metadata:
          labels:
            firewall.private.gdc.goog/policy-type: idps
          name: root-default-ingress-ORG_NAME-custom
          namespace: root
        spec:
          action: allow
          destination:
            addresses:
            - root-external-group
            zones:
            - vsys1-gpc
          firewallVirtualSystemRef:
            name: vsys1-root
          priority: 150
          profile:
            group: gdch-threat-profile-group
            type: group
          service:
            option: selected
            ports:
            - ports: "123"
              protocol: UDP
            - ports: "1122"
              protocol: TCP
            - ports: "5140"
              protocol: TCP
            - ports: "10443"
              protocol: TCP
          source:
            addresses:
            - org.customIPConfig.externalCIDRs # example: 30.0.0.0/22
            zones:
            - vsys1-cp
        

    2. Erstellen Sie eine SecurityPolicyRule für eingehenden Traffic in der Firewall des Organisations-Vsys, damit der Root-Nutzer auf den API-Server der Organisation zugreifen kann.

        apiVersion: firewall.private.gdc.goog/v1alpha2
        kind: SecurityPolicyRule
        metadata:
          labels:
            firewall.private.gdc.goog/policy-type: idps
          name: ORG_NAME-custom-default-ingress-root
          namespace: ORG_NAME # example: gpu-org-1
        spec:
          action: allow
          destination:
            addresses:
            - org.customIPConfig.externalCIDRs # example: 30.0.0.0/22
            zones:
            - ORG_VSYS_ID-gpc # example: vsys3-gpc
          firewallVirtualSystemRef:
             name: ORG_VSYS_ID-ORG_NAME # example: vsys3-gpu-org-1
          priority: 110
          profile:
            group: gdch-threat-profile-group
            type: group
          service:
            option: selected
            ports:
            - ports: "22"
              protocol: TCP
            - ports: "5140"
              protocol: TCP
            - ports: "6443"
              protocol: TCP
            - ports: "10443"
              protocol: TCP
          source:
            addresses:
            - root-external-group
            zones:
            - ORG_VSYS_ID-cp # example: vsys3-cp
        

    3. Lösen Sie den Austausch der Firewallkonfiguration aus, um die SecurityPolicyRules bereitzustellen.

    Hardwaresicherheitsmodul 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Deaktivierte HSM-Testlizenzen sind weiterhin erkennbar

    Symptome:

    Aufgrund eines bekannten Problems in CipherTrust Manager sind deaktivierte Testlizenzen weiterhin erkennbar und können fälschlicherweise Ablaufwarnungen auslösen.

    Workaround:

    Prüfen Sie anhand von HSM-R0003 die aktiven regulären Lizenzen und löschen Sie die deaktivierten Testlizenzen.

    Hardwaresicherheitsmodul 1.12.0

    Hardware-Sicherheitsmodul verhält sich beim Löschen eines KMS unerwartet

    Symptome:

    Das Hardwaresicherheitsmodul (HSM) führt beim Löschen eines KMS CTMKey unerwartete Aktionen aus. Beispiel: Der KMS-Dienst wird für die Organisation möglicherweise nicht gestartet.

    Workaround:

    Nutzer können die Daten durch Löschen der KMS-Schlüssel anstelle des KMS-Stammschlüssels kryptografisch vernichten. Dies wird als CTMKey dargestellt.

    Hardwaresicherheitsmodul 1.12.0
    1.12.1
    1.12.2

    Rotierendes Secret für Hardware-Sicherheitsmodule hat einen unbekannten Status

    Symptome:

    Liste unbekannter rotierbarer Secrets abrufen:

    kubectl get rotatablesecret -A | grep -i unknown

    Die Ausgabe könnte so aussehen:

    gpc-system     yz-aa-hsm01-kmip-certificate                HSM-0016                                Unknown
    gpc-system     yz-aa-hsm01-nae-certificate                 HSM-0016       3d19h      <invalid>    Unknown
    gpc-system     yz-aa-hsm01-web-certificate                 HSM-0016       2d         <invalid>   Unknown

    Anforderungen:

    1. Zugriff auf den Stammadministratorcluster
    2. Das jq-Tool
    3. Folgen Sie der Anleitung unter IAM-R0004, um die KUBECONFIG für den Root-Administratorcluster zu generieren.
    4. Folgen Sie der Anleitung unter IAM-R0005, um clusterrole/hsm-admin im Root-Administratorcluster abzurufen.

    Workaround:

    1. Rufen Sie eine Liste der IP-Adressen des Datennetzwerks des HSM ab:
      kubectl --kubeconfig ${KUBECONFIG:?} get hsm -A -o json | jq -r '.items[] | "\(.spec.dataNetwork.ip)"'

      Die Ausgabe könnte so aussehen:

      10.89.3.2
      10.89.3.3
      10.89.3.4
    2. Führen Sie für jede der HSM-Datennetzwerk-IP-Adressen aus dem vorherigen Schritt Folgendes aus:
      1. Exportieren Sie die IP-Adresse in eine Variable namens HSM_DATA_IP:
        export HSM_DATA_IP=HSM_DATA_IP_ADDRESS
      2. Rufen Sie die Webserverzertifikate (Port 443), nae-Serverzertifikate (Port 9000) und kmip-Serverzertifikate (Port 5696) ab und prüfen Sie die Gültigkeit des Zertifikats:
        openssl s_client -showcerts -connect $HSM_DATA_IP:443 2>/dev/null | openssl x509 -text
        openssl s_client -showcerts -connect $HSM_DATA_IP:9000 2>/dev/null | openssl x509 -text
        openssl s_client -showcerts -connect $HSM_DATA_IP:5696 2>/dev/null | openssl x509 -text

        Die Ausgabe könnte so aussehen:

        Validity
                    Not Before: Mar 12 20:36:58 2024 GMT
                    Not After : Jun 16 20:36:58 2026 GMT
    3. Folgen Sie der Anleitung im HSM T0016-Runbook, um die Serverzertifikate zu erneuern, wenn das Not After-Datum innerhalb von 30 Tagen ab heute liegt.
    Monitoring 1.12.0

    Node Exporter-Zertifikate sind beim Erstellen einer Organisation möglicherweise nicht bereit

    Symptome:

    Zertifikate werden beim Erstellen einer Organisation nicht bereitgestellt:

    $ kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig get certificate -n mon-system
    NAME                                  READY   SECRET                                     AGE
    mon-node-exporter-backend-consumers   False   mon-node-exporter-backend-consumers-cert   20h
    mon-node-exporter-backend-providers   False   mon-node-exporter-backend-providers-cert   20h

    Secrets sind aufgrund von `SecretForwarder` weiterhin vorhanden:

    $ kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig get secret -n mon-system | grep -E "node-exporter.+cert"
    mon-node-exporter-backend-consumers-cert                                            kubernetes.io/tls                          3      20h
    mon-node-exporter-backend-providers-cert                                            kubernetes.io/tls                          3      20h

    Workaround:

    Pausieren Sie Lifecycle Manager, damit keine Zertifikate neu erstellt und keine Zertifikate gelöscht werden:

    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n user-vm-1-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n user-vm-2-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig delete certificate -n mon-system mon-node-exporter-backend-consumers mon-node-exporter-backend-providers

    Hinweis: node-exporter wird in Nutzerclustern nicht abgeglichen.

    Monitoring 1.12.0
    1.12.1
    1.12.2

    Wenn Sie den ServiceNow-Webhook konfigurieren, führt das dazu, dass LCM die Änderungen an den Objekten ConfigMap und Secret im Namespace mon-system noch einmal abgleicht und zurücksetzt.

    Symptome:

    Wenn Sie den ServiceNow-Webhook konfigurieren, führt das dazu, dass Lifecycle Management (LCM) die Änderungen am ConfigMap-Objekt mon-alertmanager-servicenow-webhook-backend und am Secret-Objekt mon-alertmanager-servicenow-webhook-backend im Namespace mon-system noch einmal abgleicht und zurücksetzt.

    Workaround:

    Pausieren Sie die LCM-Unterkomponente, damit die Änderungen nicht rückgängig gemacht werden:

    1. Rufen Sie die Pfade zu den kubeconfig-Dateien der Administratorcluster des Stamm- und Organisationsadministrators ab. Speichern Sie die Pfade in den Umgebungsvariablen ROOT_ADMIN_KUBECONFIG und ORG_ADMIN_KUBECONFIG.
    2. Pausieren Sie die LCM-Unterkomponente in einem der folgenden Cluster:
      • Pausieren Sie die LCM-Unterkomponente im Stamm-Administratorcluster:
        kubectl --kubeconfig $ROOT_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n root lcm.private.gdc.goog/paused="true"
      • Pausieren Sie die LCM-Unterkomponente im Administratorcluster der Organisation:
        kubectl --kubeconfig $ORG_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    Monitoring 1.12.0

    Messwerte aus den Nutzerclustern werden nicht erhoben.

    Symptome:

    Einige Messwerte aus den Nutzerclustern werden nicht erhoben. Dieses Problem betrifft die Nutzer-VM-Cluster, nicht den Systemcluster.

    • Sie können die folgenden Logs vom Prometheus-Server abrufen:
      prometheus-server ts=2024-02-21T16:07:42.300Z caller=dedupe.go:112 component=remote level=warn remote_name=cortex-remote-write url=http://cortex-tenant.mon-system.svc:9009/push msg="Failed to send batch, retrying" err="server returned HTTP status 500 Internal Server Error: 2 errors occurred:"
    • Im Cortex-Mandanten sind die folgenden Logs verfügbar:
      cortex-tenant time="2024-02-23T18:03:44Z" level=error msg="proc: src=127.0.0.6:55021 lookup cortex.mon-system.svc on 172.25.38.10:53: no such host"

    Workaround:

    So können Sie das Problem beheben:

    1. Rufen Sie den Pfad zur kubeconfig-Datei des Clusters ab. Speichern Sie den Pfad in der Umgebungsvariable KUBECONFIG.
    2. Stellen Sie einen Stubs-Dienst in den Nutzer-VM-Clustern bereit:
            kubectl --kubeconfig $KUBECONFIG apply -f - &lt&ltEOF
            apiVersion: v1
            kind: Service
            metadata:
              labels:
                app: cortex
              name: cortex
            spec:
              ports:
              - protocol: TCP
                targetPort: 9009
                port: 9009
                name: cortex
              type: ClusterIP
              sessionAffinity: ClientIP
            EOF
            
    3. Starten Sie das Cortex-Mandanten-Deployment neu:
      kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n mon-system cortex-tenant
    Monitoring 1.12.0

    Primärer Prometheus sendet Messwerte an den Cortex-Mandanten über Clustergrenzen hinweg

    Symptome:

    Messwerte, die für die Grafana-Instanz des Infrastrukturbetreibers vorgesehen sind, können sich in der Grafana-Instanz des Plattformadministrators befinden und umgekehrt. Das Problem wird durch ASM-Load-Balancing-Anfragen über Clustergrenzen hinweg verursacht, die unterschiedliche Standardmandanten haben.

    Workaround:

    Für den Workaround ist Zugriff auf die private-cloud-Quelle und die Möglichkeit erforderlich, ein Komponentenupdate bereitzustellen. Sie müssen die Mesh-Konfiguration ändern, um den cortex-tenant-Dienst so einzuschränken, dass er nur Traffic vom lokalen Cluster empfängt, und die ASM-Komponente bereitstellen.

    1. Öffnen Sie die Datei manifests/plain/asm/1.19/asm-primary-cluster-operator.yaml.
    2. Stellen Sie das Feld serviceSettings im Feld meshConfig vor.

      Das Feld meshConfig sieht ursprünglich so aus:

              ...
              profile: minimal
                revision: 1-19
                meshConfig:
                  localityLbSetting:
                      enabled: false
              ...
            

      Daher müssen Sie das Feld meshConfig so ändern, dass es wie im folgenden Beispiel aussieht:

              profile: minimal
                revision: 1-19
                meshConfig:
                  serviceSettings:
                    - settings:
                        clusterLocal: true
                      hosts:
                      - 'cortex-tenant.mon-system.svc.cluster.local'
                  localityLbSetting:
                      enabled: false
            
    3. Stellen Sie die ASM-Komponente im Cluster bereit.
    Upgrade 1.12.0

    Knotenupgrade für NodeOSInPlaceUpgradeCompleted schlägt fehl

    Symptome:

    Beim Upgrade von 1.11.0 auf 1.11.3 schlägt das Knotenupgrade für NodeOSInPlaceUpgradeCompleted fehl.

    ka logs -n gpc-system os-policy-preflight-os-upgrade-bm-86efcc8en8sh2-6h5cn | grep GDCH-OS-ANSIBLE-CHECK -A 50
    [GDCH-OS-ANSIBLE-CHECK]
    {
      "syntax": {
        "success": true,
        "msg": ""
      },
      "apply": {
        "reachablity": {
          "success": true,
          "msg": ""
        },
        "execution": {
          "success": false,
          "msg": "errors found when simluating play execution on host: 10.3.20.9",
          "tasks": [
            {
              "task": "os/upgrade : Copy GRUB file to BOOT location",
              "error": "Source /boot/efi/EFI/ubuntu/grubx64.efi not found"
            }
          ]
        }
      },
      "diff": null
    } 

    Workaround:

    Melden Sie sich auf der Bare-Metal-Maschine an, die aktualisiert wird. Prüfen Sie, ob fstab /boot/efi enthält und das Verzeichnis eingebunden ist:

    # cat /etc/fstab
           LABEL=cloudimg-rootfs   /        ext4   defaults        0 1
           LABEL=UEFI      /boot/efi       vfat    umask=0077      0 1
    lsblk
    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda       8:0    0  3.5T  0 disk
    ├─sda1    8:1    0  3.5T  0 part /
    ├─sda2    8:2    0 64.3M  0 part
    ├─sda14   8:14   0    4M  0 part
    └─sda15   8:15   0  106M  0 part 

    Pausiere nodeupgradetask

    1. Führen Sie mount -a aus und prüfen Sie, ob das Verzeichnis eingebunden ist:
      # mount -a
      root@mb-aa-bm04:~# ls /boot/efi/
      EFI
    2. Fahren Sie hier mit den Prüfungen fort. Führen Sie folgende Befehle aus:
      C
      # Ensure all three cmds prints `Files are identical`
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/shimx64.efi | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/BOOT/BOOTX64.EFI | awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
      
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/grubx64.efi | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/BOOT/grubx64.efi| awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
      
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/grub.cfg | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/ubuntu/grub.cfg | awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
    3. Wenn nicht alle Dateien identisch sind, führen Sie diesen Befehl auf dem Computer aus und wiederholen Sie die Prüfungen.
      /usr/local/update-efi-files.sh
    4. Pausierung von nodeupgradetask aufheben
    Upgrade 1.12.0

    Switch-Upgrade kann den Befehl install add bootflash://.. nicht ausführen

    Symptome:

    Beim Switch-Upgrade kann „bootflash“ nicht hinzugefügt werden:

    Conditions:
      Last Transition Time:  2024-01-10T20:06:30Z
      Message:               exception: add and activate package nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm: nx-api RPC request failed
      with status code 400 and body "{\n\t\"jsonrpc\":\t\"2.0\",\n\t\"error\":\t{\n\t\t\"code\":\t-32602,\n\t\t\"message\":\t\"Invalid params\",\n\t\
      t\"data\":\t{\n\t\t\t\"msg\":\t\"Adding the patch (/nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm)\\n\\n[###                 ]  10%\\n[#│ #                 []  10%\\n[#####               ]  20%\\n[#######             ]  30%\\n[#########           ]  40%\\n[#########           ]  4
      0%\\n[####################] 100%\\n[####################] 100%\\nInstall operation 21 failed because this patch already exists. at Wed Jan 10 2
      1:00:06 2024\\n\\n\"\n\t\t}\n\t},\n\t\"id\":\t1\n}" for requests "install add bootflash:///nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
      activate forced"   

    Workaround:

    Melden Sie sich am Switch an, der nicht funktioniert, und führen Sie den Befehl „install activate“ für das Paket aus:

    install activate nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
    Upgrade 1.12.1, 1.12.2, 1.12.4

    Beim Upgrade von 1.11.x auf 1.12.1 bleibt das Knotenupgrade mit dem Fehler MaintenanceModeHealthCheckReady undrain hängen.

    Symptome:

    Das Clusterupgrade hängt seit über einer Stunde. Der Status und die Spezifikation des Wartungsmodus der Bare-Metal-Maschine stimmen nicht überein. Beispielsweise mit dem Befehl:

    kubectl get baremetalmachines -A  -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,MaintenanceMode:.spec.maintenanceMode,Status:.status.underMaintenance

    Shows:

    root        10.252.135.4   false             true

    Beim Preflight-Prüfungsjob für die Bare-Metal-Maschine wird die folgende Fehlermeldung angezeigt:

    The error was: 'dict object' has no attribute 'stdout'\n\nThe error appears to be in '/playbook/roles/machine_check_common/tasks/main.yaml': line 215, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Check if bypass the time check in node agent mode\n  ^ here\n"}

    Workaround:

    Verwenden Sie den folgenden Befehl:

    export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
       kubectl get cluster -A
    kubectl annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE} "baremetal.cluster.gke.io/bypass-check=ntp"
    Betriebssystem des Knotens 1.11.3

    VM-Knoten bleibt nach dem manuellen Workaround für den os-policy-Pod beim Neustart hängen

    Symptome:

    Eine VM-Neustartaufgabe schlägt nach der manuellen Problemumgehung für den os-policy-Pod fehl. Die folgende Meldung wird angezeigt:

    ko logs os-policy-preflight-os-reboot-vm-b1fb94147x8r9-nqmvp -n gpc-system
    
    playbook: server-reboot.yaml
    {
        "custom_stats": {},
        "global_custom_stats": {},
        "plays": [
            {
                "play": {
                    "duration": {
                        "end": "2024-01-12T03:50:52.749714Z",
                        "start": "2024-01-12T03:50:42.694226Z"
                    },
                    "id": "5251f140-5a01-5cce-6150-000000000006",
                    "name": "Run OS Upgrade Tasks"
                },
                "tasks": [
                    {
                        "hosts": {
                            "172.20.128.10": {
                                "action": "setup",
                                "changed": false,
                                "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out",
                                "unreachable": true
                            }
                        },
                        "task": {
                            "duration": {
                                "end": "2024-01-12T03:50:52.749714Z",
                                "start": "2024-01-12T03:50:42.704562Z"
                            },
                            "id": "5251f140-5a01-5cce-6150-00000000000b",
                            "name": "os/reboot : Gather OS distribution information"
                        }
                    }
                ]
            }
        ],
        "stats": {
            "172.20.128.10": {
                "changed": 0,
                "failures": 0,
                "ignored": 0,
                "ok": 0,
                "rescued": 0,
                "skipped": 0,
                "unreachable": 1
            }
        }
    }
    [GDCH-OS-ANSIBLE-CHECK]
    {
      "syntax": {
        "success": true,
        "msg": ""
      },
      "apply": {
        "reachablity": {
          "success": false,
          "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out"
        },
        "execution": {
          "success": false,
          "msg": "",
          "tasks": null
        }
      },
      "diff": null
    }
    [GDCH-OS-ANSIBLE-CHECK]
    Error: reachability err: Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out

    Workaround:

    Durch das Beenden und Starten der VM wird das Problem behoben. Folgen Sie der Anleitung unter VM starten und beenden.

    Obere Vernetzung 1.12.0

    Ein Nutzer-VM-Cluster bleibt mit der Warnung FailedCreatePodSandBox im Status ContainerCreating hängen

    Symptome:

    Ein Nutzer-VM-Cluster bleibt hängen. Wenn Sie den Pod mit dem Status ContainerCreating beschreiben, wird die folgende Warnung angezeigt:

    # kubectl --kubeconfig path/to/usercluster_kubeconfig describe pods/bm-system-machine-preflight-check-172.204c807f67d2cab60d5d8q58q -n user-vm-1-cluster
    Events:
      Type     Reason                  Age                  From     Message
      ----     ------                  ----                 ----     -------
      Warning  FailedCreatePodSandBox  108s (x62 over 79m)  kubelet  (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "ec4d2021ae9d76adf49a6d3c88d678b3b5d9
    50990daa6ffee3fcfeed8291dfa8": plugin type="cilium-cni" name="cilium" failed (add): Unable to create endpoint: [PUT /endpoint/{id}][429] putEndpointIdTooManyRequests 

    Workaround:

    Folgen Sie der Anleitung im NET-P0001-Runbook, um anetd im Systemcluster neu zu starten.

    System-Artifact-Registry 1.12.1

    Harbor stürzt nach einem ABM-Upgrade immer wieder ab

    Symptome:

    Beim Upgrade einer Stammorganisation von Version 1.11.1 auf Version 1.12.1 kann ein Upgrade in der Add-on-Phase mit Helm-Pull-Fehlern fehlschlagen:

    harbor-system                   harbor-harbor-harbor-core-657d86bcf8-zl8d2                        1/1     Running             0                 14h
    harbor-system                   harbor-harbor-harbor-core-7d66b4c7c-7g6t4                         0/1     CrashLoopBackOff    155 (76s ago)     12h

    Workaround:

    Senden Sie eine Supportanfrage. Weitere Informationen finden Sie unter Support anfordern.

    Upgrade 1.12.0

    Mehrere Pods in einem Systemcluster bleiben möglicherweise im Status TaintToleration hängen

    Symptome:

    Während eines Upgrades wird die OPA Gatekeeper-Unterkomponente nicht im Systemcluster installiert. Es werden jedoch Einschränkungen und Webhooks zur Durchsetzung dieser Einschränkungen installiert.

    Mehrere Pods in einem Systemcluster bleiben möglicherweise im Status TaintToleration hängen:

    mon-system                              mon-cortex-pre-upgrade-job-mn29x                              0/1     TaintToleration     0                96m    <none>          zb-aa-bm07    <none>           <none>
    mon-system                              mon-kube-state-metrics-backend-d49b868dc-fmp62                0/2     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    mon-system                              primary-prometheus-shard1-replica0-0                          0/3     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    netapp-trident                          netapp-trident-controller-7ffb4c5f89-rvwjj                    0/5     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              alertmanager-0                                                0/2     TaintToleration     0                98m    <none>          zb-aa-bm07    <none>           <none>
    obs-system                              audit-logs-loki-io-0                                          0/3     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    obs-system                              log-audit-backend-failure-detector-6lgsq                      0/1     TaintToleration     0                105m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              meta-alertmanager-0                                           0/1     TaintToleration     0                102m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              meta-alertmanager-servicenow-webhook-5679f48895-ggkg6         0/2     TaintToleration     0                102m   <none>          zb-aa-bm07    <none>           <none>
    platform-obs-obs-system                 grafana-proxy-server-7b6b79f787-2x92t                         0/2     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    vm-system                               gdch-rocky-yum-repo-distributor-zfwp6                         0/1     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    vm-system                               gdch-rocky-yum-repo-server-568768c97b-c9hm2                   0/2     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    Istio 1.12.1

    Pods im Status ImagePullBackOff mit dem Ereignis Back-off pulling image "auto"

    Symptome:

    Der Pod mit dem Containernamen istio-proxy ist nicht bereit und hat den Status ImagePullBackOff mit dem Ereignis Back-off pulling image "auto".

    Workaround:

    1. Prüfen Sie, ob der mutierende Webhook istio-revision-tag-default im Cluster vorhanden ist. Wenn nicht, warten Sie etwa 10 Minuten, um zu sehen, ob sich das System automatisch wiederherstellt. Wenn nicht, eskaliere das Problem.
    2. Wenn der mutierende Webhook vorhanden ist, löschen Sie den problematischen Pod und prüfen Sie, ob er wieder hochgefahren wird. .spec.containers[].image darf nicht auto sein, sondern muss wie ein echtes Bild aussehen, z. B. gcr.io/gke-release/asm/proxyv2:<image version>.
    Logging 1.12.1

    Die von der Log-Komponente bereitgestellten ValidatingWebhookConfigurations, MutatingWebhookConfigurations und MonitoringRules können möglicherweise nicht aktualisiert werden

    Symptome:

    Beim Upgrade von 1.11.1 auf 1.12.1 kann es sein, dass die von der Log-Komponente bereitgestellten ValidatingWebhookConfigurations, MutatingWebhookConfigurations und MonitoringRules nicht aktualisiert werden.

    Workaround:

    1. Sie benötigen kubectl und Zugriff auf das Runbook IAM-R0004, um die KUBECONFIG für den Root-Administratorcluster abzurufen.

    2. Löschen Sie ValidatingWebhookConfiguration root-admin-private-logging-validation-webhook aus dem Administrator-Root-Cluster:

      kubectl delete validatingwebhookconfiguration root-admin-private-logging-validation-webhook
    3. Löschen Sie MutatingWebhookConfiguration root-admin-private-logging-defaulter-webhook aus dem Administrator-Root-Cluster:

      kubectl delete mutatingwebhookconfiguration root-admin-private-logging-defaulter-webhook
    4. Löschen Sie ValidatingWebhookConfiguration root-admin-logging-webhook aus dem Administrator-Root-Cluster:

      kubectl delete validatingwebhookconfiguration root-admin-logging-webhook
    5. Löschen Sie MonitoringRule operational-logs-alerts aus dem Namespace infra-obs im Administratorcluster des Stamms:

      kubectl delete monitoringrule operational-logs-alerts -n infra-obs
    6. Löschen Sie MonitoringRules audit-logs-alerts, audit-logs-sli-syslog-prober, audit-logs-sli-filelog-prober, audit-logs-sli-fluentbit-to-loki, audit-logs-sli-fluentbit-to-splunk, audit-logs-sli-fluentbit-backlog, audit-logs-sli-loki-ingester-failed-rate, audit-logs-sli-loki-io-up und audit-logs-sli-loki-pa-up aus infra-obs namespace im Administratorcluster des Stammverzeichnisses:

      kubectl delete monitoringrule audit-logs-alerts audit-logs-sli-syslog-prober audit-logs-sli-filelog-prober audit-logs-sli-fluentbit-to-loki audit-logs-sli-fluentbit-to-splunk audit-logs-sli-fluentbit-backlog audit-logs-sli-loki-ingester-failed-rate audit-logs-sli-loki-io-up audit-logs-sli-loki-pa-up -n infra-obs
    7. Prüfen Sie, ob die Unterkomponente log-admin im Administrator-Root-Cluster bereit ist:

      export RECONCILING="`kubectl get subcomponent log-audit -n root -o json | jq '.status.conditions | .[] | select(.type == "Reconciling") | .status'`" ; if [[ $RECONCILING =~ "False" ]]; then echo "log-audit is ready"; else echo "log-audit is not ready"; fi

      Wenn der Vorgang erfolgreich ist, gibt der Befehl log-audit is ready aus. Andernfalls ist die Ausgabe log-audit is not ready.

    8. Prüfen Sie, ob die Unterkomponente log-admin im Administrator-Root-Cluster bereit ist:

      export RECONCILING="`kubectl get subcomponent log-operational -n root -o json | jq '.status.conditions | .[] | select(.type == "Reconciling") | .status'`" ; if [[ $RECONCILING =~ "False" ]]; then echo "log-operational is ready"; else echo "log-operational is not ready"; fi

      Wenn der Vorgang erfolgreich ist, gibt der Befehl log-operational is ready aus. Andernfalls ist die Ausgabe log-operational is not ready.

    Logging 1.12.1

    Audit-Logs und Betriebslogs werden nicht erfasst

    Aufgrund eines Problems im log-infra-backend-preinstall-Job sind Audit-Logs und Betriebs-Logs vom Typ „Loki“ nicht installiert und es werden keine Logs erfasst.

    Symptome:

    Im Systemcluster kann ein CrashLoopBackoff auftreten:

    obs-system                      anthos-log-forwarder-5ghbm                                        2/3     CrashLoopBackOff              135 (3m52s ago)   15h
    Logging 1.12.1

    Der Pod cortex-ingester hat den Status OOMKilled.

    Symptome:

    Möglicherweise wird für den Pod im Namespace mon-system der Status OOMKilled angezeigt:

    NAMESPACE          NAME                           READY   STATUS      RESTARTS         AGE
    mon-system         cortex-ingester-0              1/2     OOMKilled   6 (3h5m ago)     11h
          

    Workaround:

    Erhöhen Sie den Arbeitsspeicher auf jedem Ingester, erhöhen Sie die Anzahl der Ingester oder beides. Dazu stellen Sie ein SubcomponentOverride im Administratorcluster der Organisation bereit, wie im folgenden Beispiel gezeigt:

    apiVersion: lcm.private.gdc.goog/v1
    kind: SubcomponentOverride
    metadata:
      name: mon-cortex-ingester-override
      namespace: org-1-system-cluster
    spec:
      backend:
        operableParameters:
          ingester:
            resourcesLimit:
              memory: "6Gi" # 6Gi is the default, increase to add more memory to each ingester
            replicas: 4     # 4 is the default, increase to create more ingester instances.
      subComponentRef: mon-cortex
          
    Upgrade 1.12.1

    Beim Upgrade von 1.11.x auf 1.12.1 kann es passieren, dass ein Clusterknoten aufgrund eines Fehlers bei der Systemdiagnose für registy_mirror nicht aus dem Wartungsmodus beendet wird.

    Symptome:

    Beim Upgrade von 1.11.x auf 1.12.1 schlägt das Knotenupgrade mit der folgenden Fehlermeldung fehl:

    {
        "lastTransitionTime": "2024-02-13T22:53:36Z",
        "message": "following checks failed, ['check_registry_mirror_reachability_pass']",
        "observedGeneration": 3,
        "reason": "JobStatus",
        "status": "False", <----
        "type": "MaintenanceModeHealthCheckReady"
      },
      

    Workaround:

    Verwenden Sie den folgenden Befehl:

    kubectl --kubeconfig=${ROOT_OR_ORG_ADMIN_KUBECONFIG} annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE}  "baremetal.cluster.gke.io/maintenance-mode-ignore-healthcheck=true"
    Upgrade 1.12.1, 1.12.2, 1.12.4

    Das Upgrade der Organisation hängt in den Phasen anthosBareMetal, addOn oder node fest und die Prüfung check_registry_mirror_reachability_pass ist fehlgeschlagen.

    Symptome:

    1. „OrganizationUpgrade“ bleibt in den Phasen anthosBareMetal, addOn oder node hängen und zeigt den Status Unknown für die Bedingung Succeeded an.

    kubectl --kubeconfig=${ROOT_ADMIN_KUBECONFIG} get organizationupgrade -n gpc-system ${ORG_NAME} -o yaml
        addOn: {}
        anthosBareMetal:
          conditions:
          - lastTransitionTime: "2024-09-12T12:10:55Z"
            message: 'UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn''t
              after 39h18m50.606521473s, last message was: Cluster upgrade for root-admin
              cluster: in-progress'
            observedGeneration: 1
            reason: ABMUpgradeTimeout
            status: Unknown
            type: Succeeded
          startTime: "2024-09-12T12:10:55Z"
        node:{}
      
    2. Der Status der Bare-Metal-Maschine zeigt einen check_registry_mirror_reachability_pass-Prüfungsfehler an.
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get baremetalmachines -A -o json | jq '.items[] | select(.status.underMaintenace != .spec.maintenanceMode) | .metadata.name as $name | .status.underMaintenace as $statm | .spec.maintenanceMode as $specm | .status.conditions[] | select(.status == "False") | select(.type == "MaintenaceModeHealthCheckReady")'
        {
          "lastTransitionTime": "2024-02-13T19:17:27Z",
          "message": "following checks failed, ['check_registry_mirror_reachability_pass']",
          "observedGeneration": 3,
          "reason": "JobStatus",
          "status": "False",
          "type": "MaintenaceModeHealthCheckReady" 
        },

    Workaround:

    Verwenden Sie den folgenden Befehl:

    export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    kubectl get cluster -A
    kubectl annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE}  "baremetal.cluster.gke.io/maintenance-mode-ignore-healthcheck=true"
    Upgrade 1.12.1, 1.12.2, 1.12.4

    OrganizationUpgrade bleibt in den Phasen anthosBareMetal, addOn oder node hängen und es wird ein Systemdiagnosefehler netutil. gefunden.

    Symptome:

    1. „OrganizationUpgrade“ bleibt in den Phasen anthosBareMetal, addOn oder node hängen und zeigt den Status Unknown für die Bedingung Succeeded an.

    kubectl --kubeconfig=${ROOT_ADMIN_KUBECONFIG} get organizationupgrade -n gpc-system ${ORG_NAME} -o yaml
        addOn: {}
        anthosBareMetal:
          conditions:
          - lastTransitionTime: "2024-09-12T12:10:55Z"
            message: 'UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn''t
              after 39h18m50.606521473s, last message was: Cluster upgrade for root-admin
              cluster: in-progress'
            observedGeneration: 1
            reason: ABMUpgradeTimeout
            status: Unknown
            type: Succeeded
          startTime: "2024-09-12T12:10:55Z"
        node:{}
      
    2. Health Checks zeigen den Fehler „netutil“ an.
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get healthchecks -n kube-system -o json | jq '.items[].status | select(.lastHealthcheck.lastStatus == "Error")'
    {
      "lastHealthcheck": {
        "error": {
          "code": "500",
          "reason":  "[Errno 2] No such file or directory: /usr/local/bin/abm-tools10.5.23.4/netutil"
        },
        "lastCompletedTime": "2024-09-14T05:11:39Z",
        "lastStatus": "Error",
        "monitoredComponentVersion": "1.28.900-gke.112",
        "version": "1.28.900-gke.112"
      },
      "lastScheduledTime": "2024-09-14T05:26:00Z"
      }

    Workaround:

    Löschen Sie den Kubernetes-Job, der dem fehlgeschlagenen HealthCheck entspricht.

    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get job -A -l Command=machine-health-check --field-selector status.successful=0
    NAMESPACE   NAME                                    COMPLETIONS   DURATION   AGE
    root        bm-system-10.200.0.2-machine-28771464   0/1           67m        67m
    root        bm-system-10.200.0.2-machine-28771524   0/1           7m33s      7m33s
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} delete job -A -l Command=machine-health-check --field-selector status.successful=0
    job.batch "bm-system-10.200.0.2-machine-28771464" deleted
    job.batch "bm-system-10.200.0.2-machine-28771524" deleted
    VM Manager 1.12.1

    Beim Upgrade von 1.11.x auf 1.12.x ist eine VM möglicherweise aufgrund zu vieler Pods nicht bereit

    Symptome:

    Beim Upgrade von 1.11.x auf 1.12.x ist eine VM möglicherweise nicht bereit, weil zu viele Pods vorhanden sind. Dadurch wird das Leeren eines Bare-Metal-Knotens blockiert.

    Workaround:

    Starten Sie die VM neu.

    Physische Server 1.12.1

    NodeUpgrade enthält mehrere Versionen für dasselbe Hardwaremodell, wodurch die Überprüfung des Firmware-Upgrades blockiert wird.

    Symptome:

    Beim Upgrade von 1.11.x auf 1.12.1 enthält NodeUpgrade mehrere Versionen für dasselbe Hardwaremodell, wodurch die Überprüfung des Firmware-Upgrades blockiert wird.

    Workaround:

    Gehen Sie so vor, um die NodeUpgrade-Kundenrichtlinie spec zu ändern:

    1. Wenn das Upgrade für HPE Gen10-Server (GDC-4D) vorgesehen ist, entfernen Sie die ilo6-Modell-Firmware. Andernfalls entfernen Sie die Firmware des Modells ilo5.
    2. Abschnitt zum Beibehalten des Eintrags mit dem neuesten redfishVersion für jede Beschreibung.
      Wenn beispielsweise die beiden folgenden Einträge vorhanden sind, behalten Sie nur den mit 2.98 Oct 10 2023 bei:
      - description: SystemBMC
              model: ilo5
              redfishVersion: 2.98 Oct 10 2023
            - description: SystemBMC
              model: ilo5
              redfishVersion: 2.95 Jul 19 2023
    Physische Server 1.12.1

    Server bleiben im Bereitstellungsstatus

    Symptome:

    Ironic hat ein Zeitlimit erreicht, während auf das Einschalten eines Servers gewartet wurde. Der Status ändert sich von cleaning zu clean failed zu available:

    2024-02-23 18:53:00.659 1 DEBUG ironic.api.method [req-3a22ed15-d5cd-4d77-bb0b-0e7a3042e793 - - - - -] Client-side error: Node facc133f-898c-46d4-974b-92e3560892d5 is locked by host 10.128.120.2, please retry after the current operation is completed. format_exception /usr/lib/python3.6/site-packages/ironic/api/method.py:124

    So prüfen Sie, ob der Schalter aktiviert ist:

    curl -kqs -u ${ILO_USER}:${ILO_PASS} https://${ILO_IP}/redfish/v1/Systems/1 | jq '.PowerState'

    Wenn der Schalter aktiviert ist, wird "On" zurückgegeben.

    Workaround:

    Entfernen Sie den image-Block von den problematischen Servern und warten Sie, bis die Server wieder den Status „Verfügbar“ haben. Fügen Sie den image-Block wieder hinzu, sobald er verfügbar ist.

    Physische Server 1.12.2

    Server-Bootstrap schlägt fehl

    Symptome:

    Möglicherweise wird eine Debugging-Meldung wie die folgende angezeigt:

    [DEBUG] GET https://172.22.240.103/redfish/v1/
                2024/03/22 21:46:46 [DEBUG] GET https://172.22.240.111/redfish/v1/Systems/1/
                panic: runtime error: invalid memory address or nil pointer dereference

    Dieses Problem tritt auf, wenn iLO-Fehler ignoriert und die HTTP-Antwort gelesen wird, anstatt sie sofort zurückzugeben. Dies führt zu einer Dereferenzierung eines Nullzeigers.

    System-Artifact-Registry 1.12.1

    Beim Upgrade von 1.11.x auf 1.12.1 kann der Harbor-Clusterstatus unhealthy sein.

    Symptome:

    Beim Upgrade von Version 1.11.1 auf 1.12.1 kann der Harbor-Clusterstatus mit dem folgenden Fehler zu unhealthy werden:

    root@abc-bootstrapper:/home/ubuntu# ka get harborclusters -A
    NAMESPACE       NAME     PUBLIC URL                    STATUS
    harbor-system   harbor   https://10.252.119.11:10443   unhealthy

    Schritte zur Diagnose:

    1. Prüfen Sie den Status von harborclusters:

      root@abc-bootstrapper:/home/ubuntu# ka get harborclusters -A
      NAMESPACE       NAME     PUBLIC URL                    STATUS
      harbor-system   harbor   https://10.252.119.11:10443   unhealthy
    2. Wenn der Status fehlerhaft ist, prüfen Sie den Status der Harbor-Komponenten:

      root@abc-bootstrapper:~# ka get pods -n harbor-system
      NAME                                               READY   STATUS    RESTARTS   AGE
      harbor-harbor-harbor-core-68d9764d8c-rgg4h         0/1     Running   0          3d2h
      harbor-harbor-harbor-exporter-54d559fdb8-nzjk7     1/1     Running   0          3d2h
      harbor-harbor-harbor-jobservice-6f5db4779-sqmlc    1/1     Running   0          3d2h
      harbor-harbor-harbor-portal-8458c847dc-z2l6n       1/1     Running   0          3d4h
      harbor-harbor-harbor-registry-7577f5d9d6-qp45c     3/3     Running   0          3d4h
      harbor-operator-harbor-operator-755b5cfc96-x2bxh   1/1     Running   0          3d4h
      harbor-operator-redisoperator-bf96ffc59-5d457      1/1     Running   0          3d4h
      harbor-operator-redisoperator-bf96ffc59-tbd8j      1/1     Running   0          3h38m
      harbor-operator-redisoperator-bf96ffc59-vlqfl      1/1     Running   0          3h38m
      pg-harbor-db-0                                     0/3     Pending   0          3h37m
      pg-harbor-db-monitor-776b946c74-c7pt9              0/1     Pending   0          3h38m
      rfr-harbor-redis-0                                 1/1     Running   0          3d4h
      rfr-harbor-redis-1                                 1/1     Running   0          3d4h
      rfr-harbor-redis-2                                 1/1     Running   0          3h37m
      rfs-harbor-redis-64d9d8df4f-fds79                  1/1     Running   0          3d4h
      rfs-harbor-redis-64d9d8df4f-p9l9h                  1/1     Running   0          3d3h
      rfs-harbor-redis-64d9d8df4f-x5x8c                  1/1     Running   0          3h38m
    3. Wenn harbor-core und pg-harbor-db nicht bereit sind, prüfen Sie den Status von harbor-db:

      root@abc-bootstrapper:~# ka get dbclusters.postgresql.dbadmin.gdc.goog harbor-db -n harbor-system
      NAME        PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
      harbor-db   172.20.0.146      InProgress     DBClusterReconciling
    4. Wenn sich harbor-db im InProgress-Modus befindet, prüfen Sie, ob sich ein root-admin-control-plane-Knoten im UNDERMAINTENANCE-Modus befindet.

      root@abc-bootstrapper:~# ka get nodepool -A
      NAMESPACE   NAME                            READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
      org-1       admin-control-plane-node-pool   0       0             0         0                  0
      root        root-admin-control-plane        3       0             0         1                  0

      Knoten sollten sich während eines Upgrades im Wartungsmodus befinden. Wenn ein Knoten gewartet wird, haben Sie möglicherweise nicht genügend Ressourcen, um harbor-db zu planen.

    Workaround:

    Gehen Sie so vor, um das Problem zu beheben:

    1. KUBECONFIG festlegen

      :
      export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    2. dbs-Controller herunterskalieren:

      kubectl scale --replicas=0 deployment -n dbs-fleet-system fleet-controller-manager
      kubectl scale --replicas=0 deployment -n dbs-postgres-system pg-controller-manager
    3. Legen Sie den Namen der Prioritätsklasse in der Pod-Vorlage auf system-cluster-critical oder system-node-critical fest:

      kubectl patch statefulset pg-harbor-db -n harbor-system --type='json' \
        -p='[{"op": "add", "path": "/spec/template/spec/priorityClassName", "value": "system-cluster-critical"}]'
    4. Starten Sie den pg-harbor-db-Pod neu:

      kubectl delete pods -n harbor-system pg-harbor-db-0
    5. Nachdem Sie überprüft haben, dass der Harbor-Cluster fehlerfrei ist, können Sie die Anzahl der DBS-Controller wieder erhöhen:

            kubectl scale --replicas=1 deployment -n dbs-fleet-system fleet-controller-manager
            kubectl scale --replicas=1 deployment -n dbs-postgres-system pg-controller-manager
    System-Artifact-Registry 1.12.2

    Job-Service-Pod nicht bereit

    Symptome:

    Der Job-Service-Pod hat Probleme, bereit zu sein:

    Events:
      Type     Reason     Age                       From     Message
      ----     ------     ----                      ----     -------
      Warning  Unhealthy  35m (x8153 over 3d16h)    kubelet  Readiness probe failed: Get "https://172.16.1.142:8443/api/v1/stats": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
      Warning  Unhealthy  10m (x60 over 13h)        kubelet  Readiness probe failed: Get "https://172.16.1.142:8443/api/v1/stats": context deadline exceeded
      Normal   Pulled     5m47s (x1733 over 3d16h)  kubelet  Container image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7" already present on machine
      Warning  BackOff    43s (x21352 over 3d16h)   kubelet  Back-off restarting failed container jobservice in pod harbor-harbor-harbor-jobservice-6f59fbf974-q9h9g_harbor-system(51ab9697-98b9-4315-9ab9-f67b19a28d0a)

    Workaround:

    1. Starten Sie den Jobdienst-Pod neu.
      kubectl delete pod POD_NAME -n NAMESPACE

      Sie erhalten folgende Ausgabe:

      Events:
        Type    Reason     Age    From               Message
        ----    ------     ----   ----               -------
        Normal  Scheduled  2m20s  default-scheduler  Successfully assigned harbor-system/harbor-harbor-harbor-jobservice-6f59fbf974-p872s to zx-ab-bm02
        Normal  Pulling    2m15s  kubelet            Pulling image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7"
        Normal  Pulled     2m12s  kubelet            Successfully pulled image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7" in 3.25s (3.25s including waiting)
        Normal  Created    2m12s  kubelet            Created container jobservice
        Normal  Started    2m12s  kubelet            Started container jobservice
    2. Rufen Sie auf dem Bootstrapper den Organisationsstatus ab:
      kubectl get org -A

      Die Ausgabe könnte so aussehen:

      NAMESPACE    NAME    CURRENT VERSION   DESIRED VERSION   READY
      gpc-system   org-1   1.12.1-gdch.402   1.12.1-gdch.402   True
      gpc-system   org-2   1.12.1-gdch.402   1.12.1-gdch.402   True
      gpc-system   root    1.12.1-gdch.402   1.12.1-gdch.402   True
    Monitoring 1.12.1

    Beim Upgrade von 1.11.x auf 1.12.1 schlägt das Löschen des Cortex-Buckets möglicherweise fehl

    Symptome:

    Beim Upgrade von 1.11.1 auf 1.12.1 kann das Löschen des Cortex-Buckets mit dem folgenden Fehler fehlschlagen:

            upgrade_post_root_org_validation.go:74: unable to create cortex client to check metrics creating Cortex client failed: can't make a metrics API because of an error getting the Cortex pod: unable to find any matching cortex pods using list options / label selector: {TypeMeta:{Kind: APIVersion:} LabelSelector:app=cortex FieldSelector: Watch:false AllowWatchBookmarks:false ResourceVersion: ResourceVersionMatch: TimeoutSeconds: Limit:0 Continue: SendInitialEvents:}
            upgrade_post_root_org_validation.go:117: Bucket(s) not ready: 3 errors occurred:
                    * Bucket "obs-system/cortex-metrics-alertmanager" not ready
                    * Bucket "obs-system/cortex-metrics-blocks" not ready
                    * Bucket "obs-system/cortex-metrics-ruler" not ready

    Workaround:

    Führen Sie die folgenden Schritte aus, um buckets zu löschen:

    1. Führen Sie die Schritte in der MON-R0017-Toil-Aufgabe aus, um Zugriff auf die StorageGRID-Benutzeroberfläche zu erhalten.
    2. Rufen Sie die bucket in der Benutzeroberfläche auf.
    3. Klicken Sie auf die Schaltfläche Objekte im Bucket löschen, um die Daten zu löschen.
    Monitoring 1.12.0
    1.12.1
    1.12.2

    Die Speicherklasse für Messwerte ist in der Konfiguration falsch definiert.

    Symptome:

    Das Prometheus-Objekt StatefulSet ist falsch konfiguriert. Es verwendet die Speicherklasse standard anstelle von standard-rwo. Dieses Problem führt dazu, dass das StatefulSet-Objekt von Anthos Prometheus aus der Monitoring-Komponente nicht gestartet werden kann.

    Das Problem tritt auf, weil der ObservabilityPipeline-Abgleich nur bei der ersten Installation diesen Wert festlegt und der ObsProjectInfra-Abgleich benutzerdefinierte Clusterressourcen überwacht.

    Workaround:

    Starten Sie die Bereitstellung von fleet-admin-controller im Administratorcluster der Organisation neu, um das Problem zu beheben.

    Monitoring 1.12.2

    Mit der Unterkomponente mon-common wird keine Istio-Telemetrie bereitgestellt.

    Symptome:

    Die mon-common-Unterkomponente muss ein Istio-Telemetrieobjekt im Cluster des Organisationsadministrators bereitstellen, um zu verhindern, dass alle Anfragen für Cortex protokolliert werden. Die Manifestdatei ist jedoch nicht in der Build-Datei enthalten.

    Workaround:

    Führen Sie die folgenden Schritte aus, um das Istio-Telemetrieobjekt im Administratorcluster der Organisation bereitzustellen:

    1. Erstellen Sie eine YAML-Datei, in der die benutzerdefinierte Ressource (Custom Resource, CR) „Istio Telemetry“ im Namespace mon-system des Administratorclusters der Organisation definiert wird:

      # Disable access logging from workloads internal to GDCH.
      # Telemetry CR to disable Istio access logs from obs-system namespace.
      apiVersion: telemetry.istio.io/v1alpha1
      kind: Telemetry
      metadata:
        name: disable-audit-logging
        namespace: mon-system
      spec:
        accessLogging:
          - providers:
            - name: otel
            disabled: true
    2. Wenden Sie die Manifestdatei auf den Administratorcluster der Organisation im Namespace mon-system an:

      kubectl apply -f disable-audit-logging.yaml
    Monitoring 1.12.0
    1.12.1
    1.12.2

    Die mon-prober-backend-prometheus-config-ConfigMap wird zurückgesetzt.

    Symptome:

    • Die Benachrichtigung MON-A0001 wird ausgelöst.
    • Die mon-prober-backend-prometheus-config-ConfigMap wird zurückgesetzt und enthält keine Probe-Jobs mehr, z. B.:
            apiVersion: v1
            data:
              prometheus.yaml: |
                remote_write:
                - url: http://cortex-tenant.mon-system.svc:9009/push
                  name: cortex-tenant
            kind: ConfigMap
            metadata:
              creationTimestamp: "2024-06-26T14:55:07Z"
              name: mon-prober-backend-prometheus-config
              namespace: mon-system
              resourceVersion: "6606787"
              uid: 1a495af0-1fdc-40b8-845b-4976e3b0f899
            

    Workaround:

    So können Sie das Problem beheben:

    1. Legen Sie die folgenden Umgebungsvariablen fest:
      • KUBECONFIG: Der Pfad zur kubeconfig-Datei im Cluster.
      • TARGET_CLUSTER: Der Name des Clusters, in dem Sie das Problem beheben.
    2. Pausieren Sie die Unterkomponente mon-prober in allen Clustern:
            kubectl --kubeconfig $KUBECONFIG annotate subcomponent mon-prober -n $TARGET_CLUSTER lcm.private.gdc.goog/paused=true
            

      Beispiel:

            kubectl --kubeconfig ~/root-admin-kubeconfig annotate subcomponent mon-prober -n my-org lcm.private.gdc.goog/paused=true
            
    3. Starten Sie den MON-Administratorcontroller in jedem Administratorcluster neu:
            kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n obs-system mon-admin-backend-controller
            

      Die Prober-ConfigMap wird mit jeder registrierten Prüfung befüllt.

    4. Folge dem Runbook MON-R2009, um die MON-A0001-Benachrichtigung Blackbox monitoring metrics pipeline down stummzuschalten, da diese Benachrichtigung immer wieder ausgelöst wird.
    Knotenplattform 1.12.1

    Beim Upgrade von 1.11.x auf 1.12.x kann es passieren, dass ein Pod zum Herunterladen von Switch-Images im Status ErrImagePull hängen bleibt.

    Symptome:

    Beim Upgrade von 1.11.x auf 1.12.x kann es passieren, dass ein Pod zum Herunterladen von Switch-Images im Status ErrImagePull mit der folgenden Warnung hängen bleibt:

     Warning  Failed   145m (x4 over 169m)   kubelet  Failed to pull image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to pull and unpack image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to resolve reference "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to do request: Head "https://10.252.119.4:5000/v2/library/private-cloud-staging/switch-image-downloader/manifests/1.12.1-gdch.330?ns=gcr.io": dial tcp 10.252.119.4:5000: connect: no route to host
      Warning  Failed   45m (x262 over 25h)   kubelet  Failed to pull image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to pull and unpack image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to resolve reference "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": pulling from host 10.252.119.11:10443 failed with status code [manifests 1.12.1-gdch.330]: 401 Unauthorized
      Normal   Pulling  40m (x287 over 26h)   kubelet  Pulling image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330"
      Normal   BackOff  22s (x6504 over 25h)  kubelet  Back-off pulling image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330"

    Workaround:

    Um das Problem zu beheben, taggen Sie das Bild pnet-core-switch-image-downloader mit switch-image-downloader neu.

    Knotenplattform 1.12.1

    Beim Upgrade von 1.11.x auf 1.12.1 blockiert die Hostfirewall das Herunterladen des Switch-Images

    Symptome:

    Beim Upgrade von 1.11.x auf 1.12.1 blockiert die Hostfirewall das Herunterladen des Switch-Images aufgrund einer Abweichung der von der Hostfirewall verwendeten Schnittstellen.

    Workaround:

    Wenden Sie die folgende Problemumgehung vor dem Upgrade an, aber nur, wenn Sie ein Upgrade von 1.11.x auf 1.12.x durchführen.

    1. Aktualisieren Sie die Administratorcluster für den Stammadministrator und die Organisation.
      1. Rufen Sie den Namen und Namespace des Knotenpools für Bare-Metal-Knoten des Root-Administrators und Bare-Metal-Knoten des Organisationsadministrators ab. Verwenden Sie für den Root-Administratorcluster die Root-Administrator-kubeconfig. Mit dem folgenden Befehl wird eine Inventarliste der Maschinen erstellt und nach Bare-Metal-Maschinen gefiltert:
        kubectl --kubeconfig=KUBECONFIG  get inventorymachines -l cluster.private.gdc.goog/provisioner=baremetal-provisioner.cluster.private.gdc.goog -o json | jq -c -r '.items[].spec.nodePoolRef | [.name, .namespace] | @csv | sub("\"";"";"g")' | sort | uniq
        Die Ausgabe enthält den Namen und Namespace des Knotenpools:
        admin-control-plane-node-pool,org-1
        root-admin-control-plane,root

        Die Werte in der Ausgabe entsprechen Folgendem:

        • ORG_ADMIN_NODEPOOL_NAME: admin-control-plane-node-pool
        • ORG_ADMIN_NODEPOOL_NAMESPACE: org-1
        • ROOT_ADMIN_NODEPOOL_NAME: root-admin-control-plane
        • ROOT_ADMIN_NODEPOOL_NAMESPACE: root
      2. Erstellen Sie die folgenden Objekte im Root-Administrator- und Organisationsadministratorcluster, um eth0 auf den Knoten in mgmt0 umzubenennen:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${ORG_ADMIN_NODEPOOL_NAME}
            namespace: ${ORG_ADMIN_NODEPOOL_NAMESPACE}
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${ROOT_ADMIN_NODEPOOL_NAME}
            namespace: ${ROOT_ADMIN_NODEPOOL_NAMESPACE}
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
              
      3. Die Felder NODEPOOL_NAME und NODEPOOL_NAMESPACE werden mit der Liste aller Knotenpools im jeweiligen Cluster gefüllt, wenn die obige YAML-Datei bereitgestellt wird.

        Eine Beispiel-YAML-Datei für den Stammadministratorcluster mit den tatsächlichen Namen des Stammadministrator-Knotenpools und des Organisationsadministrator-Knotenpools könnte so aussehen:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: admin-control-plane-node-pool
            namespace: org-1
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: root-admin-control-plane
            namespace: root
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
      4. Wenden Sie die YAML-Datei auf den Administratorcluster der obersten Ebene an:
        kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    2. Aktualisieren Sie den Systemcluster:
      1. Rufen Sie eine Inventarliste der Maschinen ab und filtern Sie die Liste nach Bare Metal-Maschinen:
        kubectl --kubeconfig=_ORG_ADMIN_KUBECONFIG  get inventorymachines -l cluster.private.gdc.goog/provisioner=baremetal-provisioner.cluster.private.gdc.goog -o json | jq -c -r '.items[].spec.nodePoolRef | [.name, .namespace] | @csv | sub("\"";"";"g")' | sort | uniq
        Die Ausgabe sieht so aus:
        worker-node-pool-o1-highgpu1-48-gdc-metal,org-1-system-cluster

        Die Werte in der Ausgabe entsprechen Folgendem:

        • SYSTEM_CLUSTER_NODEPOOL_NAME: worker-node-pool-o1-highgpu1-48-gdc-metal
        • SYSTEM_CLUSTER_NODEPOOL_NAMESPACE: org-1-system-cluster
      2. Die Felder NODEPOOL_NAME und NODEPOOL_NAMESPACE werden aus der Liste der Ausgabe des vorherigen Befehls ausgefüllt.

      3. Erstellen Sie die folgenden Objekte im Systemcluster, um eth0 auf den Knoten in mgmt0 umzubenennen und die Betriebssystemrichtlinie zu aktualisieren:
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${SYSTEM_CLUSTER_NODEPOOL_NAME}
            namespace: ${SYSTEM_CLUSTER_NODEPOOL_NAMESPACE}
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename

        Eine Beispiel-YAML-Datei für den Systemcluster mit den tatsächlichen Knotenpoolnamen könnte so aussehen:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: worker-node-pool-o1-highgpu1-48-gdc-metal
            namespace: org-1-system-cluster
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
      4. Wenden Sie die YAML-Datei auf den Administratorcluster der Organisation an:
        kubectl --kubeconfig=ORG_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    Netzwerk mit geringerer Leistung 1.12.2

    Netzwerk-Switches, auf denen eine Version vor 9.3.10 vorinstalliert ist, können möglicherweise nicht gebootstrapped werden

    Symptome:

    Netzwerk-Switches, auf denen eine Version vor 9.3.10 vorinstalliert ist, können nicht gebootstrapped werden, da die erwartete Version des Switches 10.3(4a) ist.

    Workaround:

    Führen Sie ein manuelles Upgrade der Switch-Firmware von 9.3.5 auf 9.3.10 und dann von 9.3.10 auf 10.3.4a durch.

    Netzwerk mit geringerer Leistung 1.12.2

    Bei einigen Verbindungen zum Knoten org-admin tritt eine Zeitüberschreitung auf

    Symptome:

    Verbindungen werden am Switch getrennt, weil die Switches aufgrund abgelaufener Zertifikate auf dem Switch nicht die aktuelle Konfiguration haben.

    Workaround:

    1. Rotieren Sie die Zertifikate auf dem Switch.
    2. Aktivieren Sie die neuen Zertifikate:
      1. nxapi certificate httpskey keyfile bootflash:api-private-key.pem
      2. nxapi certificate httpscrt certfile bootflash:api-certificate.pem
      3. nxapi certificate enable
    Datei- und Blockspeicher 1.12.1
    1.12.2
    1.12.4

    Beim Upgrade von 1.11.1 auf 1.12.1, 1.12.2 oder 1.12.4 kann der Roll-out der Unterkomponente file-netapp-trident fehlschlagen

    Symptome:

    Die LUKS-Unterkomponente (Linux Unified Key Setup) wird während des Upgrades nicht neu bereitgestellt. So prüfen Sie die Unterkomponente file-netapp-trident:

    1. Aliasse festlegen:
      alias ka='kubectl --kubeconfig=/path/to/root-admin/root-admin-kubeconfig' 
      alias ko='kubectl --kubeconfig=/path/to/org-admin/org-admin-kubeconfig'
    2. Unterkomponente abrufen:
      ka get subcomponent -n root file-netapp-trident -o yaml
      ko get subcomponent -n root file-netapp-trident -o yaml

    Die Ausgabe könnte so aussehen:

    conditions:
      - lastTransitionTime: "2024-03-28T01:37:20Z"
        message: 'Reconciliation error: E0100 - deploy: failed to install chart: release
          file-netapp-trident-backend failed, and has been uninstalled due to atomic being
          set: cannot patch "standard-rwo" with kind StorageClass: StorageClass.storage.k8s.io
          "standard-rwo" is invalid: parameters: Forbidden: updates to parameters are
          forbidden. && cannot patch "standard-block" with kind StorageClass: StorageClass.storage.k8s.io
          "standard-block" is invalid: parameters: Forbidden: updates to parameters are
          forbidden.'
        observedGeneration: 1
        reason: ReconciliationError
        status: "True"
        type: Reconciling 

    In diesem Beispiel sind zwei Speicherklassen fehlgeschlagen: standard-rwo und standard-block.

    Workaround:

    1. Löschen Sie die StorageClasses, die vom Job nicht erstellt werden konnten, z. B. standard-rwo, standard-block, standard-rwo-non-luks und standard-block-non-luks.
    2. Lösen Sie die Neuerstellung von StorageClasses aus, indem Sie den oclcm-Backend-Controller für Ihren Cluster neu starten (Root-Administratorcontroller für Root- und Organisationsadministratorcluster, Organisationsadministratorcontroller für System- und Nutzercluster).
    3. Prüfen Sie bei Version 1.12.4, ob die installierten Storage-Klassen die Annotation disk.gdc.goog/luks-encrypted: auf „true“ gesetzt haben (mit Ausnahme der Storage-Klassen ohne LUKS). Wenn die Anmerkung nicht auf „true“ gesetzt ist, wiederholen Sie die Schritte 1 und 2.
    4. Starten Sie die Bereitstellung von netapp-trident und netapp-trident DaemonSet im Cluster neu.
    5. Prüfen Sie, ob das LUKS-Secret für Ihre PersistentVolumeClaim-Ressourcen (PVC) erstellt wurde. Jeder PVC muss ein Secret im Format g-luks-$pvc_name haben.
    6. Prüfen Sie, ob die Unterkomponente file-netapp-trident im Status einen Fehler aufweist.
    Objektspeicher 1.12.2

    Object-Storage-Buckets sind nach dem Upgrade der Stammorganisation möglicherweise nicht bereit

    Symptome:

    Nach dem Upgrade der Stammorganisation von 1.12.1 auf 1.12.x schlägt die Validierung nach dem Upgrade mit dem folgenden Fehler fehl:

    upgrade_post_root_org_validation.go:121: Bucket(s) not ready: 8 errors occurred:
                    * Bucket "atat-system/invoice-export-bucket" not ready
                    * Bucket "mon-system/cortex-metrics-alertmanager" not ready
                    * Bucket "mon-system/cortex-metrics-blocks" not ready
                    * Bucket "mon-system/cortex-metrics-ruler" not ready
                    * Bucket "obs-system/audit-logs-loki-io" not ready
                    * Bucket "obs-system/cortex-metrics-alertmanager" not ready
                    * Bucket "obs-system/cortex-metrics-blocks" not ready
                    * Bucket "obs-system/cortex-metrics-ruler" not ready
          

    Workaround:

    Fügen Sie den Finalizer manuell hinzu, bevor Sie mit dem Upgrade beginnen.

    Clusterverwaltung 1.12.1, 1.12.2

    Bei Nutzerclustern mit Kubernetes-Version 1.27.x können Knotenpools nicht initialisiert werden

    Symptome:

    Knotenpools in Nutzerclustern, die auf Kubernetes-Version 1.27.x ausgeführt werden, werden möglicherweise nicht initialisiert. Dadurch kann der Nutzercluster keine Containerarbeitslasten verarbeiten.

    Workaround:

    Erstellen Sie keinen Nutzercluster mit der Kubernetes-Version 1.27.x.

    Virtuelle Maschinen 1.12.0

    Bei der Bildübersetzung können keine Pakete abgerufen werden, wenn das Quellbild Standardeinstellungen hat

    Symptome:

    Der Import von VM-Images schlägt beim Übersetzen des Images fehl, wenn ein Ubuntu-Quell-Image Standard-APT-Quellen in sources.list enthält.

    Workaround:

    Achten Sie darauf, dass das Verzeichnis /var/lib/apt/lists/ im Quell-Image leer ist.

    Virtuelle Maschinen 1.12.2

    Die Importer-Pods schlagen fehl oder bleiben hängen.

    Symptome:

    Rufen Sie eine Liste der Importer-Pods ab:

    kubectl get pods -A | grep import 

    Die Ausgabe könnte so aussehen:

    user-vm-1-cluster               importer-vm-1b19e25c-disk-8dwzz                                   0/1     ContainerCreating      0                2d9h
    user-vm-1-cluster               importer-vm-72b96d39-disk-frv4f                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-1-cluster               importer-vm-c7a7a320-disk-qjgt2                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-06ca7e94-disk-b66fz                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-7e63b71b-disk-jxqfz                                   0/1     CreateContainerError   116 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-e0651556-disk-k8scf                                   0/1     CreateContainerError   123 (43h ago)    2d9h

    Im Log wird möglicherweise ein Ereignis wie das folgende angezeigt:

    Events:
      Type     Reason              Age                      From                     Message
      ----     ------              ----                     ----                     -------
      Warning  FailedAttachVolume  2m14s (x1630 over 2d9h)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405" : rpc error: code = Unknown desc = error publishing ontap-san driver: problem mapping LUN /vol/trident_pvc_2000efe0_b4a0_4856_899b_7e0c9fd33405/lun0: results: {http://www.netapp.com/filer/admin results}
    status,attr: failed
    reason,attr: No such LUN exists
    errno,attr: 9017
    lun-id-assigned: nil

    Workaround:

    1. Rufen Sie den Namen des PersistentVolumeClaim (PVC) aus der Fehlermeldung ab, z. B. pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405.
    2. Suchen Sie den PersistentVolume (PV) mit diesem Namen und notieren Sie sich den spec.csi.volumeAttributes.internalName für die spätere Verwendung.
    3. Stellen Sie mithilfe der Schritte im FILE-A0006-Runbook eine SSH-Verbindung zum Speichercluster her.
    4. Lassen Sie sich das Volume anzeigen und notieren Sie sich den Namen des virtuellen Servers, der vom Befehl zurückgegeben wird:
      volume show -volume INTERNAL_NAME
    5. Volume offline schalten:
      volume offline -volume INTERNAL_NAME -vserver VSERVER_NAME
    6. So löschen Sie das Volume:
      volume delete -volume INTERNAL_NAME -vserver VSERVER_NAME
    Virtuelle Maschinen 1.12.1
    1.12.2

    VMRuntime ist möglicherweise nicht bereit, weil die Installation von network-controller-manager fehlgeschlagen ist

    Symptome:

    VMRuntime im Zielcluster (kann Admin- oder Systemcluster sein) hat den Status „VMRuntime.ready = false“ und network-controller-manager im Namespace kube-system ist ausstehend.

    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} get vmruntime vmruntime
    
    apiVersion: virtualmachine.private.gdc.goog/v1
    kind: VMRuntime
    metadata:
      ...
    spec:
      ...
    status:
      ready: false
    
          
    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} describe deploy network-controller-manager -n kube-system
    
    ...
    Events:
      Type     Reason       Age                      From     Message
      ----     ------       ----                     ----     -------
      Warning  FailedMount  3m36s (x122 over 3h55m)  kubelet  MountVolume.SetUp failed for volume "cert" : secret "network-webhook-server-cert" not found
          

    Workaround:

    Wenn Sie die Bereitstellung network-controller-manager löschen, sollte sie automatisch mit den erforderlichen Zertifikaten durch den VMM-Operator neu erstellt werden. Die Bereitstellung sollte den Status Running erreichen und der VMRuntime-Status sollte sich anschließend in „ready=true“ ändern.

    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} delete deploy network-controller-manager -n kube-system
    Virtuelle Maschinen 1.12.2

    Lange Bereitstellungszeit für VM-Laufwerke

    Symptome:

    Die VM-Importer-Pods befinden sich in einer Absturzschleife und das Datenvolumen bleibt länger als 90 Minuten im Importstatus. Der Status der Pods könnte so aussehen:

    test-vm-project                           importer-disk-ops-test-vm-boot-disk-tbdtz                     0/1     CrashLoopBackOff   14 (47s ago)     90m     172.16.20.94    zb-aa-bm08    <none>           <none>
    test-vm-project                            importer-test-vm-1-boot-disk-plsxk         1/1     Running            1 (2m53s ago)    8m59s   172.16.22.244   zb-ab-bm09   <none>           <none>
    test-vm-project                            importer-test-vm-2-boot-disk-npjc8                          1/1     Running            6 (12m ago)      40m     172.16.22.180   zb-ab-bm09    <none>           <none>

    Alle Festplattenimporte werden innerhalb von drei Stunden abgeschlossen.

    Upgrade 1.12.2

    Beim Upgrade von 1.11.1 auf 1.12.2 kann die Unterkomponente unet-nodenetworkpolicy-infra nicht abgeglichen werden

    Symptome:

    Die Fehlermeldung könnte so aussehen:

         message: 'Reconciliation error: E0111 - upgrade chart: release unet-nodenetworkpolicy-infra-assets
          failed, and has been rolled back due to atomic being set: cannot patch "mgmt-network"
          with kind Network: admission webhook "vnetwork.networking.gke.io" denied the
          request: Network.networking.gke.io "mgmt-network" is invalid: Spec.NodeInterfaceMatcher:
          Forbidden: Field is immutable'
          observedGeneration: 2

    Workaround:

    1. Wenn der Fehler auf der Root-Ebene auftritt, ersetzen Sie in den folgenden Schritten KUBECONFIG durch die kubeconfig-Datei des Root-Administrators.
    2. Wenn der Fehler in der Organisation auftritt, ersetzen Sie in den folgenden Schritten KUBECONFIG durch die kubeconfig des Organisationsadministrators.
    3. Führen Sie den folgenden Befehl aus:
               alias k="kubectl --kubeconfig=KUBECONFIG"
               k get networks mgmt-network -o json | jq '.spec.nodeInterfaceMatcher.interfaceName'
    4. Wenn die Ausgabe eth0 ist, führen Sie Folgendes aus:
      k patch network mgmt-network -p '{"metadata":{"finalizers":null}}' --type=merge
    5. mgmt-network löschen.
      k delete network mgmt-network
    6. Prüfen Sie, ob der Status für unet-nodenetworkpolicy-infra einen Fehler enthält.

      Beispiel:

               alias k="kubectl kubeconfig=KUBECONFIG"
               k get subcomponent unet-nodenetworkpolicy-infra -n org-1

      Die Ausgabe sieht so aus:

               NAME                           AGE   STATUS
               unet-nodenetworkpolicy-infra   34d   ReconciliationCompleted

    Upgrades 1.12.2

    Systemcluster schlägt beim Upgrade von 1.11.x auf 1.12.2 fehl

    Symptome:

    Während oder nach dem Upgrade von 1.11.x auf 1.12.2 können Jobs mit dem Namen bm-system-add-ons-* mit dem folgenden Fehler fehlschlagen:

       E0326 17:04:22.997270       1 main.go:180] configdrift: Config drift health check failed
    
       F0326 17:04:22.997365       1 main.go:184] One or more checks failed.

    Workaround:

    Wenden Sie die folgenden Annotationen auf alle Kubernetes-Cluster an, bevor Sie ein Upgrade von 1.11 auf 1.12.2 starten.

          # To bypass preflight check errors:
          baremetal.cluster.gke.io/bypass-check="vip_subnet"

    Beispiel für die Verwendung im Stammadministratorcluster:

       kubectl annotate -n root cluster root-admin baremetal.cluster.gke.io/bypass-check="vip_subnet" --kubeconfig=ROOT_ADMIN_KUBECONFIG
       

    Upgrade 1.12.2

    Die Unterkomponente file-observability schlägt auf dem org-1-system-cluster fehl

    Symptome:

    Dieses Problem tritt beim Upgrade von Version 1.11.1 auf Version 1.12.2 auf.

    Sehen Sie sich die YAML-Datei für die Unterkomponente file-observability an :

    kubectl get subcomponent file-observability -n org-1-system-cluster -o yaml

    Die Datei enthält möglicherweise die folgende Meldung im Abschnitt backendStatus.

    message: 'E0100 - deploy: failed to install chart: release file-observability-backend
            failed, and has been uninstalled due to atomic being set: deployments.apps
            "file-observability-backend-controller" not found'

    Workaround:

    1. Prüfen Sie den Namespace file-system, um zu bestätigen, dass er nicht in org-admin cluster beendet wird:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG get namespace file-system
    2. Wenn der Namespace beendet wird, löschen Sie alle Monitoring-Ziele im Namespace file-system:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG delete monitoringtarget -n file-system --all
    3. Pausieren Sie die Unterkomponente file-observability, bis die Unterkomponente mon-admin aktiv ist. Fügen Sie dazu die folgenden Annotationen in die Unterkomponente ein:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG annotate -n org-1 subcomponent file-observability lcm.private.gdc.goog/paused='true'
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG annotate -n org-1-system-cluster subcomponent file-observability lcm.private.gdc.goog/paused='true'
    4. Entfernen Sie die Anmerkung, um die Unterkomponente nach dem Upgrade zu pausieren:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG annotate -n org-1 subcomponent file-observability lcm.private.gdc.goog/paused-
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG annotate -n org-1-system-cluster subcomponent file-observability lcm.private.gdc.goog/paused-
    Upgrade 1.12.2

    HSMupgrade schlägt fehl, da die hsmcluster nicht bereit ist

    Symptome:

    Dieses Problem tritt beim Upgrade von Version 1.11.1 auf Version 1.12.2 auf.

    Wenn alle Upgradeschritte für hsmupgraderequest und ctmclusterupgraderequest abgeschlossen sind, wird der folgende Fehler angezeigt:

    HSMCluster "hsmcluster" is not ready. 

    Beispiel:

     - lastTransitionTime: "2024-04-08T15:18:45Z" message: HSMCluster "hsmcluster" is not ready observedGeneration:
       2 reason: ziabhsm01PostUpgradeCheckFailed status: "False" type: AllComplete

    Workaround:

    1. Prüfen Sie, ob das Upgrade auf dem HSM abgeschlossen ist, und rufen Sie die IP-Adresse jedes HSM ab:
      kubectl get hsm -A --kubeconfig=ROOT_ADMIN_KUBECONFIG

      Sie erhalten folgende Ausgabe:

      NAMESPACE    NAME          AGE   IP              READY   REASON
      gpc-system   zi-aa-hsm01   11d   10.252.96.192   True    ReconcileHSMSuccess
      gpc-system   zi-ab-hsm01   11d   10.252.97.192   True    ReconcileHSMSuccess
      gpc-system   zi-ac-hsm01   11d   10.252.98.192   True    ReconcileHSMSuccess
    2. Laden Sie ksctl herunter und konfigurieren Sie es.
    3. Führen Sie ksctl system info get --url=https://HSM_MANAGEMENT_IP aus, um zu prüfen, ob alle HSM-Versionen auf .Spec.TargetVersion von ctmclusterupgraderequest aktualisiert wurden:

      Sie erhalten folgende Ausgabe:

            ksctl system info get
          {
            "name": "zi-aa-hsm01",
            "version": "2.13.1+10196",
            "model": "CipherTrust Manager k570",
            "vendor": "Thales Group",
            "crypto_version": "1.7.0",
            "uptime": "0 days, 1 hours, 20 minutes",
            "system_time": "2024-04-08T19:51:27Z"
          }

    4. Aktualisieren Sie das Feld Status.FirmwareVersion jedes HSM auf die im vorherigen Schritt abgerufene aktualisierte Version:

      Beispiel:

          kubectl edit-status hsm HSM_NAME -n gpc-system
    5. Aktualisiere den Status der letzten Bedingung von ctmclusterupgraderequest.status.conditions von False zu True. Danach wird auch der Status der letzten Bedingung hsmupgraderequest.status.conditions auf „Wahr“ gesetzt.

      Beispiel:

         kubectl edit-status ctmclusterupgraderequest CTM_VERSION -n gpc-system
         kubectl get ctmclusterupgraderequest CTM_VERSION -n gpc-system -o yaml

    Upgrade 1.12.2
    1.12.4

    Nicht erreichbare Management-IP

    Während eines Upgrades ist die Verwaltungs-IP eines Servers nicht erreichbar, insbesondere nach einem Switch-Betriebssystem-Upgrade.

    Bei Rocky Linux muss die Ziel-IP, die zum Erreichen der statischen Routen verwendet wird, erreichbar sein, bevor die statischen Routen hinzugefügt werden. Wenn der Switch nach einem Betriebssystem-Upgrade neu gestartet wird, ist die Verwaltungs-IP möglicherweise vorübergehend nicht erreichbar.

    Workaround:

    Stellen Sie über die Daten-IP-Adresse eine SSH-Verbindung zum Server her und starten Sie den Netzwerkdienst neu, um die fehlenden statischen Routen neu zu erstellen:

    systemctl restart NetworkManager.service
    Ticketsystem 1.12.2

    Synchronisierung der Wissensdatenbank des Ticketsystems schlägt fehl

    Symptome:

    Bei der Synchronisierung der Wissensdatenbank wird möglicherweise der folgende Fehler angezeigt:

    Error: Article creation request failed status:400, body:map[error:map[detail:Rejected large REST payload with content-length = 10725676 bytes. Max allowed: 10485760 bytes. 

    Workaround:

    Fügen Sie eine Systemeigenschaft hinzu, um die maximale Länge zu erhöhen:

    1. Geben Sie in der ServiceNow-Plattform sys_properties.list in den Navigationsfilter ein.
    2. Klicken Sie auf Neu.
    3. Geben Sie im Feld Name glide.rest.max_content_length ein.
    4. Wählen Sie im Feld Typ die Option string aus.
    5. Geben Sie im Feld Wert den Wert 15 ein.
    6. Klicken Sie auf Senden.
    7. Synchronisieren Sie die Wissensdatenbank noch einmal.
    Ticketsystem 1.12.2

    Das Ticketsystem hat keinen fehlerfreien Upstream

    Symptome:

    Bei der manuellen Bereitstellung der Organisation gdchservices hat das Ticketsystem keinen funktionierenden Upstream, es werden keine VMs erstellt und der Midserver-Pod ist im Cluster gdchservices-system im Namespace support fehlerhaft.

    Workaround:

    Erstellen Sie eine neue benutzerdefinierte TicketingSystem-Ressource mit dem richtigen VM-Image im gdchservices-admin-Cluster:

    apiVersion: ticketing.private.gdc.goog/v1
    kind: TicketingSystem
    metadata:
      name: as-replacement
      namespace: support
    spec:
      replicas: 2
      spec:
        image: ts-controller-app-server-2024-02-07-231907
        imagenamespace: vm-system
        memory: 12G
        size: 100G
        vcpus: 8
      version:
        name: glide-vancouver-07-06-2023__patch5-12-01-2023_12-11-2023_2006.zip
    Upgrade 1.12.2

    SSH-Verbindung zu einer VM mit Management-IP-Adresse und den Cilium-Logs schlägt fehl

    Symptome:

    Der Anmeldezugriff funktioniert nicht für eine VM mit Verwaltungs-IP. Möglicherweise wird in den anetd-Pod-Logs ein Fehler wie dieser angezeigt:

    Unable to create endpoint:[PUT /endpoint/{id}][400] putEndpointIdInvalid failed setting up layer2 interface

    Workaround:

    Löschen Sie den virt-launcher-Pod für die VM.

    Upgrade 1.12.2

    Die mz-etcd-Unterkomponente aktualisiert spec.deployTarget und spec.Namespace, wodurch das Upgrade von 1.11.x auf 1.12.x fehlschlägt

    Symptome:

    Während des Upgrades von 1.11.x auf 1.12.x wird möglicherweise ein Fehler wie dieser angezeigt:

          kubectl --kubeconfig PATH_TO_ROOT_ADMIN_KUBECONFIG get subcomponent -n root mz-etcd -o yaml
          kubectl --kubeconfig PATH_TO_ROOT_ADMIN_KUBECONFIG get subcomponent -n org-1 mz-etcd -o yaml

    Die Unterkomponente „mz-etcd“ hat vor einem Upgrade die folgende Spezifikation:

                  spec:
              crds:
                helmManifestSpec:
                  chartURL: gcr.io/mz-etcd-crds:1.11.1-gdch.260
                  upgradeHookPolicy: OnVersionChange
              deployTarget: Local
              namespace: ""

    Workaround:

    1. Löschen Sie die folgenden Unterkomponenten im Administratorcluster des Stammverzeichnisses:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n root mz-etcd
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n org-1 mz-etcd
    2. Prüfen Sie die Unterkomponente sowohl im Root- als auch im Organisations-Namespace:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subcomponent -n root mz-etcd -o yaml
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subcomponent -n org-1 mz-etcd -o yaml
    3. Die neue Unterkomponente muss die folgende Spezifikation haben und in der chatURL muss die Version angezeigt werden, auf die die Cluster bereits aktualisiert wurden:
                backend:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-backend:1.12.2-gdch.785
          ...
            dash:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-dash:1.12.2-gdch.785
          ...
            deployTarget: Remote
            namespace: mz-system
            mon:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-mon:1.12.2-gdch.785
                upgradeHookPolicy: OnVersionChange
          ...
            targetClusterName: root-admin
            targetClusterNamespace: root
            webhooks:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-webhooks:1.12.2-gdch.785
                upgradeHookPolicy: OnVersionChange
    Upgrade 1.12.2

    Beim Upgrade des Objektspeichers wird während der Postflight- oder Preflight-Prüfung ein Fehler angezeigt

    Symptome:

    Die Preflight- oder Postflight-Prüfungen schlagen mit einem Fehler fehl. Prüfen Sie die Logs:

    kubectl logs -n gpc-system upgrade-managed-check-objectstorageupgrade-87698-rrjhrW0410

    Der Fehler könnte so aussehen:

     03:42:05.701163       1 upgrade_check.go:276] 1 error occurred:
          * Group "/rbac.sysstd.role.vm-system.wtwf7txfmbhvujhpxrfampnrkdwqsvzro6i7rmo5tsfst4wbxldq" not ready for RBAC resource {Role vm-system g-vm-image-bucket-reader    }
    
       Error: check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
          * Bucket "gpc-system/range-read-internal" not ready
    
      F0410 03:42:05.701901       1 main.go:80] check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
          * Bucket "gpc-system/range-read-internal" not ready

    Workaround:

    Wenn der Fehler während der Postflight-Prüfungen auftritt und alle anderen Prüfungen ohne Fehler abgeschlossen wurden, überspringen Sie die Postflight-Prüfungen. Wenn das Upgrade neu gestartet wird, müssen Sie die Preflight-Prüfungen auch mit der kubeconfig des Root-Administrators überspringen:

     kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-postflight-check=ok && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=ok

    Wenn der Fehler beispielsweise in org-1 auftritt, sieht der Befehl so aus:

     kubectl delete organizationupgrade -n gpc-system org1 && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-postflight-check=ok && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=ok

    Wenn der Fehler während der Preflight-Prüfungen auftritt und alle anderen Preflight-Prüfungen ohne Fehler abgeschlossen wurden, überspringen Sie die Preflight-Prüfungen:

    kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=ok

    Wenn der Fehler beispielsweise in org-1 auftritt, sieht der Befehl so aus:

    kubectl delete organizationupgrade -n gpc-system org-1 && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=ok

    Möglicherweise müssen Sie diese Problemumgehung mehrmals anwenden, wenn sie nicht funktioniert.

    ATAT-Portfolio 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Portfolio wird nicht synchronisiert

    Symptome:

    ConfigSync gibt einen Fehler mit der folgenden Meldung zurück:

     KNV2009: failed to apply Portfolio.atat.config.google.com, atat-system/***: failed to create typed patch object (atat-system/***; atat.config. ││ google.com/v1alpha1, Kind=Portfolio): .spec.portfolioName: field not declared in schema. 

    Workaround:

    Das Portfolio-Schema hat sich in GDC-Version 1.12 geändert. Das Feld portfolioName wurde in portfolioID umgestaltet. Suchen Sie die YAML-Datei mit der in der Fehlermeldung erwähnten benutzerdefinierten Portfolio-Ressource. Benennen Sie das Feld portfolioName in portfolioID um.

    Upgrade 1.12.2

    Fehler bei NTP OSPolicy verhindert die Ausführung aller anderen OSPolicies

    Symptome:

    Im Folgenden sind die möglichen Gründe dafür aufgeführt, warum für einen Patchjob, für den nur Preflight-Jobs abgeschlossen wurden, kein laufender Job erstellt wird:

    1. Wenn NTP fehlschlägt, können alle anderen Patch-Jobs nicht ausgeführt werden.
    2. Der Knoten befindet sich in einem fehlerhaften Zustand.
    3. Der OS Config-Agent wird nicht ausgeführt.
    4. Der OS Config-Agent kann nicht mit dem OS Config-Dienst kommunizieren.
    5. Es gibt ein Problem mit dem OS Config-Dienst.

    Workaround:

    1. Prüfen Sie die benutzerdefinierte Ressource `NodeTargetPolicy` des Knotens.
    2. Suchen Sie nach `.spec.osPolicies` des benutzerdefinierten `NodeTargetPolicy`-Ressourcenobjekts mit `ref.name=admin-ntp-policy` und `type: Ready` mit dem Status „false“:
            # Enter the node InventoryMachine name.
            NAME=
            kubectl get nodetargetpolicy -n gpc-system $NAME -ojsonpath="{.spec.osPolicies}" | jq
    3. Sie erhalten folgende Ausgabe:
       - conditions:
                - lastTransitionTime: "2024-04-19T19:12:01Z"
                  message: ""
                  observedGeneration: 7
                  reason: Complete
                  status: "True"
                  type: PolicyPreflightCompleted
                - lastTransitionTime: "2024-04-19T19:12:01Z"
                  message: ""
                  observedGeneration: 7
                  reason: None
                  status: "True"
                  type: PolicyConflictNone
                - lastTransitionTime: "2024-04-19T19:56:35Z"
                  message: ""
                  observedGeneration: 7
                  reason: Reconciled
                  status: "True"
                  type: Ready
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    4. Löschen Sie alle Bedingungen dieser `osPolicies` und behalten Sie nur den folgenden Teil bei:
      - conditions:
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    Upgrade 1.12.3
    1.12.4

    NodeUpgrade zeigt Rocky Linux an

    Symptome:

    In der NodeUpgrade-CR wird version: rocky-86-xyz in der Spezifikation erwähnt, obwohl der Knoten, der aktualisiert wird, Ubuntu ist.

    Workaround:

    Sie benötigen keine Behelfslösung, da diese Informationen harmlos sind. Der Knoten wird korrekt auf eine neuere Version von Ubuntu aktualisiert.

    SIEM 1.12.0
    1.12.1
    1.12.2
    1.12.3
    1.12.4

    Fehler bei SIEM-Vorinstallationsjobs

    Symptome:

    siem-*-preinstall-Jobs im Root- und org-1-Namespace im Root-Administratorcluster schlagen wiederholt fehl.

    Workaround:

    Es wird erwartet, dass die Jobs fehlschlagen, wenn das Feature-Gate „SIEMComponent“ deaktiviert ist. Die Fehler bedeuten nicht, dass die Komponente defekt ist. Der Abgleich der SIEM-Komponente kann pausiert werden, wenn die Störungen störend sind. Es wird jedoch generell empfohlen, die Komponente nach Möglichkeit aktiviert zu lassen. Wenn der Abgleich der Komponenten pausiert ist, muss er manuell wieder aktiviert werden, wenn die Installation der SIEM-Komponente bei zukünftigen Upgrades nicht mehr eingeschränkt ist.

    Knotenupgrade 1.12.0
    1.12.1
    1.12.2

    Knotenupgrade schlägt aufgrund einer veralteten lvm.conf-Datei fehl

    Symptome:

    Möglicherweise gibt es Probleme mit vgs, blkid und gather_facts von Ansible reagiert nicht. Dieses Problem betrifft sowohl Rocky als auch Ubuntu.

    Führen Sie diese Schritte aus, wenn die Knoten bereits aktualisiert wurden. Der Prozess zum Aktualisieren der Datei lvm.conf umfasst die folgenden Schritte:

    1. Rufen Sie eine Liste aller Knoten ab, damit dieser Fix auf alle angewendet werden kann.
    2. Erstellen Sie ein Ansible-Playbook und eine OS Policy-Datei.
    3. Wenden Sie die Korrektur auf die Knoten an.
    4. Prüfen Sie, ob die Korrektur angewendet wurde.

    Voraussetzungen:

    1. Folgen Sie der Anleitung im IAM-R0004-Runbook, um die ROOTCONFIG für den Root-Administratorcluster und die ORGCONFIG für den Organisationsadministratorcluster zu generieren.
    2. Folgen Sie der Anleitung im IAM-R0005-Runbook, um die folgenden Rollen der Organisation zu erhalten.

    Workaround:

    1. Ermitteln Sie die InventoryMachines, die den Clustern entsprechen:
      kubectl --kubeconfig=$ROOTCONFIG get inventorymachines
          kubectl --kubeconfig=$ORGCONFIG get inventorymachines

      Halten Sie die Ausgabe getrennt. Beheben Sie jeweils nur einen Cluster. Die Ausgabe könnte so aussehen:

          NAME
          bm-2bca8e3f
          bm-4caa4f4e
    2. Playbook und Richtliniendatei erstellen:
      apiVersion: system.private.gdc.goog/v1alpha1
          kind: AnsiblePlaybook
          metadata:
            name: lvm-conf-device-filter-node-update
            namespace: gpc-system
          spec:
            playbook: |
              - name: Add a device filter to /etc/lvm/lvm.conf
                hosts: all
                gather_facts: no
                tasks:
                  # Change lvm.conf
                  - name: Configure lvm for filtering out "dm" and "sg" devices
                    ansible.builtin.lineinfile:
                      path: /etc/lvm/lvm.conf
                      insertafter: '^(\s+|)devices(\s+|)\{'
                      line: '  filter = [ \"r|/dev/dm.|\", \"r|/dev/sg.|\" ]'
      
          ---
          apiVersion: system.private.gdc.goog/v1alpha1
          kind: OSPolicy
          metadata:
            name: lvm-conf-device-filter-node-update
            namespace: gpc-system
          spec:
            interval:
              period: 1m
            inventory:
               # this is the inventory from step 1 above,
               # see the syntex below
            policy:
              installPlaybook:
                name: lvm-conf-device-filter-node-update
    3. Der vorherige Inventarabschnitt muss wie in diesem Beispiel ausgefüllt werden. Fügen Sie für jeden Knoten, den Sie in Schritt 1 gefunden haben, einen Absatz hinzu. Sie bearbeiten jeweils einen Cluster. Füllen Sie den Inventarbereich also mit Knoten für einen Cluster aus.
      inventory:
            # Node: bm-2bca8e3f
            - apiVersion: baremetal.cluster.gke.io/v1
              kind: InventoryMachine
              name: bm-2bca8e3f
      
            # Node: bm-4caa4f4e
            - apiVersion: baremetal.cluster.gke.io/v1
              kind: InventoryMachine
              name: bm-4caa4f4e
    4. Wenden Sie den Fix auf den Stammadministratorcluster an:
      kubectl --kubeconfig=$ROOTCONFIG apply -f PRECEDING_FILENAME_WITH_ROOT_NODES
    5. Wenden Sie den Fix auf den Administratorcluster der Organisation an:
      kubectl --kubeconfig=$ORGCONFIG  apply -f PRECEDING_FILENAME_WITH_ORG_NODES
    6. Starten Sie den Server neu, damit die neue Einstellung wirksam wird.
    7. Folgen Sie der Anleitung im OS-P0005-Runbook, um zu prüfen, ob die Knoten aktualisiert wurden.
    8. Nachdem Sie bestätigt haben, dass die Richtlinie erfolgreich abgeschlossen wurde, löschen Sie sie mit dem k9s-Tool:
      1. Rufen Sie die Betriebssystemrichtlinien auf, z. B. :ospolicies.
      2. Suchen Sie die lvm-conf-device-filter-node-update-Richtlinie und wählen Sie sie aus.
      3. Drücken Sie Strg + D.
      4. Bestätigen Sie den Löschvorgang.

    Wenn Sie dieses Problem eskalieren möchten, erstellen Sie ein Ticket mit dem Runbook SUPP-G0008. Das Ticket sollte unter anderem die folgenden Informationen enthalten:

    1. Ausgeführte Befehle und ihre Ausgabenachrichten
    2. Details wie InventoryMachineName und Cluster
    3. Logeinträge
    Betriebssystem 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Rocky OS ist für neue Cluster oder Organisationen fälschlicherweise ausgewählt

    Symptome:

    Dieses Problem tritt auf, wenn die Umgebung zuvor mit Version 1.11 bereitgestellt und dann auf Version 1.12 aktualisiert wurde. Wenn Sie einen neuen Cluster oder eine neue Organisation in einer Version 1.12.x erstellen, wird für die Bereitstellung von Bare Metal- und VM-Knoten das Rocky-Betriebssystem anstelle des Ubuntu-Betriebssystems ausgewählt, da die Rocky-Betriebssystemversion in den CRs ReleaseMetadata und Userclustermetadata angegeben ist.

    Workaround:

    Wenden Sie den folgenden Workaround an, bevor Sie eine neue Organisation erstellen:

    1. Prüfen Sie, ob es OrganizationUpgrade-CRs gibt, die nicht den Status Succeeded: true haben:
      for item in $(kubectl --kubeconfig=KUBECONFIG get OrganizationUpgrade -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers); do
        NAME=$(echo $item | awk '{print $1}')
        NAMESPACE=$(echo $item | awk '{print $2}')
        STATUS=$(kubectl --kubeconfig=KUBECONFIG get organizationupgrade ${NAME} -n ${NAMESPACE} -o json | jq '.status.conditions[] |  select(.type=="Succeeded") | .status')
        if [[ "$STATUS" != "True" ]]; then
           echo "Not in Succeeded: true state, stop following operations"
        fi
      done

      Wenn das der Fall ist, eskaliere den Fall an das Technikteam, bevor du mit den nächsten Schritten fortfährst.

    2. Entfernen Sie alle vorhandenen OrganizationUpgrade-CRs, um versehentliche Knoten-Betriebssystem-Upgrades zu vermeiden:
      for item in $(kubectl --kubeconfig=KUBECONFIG get OrganizationUpgrade -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers); do
        NAME=$(echo $item | awk '{print $1}')
        NAMESPACE=$(echo $item | awk '{print $2}')
        echo "Deleting OrganizationUpgrade $NAME in namespace $NAMESPACE"
        kubectl --kubeconfig=KUBECONFIG delete OrganizationUpgrade $NAME -n $NAMESPACE
      done
    3. Definieren Sie die Ziel-GDC-Version für die Erstellung der neuen Organisation. Für diese Zielversion sollte es entsprechende ReleaseMetadata geben:
      TARGET_RELEASE=
    4. Ermitteln Sie die neueste OSImageMetadata-CR für das Ziel-Ubuntu-Betriebssystem im Administratorcluster des Stammverzeichnisses und definieren Sie die Variable OS_VERSION:
      OS_VERSION=$(kubectl --kubeconfig=KUBECONFIG get osimagemetadata --sort-by=.metadata.creationTimestamp | grep -wv rocky | tail -1 |  awk '{print $1}' |  sed 's/gdch-node-os-//g')
      
      echo $OS_VERSION

      Die Ausgabe könnte so aussehen:

      1.12.4-gdch.4

      Achten Sie darauf, dass die Variable dieselbe Haupt-, Neben- und Patchversion wie TARGET_RELEASE verwendet, z.B.1.12.4. Falls nicht, eskaliere den Fall an das Engineering-Team, bevor du mit den nächsten Schritten fortfährst.

    5. Aktualisieren Sie das Ziel ReleaseMetadata, damit das Ubuntu-OS_VERSION im Administrator-Root-Cluster verwendet wird:
      kubectl --kubeconfig=KUBECONFIG patch releasemetadata "${TARGET_RELEASE}" --type='json' -p='[{"op": "replace", "path": "/spec/adminCluster/bmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/adminCluster/vmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/systemCluster/bmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/systemCluster/vmNodeImage", "value": '"${OS_VERSION}"'}]'
    6. Ermitteln Sie die zugeordnete UserclusterMetadata-Liste für das Ziel ReleaseMetadata:
      UCMS=$(kubectl --kubeconfig=KUBECONFIG get releasemetadata  "${TARGET_RELEASE}" -o json | jq -r '.spec.userClusters[].name')
    7. Aktualisieren Sie das Ziel-UserclusterMetadata, um das Ubuntu-OS_VERSION im Stamm-Administratorcluster und im Administratorcluster der Organisation für jede Organisation zu verwenden. Führen Sie den folgenden Befehl für jeden Cluster aus:
      for UCM in ${UCMS}; do
        echo "Updating UserclusterMetadata $UCM"
        kubectl --kubeconfig=KUBECONFIG patch userclustermetadata.upgrade.private.gdc.goog "${UCM}" --type='json' -p='[{"op": "replace", "path": "/spec/vmNodeImage", "value": '"${OS_VERSION}"'}]'
      done
    Virtuelle Maschinen 1.12.1
    1.12.2
    1.12.4

    BYO-Image-Import schlägt für qcow2- und RAW-Images fehl

    Symptome:

    Wenn lokale VM-Images mit der gdcloud compute images import-CLI importiert werden, bleibt der Importstatus bei WaitingForTranslationVM oder ImportJobNotCreated hängen. Das liegt daran, dass das temporäre Laufwerk, das für die Übersetzung oder den Import erstellt wird, genau die gleiche Größe wie das qcow2- oder Rohbild hat. LUKS fügt jedoch einen Overhead von einigen MiB hinzu, wodurch die Laufwerksbereitstellung fehlschlägt.

    Workaround:

    Erstellen Sie manuell ein neues VirtualMachineImageImport mit demselben Bildnamen, aber mit einem größeren spec.minimumDiskSize. Wenn das Image beispielsweise mit dem folgenden Befehl importiert wurde:

    gdcloud compute images import $IMPORT_NAME --project $PROJECT --source-file=$LOCAL_FILENAME --os=$OS

    Wenn die ursprüngliche VirtualMachineImageImport, die automatisch von der CLI erstellt wurde, minimumDiskSize als X Gi hat, erstellen Sie eine neue mit X+1 Gi. Der Wert basiert auf der Größe des importierten Bilds. Bei qcow2 wäre es die virtuelle Größe, z. B. sollte 20Gi durch 21Gi ersetzt werden.

    Ersetzen Sie die Platzhalterwerte entsprechend dem Aufruf der CLI.

    1. Suchen Sie nach VirtualMachineImageImport:
      kubectl get virtualmachineimageimport $IMPORT_NAME -n $PROJECT -o yaml

      Wenn das Objekt nicht vorhanden ist, lösen Sie den Befehl gdcloud compute images import ... noch einmal aus. Wenn die Konsolenausgabe von Uploading image to ... zu Image import has started for ... wechselt, drücken Sie Strg + C, damit das lokale Bild in den Objektspeicher hochgeladen wird und die VirtualMachineImageImport zur Referenzierung erhalten bleibt, um eine neue zu erstellen.

    2. Erstellen Sie eine neue VirtualMachineImageImport mit einem größeren minimumDiskSize:
      apiVersion: virtualmachine.gdc.goog/v1
      kind: VirtualMachineImageImport
      metadata:
        name: $IMPORT_NAME_NEW
        namespace: $NAMESPACE
      spec:
        imageMetadata:
          minimumDiskSize: $NEW_SIZE
          name: $IMAGE_NAME
          operatingSystem: $OS
        source:
           objectStorage:
            bucketRef:
              name: vm-images-bucket
            objectName: $LOCAL_FILENAME
    Virtuelle Maschinen 1.12.0
    1.12.1
    1.12.2
    1.12.3

    Der Bildimport hängt im Status „TranslationInProgress“ fest

    Symptome:

    Der Pod importer-image-import-$VMII im Namespace des Systemclusters stürzt mit dem folgenden Fehler ab: Unable to process data: Unable to transfer source data to target file: unable to write to file: stream error: stream ID 1; NO_ERROR; received from peer`). Das VirtualMachineImageImport-VMII-Objekt hat nach zwei Stunden nach Beginn des Imports den Bedingungstyp Ready mit dem Status False und dem Grund TranslationInProgress.

    Workaround:

    Um die Geschwindigkeit zu verbessern, ändern Sie die Mindestlaufwerksgröße des Images auf 200 GiB:

    kubectl get validatingwebhookconfiguration vmm-image-controller-v1-webhook -oyaml > /tmp/vmm-image-controller-v1-webhook.yaml
    kubectl delete validatingwebhookconfiguration vmm-image-controller-v1-webhook
    kubectl patch virtualmachineimageimport $VMII -n $PROJECT -p '{"spec": {"imageMetadata": {"minimumDiskSize": "200Gi"}}}'
    kubectl apply -f /tmp/vmm-image-controller-v1-webhook.yaml

    Zum Löschen und Anwenden von ValidatingWebhookConfiguration benötigen Sie die kubeconfig-Datei des Clusteradministrators für den Administratorcluster der Organisation. Sie können dieses Runbook unter IAM-R0004 abrufen.

    Wenn Sie den Import mit gdcloud starten, kann der Parameter minimumDiskSize nicht angegeben werden. Sie müssen ein VMII-Objekt erstellen und es wie im vorherigen Befehl gezeigt ändern.

    Der VirtualMachineImageImport-Prozess wird fortgesetzt, bleibt aber in einem späteren Schritt wieder hängen. Im Namespace des Projekts im Systemcluster sehen Sie, dass der Job image-import-$VMII immer wieder mit dem Fehler error: stream error: stream ID x; NO_ERROR; received from peer fehlschlägt. An diesem Punkt ist der Bildimport abgeschlossen. Das endgültige Bild wird in den Objektspeicher hochgeladen, aber VirtualMachineImage fehlt. So erstellen Sie manuell ein VirtualMachineImage-Objekt:

    kubectl apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImage
    metadata:
      name: $NAME
      namespace: $PROJECT
    spec:
      minimumDiskSize: 200Gi
      operatingSystem:
        name: $OS_NAME
    EOF

    `$NAME` muss mit `VMII.ImageMetadata.Name` übereinstimmen und `$OS_NAME` kann einer der folgenden Werte sein: [`ubuntu-2004`, `ubuntu-2204`, `windows-2019`, `rhel-8`]. Er muss mit dem Typ des importierten Images übereinstimmen.

    Istio 1.12.4

    istio-eastwestgateway-Bereitstellung im Namespace istio-system hängt fest

    Symptome:

    Die istio-eastwestgateway-Bereitstellung im Namespace istio-system hängt fest. In den Pod-Ereignissen wird der Fehler Back-off pulling image "auto" von kubelet angezeigt.

    Prüfen Sie zur Diagnose des Problems, ob die mutatingwebhookconfiguration mit dem Namen istio-revision-tag-default im selben Cluster wie die hängende Gateway-Bereitstellung vorhanden ist.

    kubectl --kubeconfig=KUBECONFIG get mutatingwebhookconfiguration istio-revision-tag-default

    Workaround:

    • Wenn die Konfiguration vorhanden ist, starten Sie die Bereitstellung istio-eastwestgateway im Namespace istio-system neu.
      kubectl --kubeconfig=KUBECONFIG rollout restart deployment/istio-eastwestgateway -n istio-system
    • Wenn die Konfiguration nicht vorhanden ist, warten Sie, bis der Webhook vorhanden ist. Das sollte in Kürze geschehen, da er sich in einer Abgleichsschleife befindet.
    Monitoring 1.12.2

    cortex-store-gateway wird mit dem Fehler „slice bounds out of range“ neu gestartet

    Symptome:

    Die cortex-store-gateway-Pods werden mit der folgenden Fehlermeldung in den Logs neu gestartet:

    panic: runtime error: slice bounds out of range

    Workaround:

    1. Pausieren Sie die Unterkomponente mon-cortex im Systemcluster.
      kubectl --kubeconfig $ORG_ADMIN_CONFIG annotate subcomponent mon-cortex -n $SYSTEM_CLUSTER_NAMESPACE lcm.private.gdc.goog/paused=true
    2. Ändern Sie die ConfigMap cortex-config im Systemcluster und legen Sie das Zeitlimit für Memcached im index_cache auf zwei Sekunden fest, sodass die index_cache-Konfiguration so aussieht:
       index_cache:
            backend: memcached
            memcached:
              addresses: dnssrvnoa+_memcached._tcp.cortex-index-memcached.mon-system.svc.cluster.local
              timeout: 2s
    3. Starten Sie die cortex-store-gateway-Pods im Systemcluster neu, damit sie die aktualisierte Konfiguration verwenden.
    Upgrade 1.12.4

    Neustart des Root-Administratorknotens während des Upgrades führt zu einem Fehler bei einer Unterkomponente

    Symptome:

    Der Bare-Metal-Knoten wird als NotReady angezeigt und der Server bleibt auf dem Startbildschirm mit der letzten Meldung Retrieving encryption keys hängen.

    Workaround:

    1. Starten Sie iLO neu.
    2. Starten Sie den Server neu, nachdem iLO wieder funktioniert.
    Upgrade 1.12.4

    Versionsnummer für storagecluster wird während des Upgrades nicht angezeigt

    Symptome:

    Nach dem Upgrade wird für das Statusfeld StorageVersion im StorageCluster-CR kein Wert angezeigt. Version prüfen:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get StorageCluster -n gpc-system
    Folgen Sie der Anleitung im Workaround, wenn das Feld „Version“ leer ist.

    Workaround:

    Starten Sie das file-storage-backend-controller-Deployment neu:

    kubectl --kubeconfig  ROOT_ADMIN_KUBECONFIG rollout restart deployment -n file-system file-storage-backend-controller

    Operations Suite Infrastructure (OI) 1.12.4

    Der Installationspfad von Fluent Bit ist falsch

    Symptome:

    Der Speicherort des fluent-bit-Installationsprogramms wurde in operations_center\bin\fluent-bit-win64.msi geändert. Für Copy-ConfigHostFiles.ps1 muss das Client-Installationsprogramm fluent-bit dem Muster fluent-bit-*-win64.* entsprechen. Das Installationsprogramm kann das Installationsprogramm nicht finden, da das Muster nicht mehr übereinstimmt.

    Workaround:

    1. Öffnen Sie die Datei Copy-ConfigHostFiles.ps1.
    2. Suchen Sie die folgende Zeile:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-*-win64.*').FullName
    3. Bearbeiten Sie die vorherige Zeile, um den richtigen Speicherort des Installationsprogramms hinzuzufügen:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-win64.*').Name
    Operations Suite Infrastructure (OI) 1.12.4

    Der Pfad des Nessus-Installationsprogramms ist falsch

    Symptome:

    Der Speicherort des Nessus-Installationsprogramms wurde in operations_center\bin\NessusAgent-x64.msi geändert. Für Copy-ConfigHostFiles.ps1 muss der Name des Clientinstallationsprogramms mit dem Dateinamen /NessusAgent-10.4.1-x64.msi übereinstimmen. Das Installationsprogramm kann das Installationsprogramm nicht finden, da das Muster nicht mehr übereinstimmt.

    Workaround:

    1. Öffnen Sie die Datei Copy-ConfigHostFiles.ps1.
    2. Suchen Sie die folgenden Zeilen:
      [pscustomobject]@{source = "H:\operations_center\bin\Nessus-10.4.1-x64.msi"; destination = "C:\config\nessus_mgr\Nessus-10.4.1-x64.msi" }
      [pscustomobject]@{source = "H:\operations_center\bin\Nessus-10.4.1-x64.msi"; destination = "C:\config\nessus_oob\Nessus-10.4.1-x64.msi" }
    3. Bearbeiten Sie die vorherigen Zeilen, um den richtigen Installationsort hinzuzufügen, und ändern Sie Nessus-10.4.1-x64.msi in NessusAgent-x64.msi:
      [pscustomobject]@{source = "H:\operations_center\bin\NessusAgent-x64.msi"; destination = "C:\config\nessus_mgr\NessusAgent-x64.msi" }
      [pscustomobject]@{source = "H:\operations_center\bin\NessusAgent-x64.msi"; destination = "C:\config\nessus_oob\NessusAgent-x64.msi" }
    Objektspeicher 1.12.4

    Erstellung einer neuen Organisation bleibt im Status VMImageDistributing hängen

    Symptome:

    Möglicherweise wird eine Meldung wie diese angezeigt:

    Reason:                NamespaceCreated
    Status:                True
    Type:                  ObjectNamespaceReady
    Last Transition Time:  2024-07-12T00:49:29Z
    Message:               awaiting images distribution to be finished
    Observed Generation:   1
    Reason:                VMImageDistributing
    Status:                Unknown
    Type:                  Ready  

    Dieses Problem wird durch eine fehlende S3-Endpunktkonfiguration für die neue Organisation verursacht.

    Workaround:

    Erstellen Sie manuell eine HA-Gruppe für die neue Organisation.

    1. Besorgen Sie sich über das Break-Glass-Verfahren eine kubeconfig-Datei des Root-Administratorclusters, die Lesezugriff auf die folgenden Ressourcen hat:
      • Organisation
      • ObjectStorageAdminNode
      • SubnetClaim
      • ObjectStorageSite
      • Secret
    2. Notieren Sie sich den Namen der Organisation:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get Organization -A
    3. Notieren Sie sich die Client-IP-Adressen der ObjectStorageAdminNode-CRs im Administratorcluster auf Stammebene.
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode

      Für jede AdminNode-CR:

      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode NODE_NAME -o jsonpath='{.spec.network.clientIP}'
    4. Notieren Sie sich den verfügbaren IP-Adressbereich und die reservierten IP-Adressen in diesem Bereich:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get SubnetClaim -n root external-objectstorage-client-lif-subnet -o jsonpath='{.status.ipv4SubnetStatus}'
    5. Rufen Sie die Anmeldedaten für die StorageGRID Management UI aus dem Secret gpc-system/objectstorage-breakglass-root-level1 im Root-Administratorcluster ab.
    6. Melden Sie sich mit den Anmeldedaten aus dem vorherigen Schritt in der StorageGRID Management-Benutzeroberfläche an. Die URL hat den Status ObjectStorageSite:
      kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig get ObjectStorageSite -n gpc-system mb-obj-site-1 -o jsonpath='{.status.managementAPIEndpointURL}'
    7. Rufen Sie den Tab Konfiguration auf und klicken Sie auf Hochverfügbarkeitsgruppen.
    8. Öffnen Sie die Detailansicht jeder HA-Gruppe und notieren Sie sich die virtuelle IP-Adresse (VIPs).
    9. Neue HA-Gruppe erstellen:
      1. Gruppenname: Das Namensmuster ist ORGANIZATION_NAME-ha. In diesem Fall ist es org-2-ha.
      2. Gruppenbeschreibung: Verwenden Sie vorhandene HA-Gruppen für das Beschreibungsmuster.
      3. Schnittstellen: Wählen Sie alle eth2 aus.
      4. Prioritätsreihenfolge: Die primäre Schnittstelle sollte die höchste Priorität haben.
      5. SubnetCIDR: Dieses Feld wird automatisch von StorageGRID ausgefüllt. Prüfen Sie, ob das Subnetz mit dem status.ipv4SubnetStatus.cidrBlock im SubnetClaim external-objectstorage-client-lif-cidr übereinstimmt.
      6. Virtuelle IP: Die nächste IP-Adresse im verfügbaren IP-Bereich. Die IP-Adresse darf nicht mit der reservierten IP-Adresse, der Client-IP-Adresse des Administrator-Knotens und den VIPs vorhandener HA-Gruppen kollidieren.
    10. Rotieren Sie die StorageGRID-Break-Glass-Anmeldedaten.
    Upgrade 1.12.4

    Laufender Abgleich in der Unterkomponente

    Symptome:

    Beim Upgrade der Stammorganisation von 1.12.2 auf 1.12.4 hat die Unterkomponente iac-gitlab den Status „Wird abgeglichen“. Prüfen Sie zur Diagnose des Problems die Prometheus-Logs, z. B.:

    kubectl logs gitlab-prometheus-server-5d6d9599f-l2l7s -n gitlab-system -c prometheus-server

    Die Logs enthalten möglicherweise einen Fehler wie diesen:

    unexpected fault address 0x7f217cf26000
    fatal error: fault
    [signal SIGBUS: bus error code=0x2 addr=0x7f217cf26000 pc=0x46c302]
    
    goroutine 1 [running]:
    runtime.throw({0x3018bed?, 0x0?})
        /usr/local/go/src/runtime/panic.go:992 +0x71 fp=0xc000a3b098 sp=0xc000a3b068 pc=0x438431

    Workaround:

    1. Führen Sie beispielsweise „sleep 3600“ aus, um eine Shell im laufenden Container zu erhalten.
      kubectl exec --stdin --tty POD_NAME -n gitlab-system -c prometheus-server -- /bin/sh
      /prometheus $ df -h

      Ersetzen Sie POD_NAME durch den Namen des Pods, z. B. gitlab-prometheus-server-d7969c968-hppsl.

    2. Prüfen Sie in der Ausgabe, ob der Ordner /data voll ist:
      Filesystem                Size      Used Available Use% Mounted on
      overlay                 866.4G    147.1G    719.3G  17% /
      tmpfs                    64.0M         0     64.0M   0% /dev
      tmpfs                    94.3G         0     94.3G   0% /sys/fs/cgroup/dev/mapper/luks-trident_pvc_6fb4dc48_72df_4bf1_825f_267818e3fefd
                                7.8G      7.3G         0 100% /data
    3. Wenn dieses Problem während des Upgrades auftritt, löschen Sie den Migrationsjob, da er ein Zeitlimit von 3.600 Sekunden hat, und fahren Sie dann mit dem Upgrade fort:
      kubectl delete job gitlab-migrations-1-fe7-2 -n gitlab-system
    Upgrade 1.12.4

    IAM-Preflight-Prüfung schlägt fehl

    Symptome:

    Sehen Sie sich zur Diagnose des Problems die IAM-Upgradeprotokolle an, z. B.:

    kubectl logs -n gpc-system upgrade-managed-check-iamupgrade-qbdm5-tl264 

    Die Ausgabe könnte so aussehen:

    I0724 21:57:20.456782       1 upgrade_check.go:39] IAM preflight check failed after 60000000000: Org iam-system deployments not ready: Deployment iam-authzpdp-backend-server is not ready; ready replicas 2,replicas 3

    Workaround:

    1. Sehen Sie sich die vorherige Fehlermeldung an und notieren Sie sich den Namespace und den Namen der Bereitstellung. In diesem Beispiel ist NAME iam-authzpdp-backend-server und NAMESPACE iam-system.
    2. Rufen Sie die Liste der Pods ab:
      kubectl get pods -n NAMESPACE | grep NAME
    3. Das Ergebnis wird im folgenden Format angezeigt:
      iam-authzpdp-backend-server-6875654c4b-64h4t            2/2     Running   0             29h
      iam-authzpdp-backend-server-6875654c4b-pvscg            1/2     Running   0             29h
      iam-authzpdp-backend-server-6875654c4b-v7jnl            2/2     Running   0             29h

      Notieren Sie sich den Pod, in dem nicht alle Container bereit sind. In diesem Fall ist POD_NAME iam-authzpdp-backend-server-6875654c4b-pvscg. Einer der beiden Container ist nicht bereit, was durch den Status 1/2 angezeigt wird. Wenn es mehrere solcher Pods gibt, wiederholen Sie den nächsten Schritt für jeden betroffenen Pod.

    4. Löschen Sie den Pod, der nicht vollständig fehlerfrei ist:
      kubectl delete pod -n NAMESPACE POD_NAME>
    5. Führen Sie den Befehl aus Schritt 2 noch einmal aus. Alle Pods sollten jetzt fehlerfrei sein. Dieser Schritt kann einige Minuten dauern.
    6. Wenn der gelöschte Pod nicht durch einen fehlerfreien Pod ersetzt wird, öffnen Sie ein Support-Ticket.
    Upgrade 1.12.1
    1.12.2
    1.12.4

    Der Status von OrganizationUpgrade ist Unknown.

    Symptome:

    Der Status OrganizationUpgrade ist nach Abschluss eines Upgrades Unknown.

    Workaround:

    Wenn das Feld „Version“ in Organization mit dem Feld targetVersion übereinstimmt, können Sie den Status „Unbekannt“ ignorieren.

    Upgrade 1.12.4

    Fehler beim Upgrade der Unterkomponente für opa gatekeeper

    Symptome:

    Beim Upgrade der Mandantenorganisation von Version 1.12.2 auf Version 1.12.4 schlägt das Upgrade der Unterkomponente opa gatekeeper mit einem ReconciliationError fehl.

    Workaround:

    1. Bearbeiten Sie das mutatingwebhookconfiguration-Objekt edr-sidecar-injector-webhook-cfg des betroffenen Nutzerclusters. Wenn es mehr als einen betroffenen Nutzercluster gibt, wiederholen Sie die Schritte für jeden betroffenen Nutzercluster:
           kubectl edit mutatingwebhookconfiguration edr-sidecar-injector-webhook-cfg
    2. Bearbeiten Sie den Abschnitt webhooks > (edr-sidecar-injector.gpc-system.internal) > namespaceSelector > matchExpressions > (key: kubernetes.io/metadata.name) > values, um die folgenden beiden Werte hinzuzufügen:
      • opa-system
      • cert-manager

      Das aktualisierte Objekt sollte so aussehen:

                  apiVersion: admissionregistration.k8s.io/v1
              kind: MutatingWebhookConfiguration
              ...
              webhooks:
              - admissionReviewVersions:
                name: edr-sidecar-injector.gpc-system.internal
                namespaceSelector:
                  matchExpressions:
                  - key: kubernetes.io/metadata.name
                    operator: NotIn
                    values:
                    - kube-system
                    - opa-system
                    - cert-manager
              ...

    3. Es kann bis zu einer Stunde dauern, bis das Problem behoben ist.
    Upgrade 1.12.4

    ansibleplaybook wird nicht im Rahmen des Clusterupgrades aktualisiert

    Symptome:

    Beim Upgrade von 1.12.2 auf 1.12.4 wird ansibleplaybook nicht im Rahmen des Clusterupgrades aktualisiert. Die im ansibleplaybook aktualisierten Korrekturen werden nicht angewendet und blockieren die Betriebssystemrichtlinie, in der die vorherige Version des ansibleplaybook ausgeführt wird.

    Workaround:

    1. Löschen Sie den Kubernetes-Job create-ansible-playbooks:
            JOB_NAME=create-ansible-playbooks-xxx
            JOB_NAMESPACE=xxx
            kubectl delete job $JOB_NAME -n JOB_NAMESPACE --kubeconfig=/path/to/admin-cluster-config 
    2. Starten Sie die os-core-controller-Bereitstellung neu.
    3. Dadurch werden die Jobs neu ausgelöst und die Playbooks aktualisiert.
    DNS 1.12.4

    Erstellung der Organisation schlägt fehl, weil der DNS-Traffic zum Root-Admin-Knoten abläuft

    Symptome:

    Beim Erstellen einer neuen Organisation kann es vorkommen, dass für die core-dns-Unterkomponente in den Logs ein Zeitüberschreitungsfehler angezeigt wird:

    [INFO] 192.0.2.0:60741 - 40400 "A IN objectstorage-tenant-mgmt.gdch.example.com. udp 72 false 1232" - - 0 2.000828817s
    [ERROR] plugin/errors: 2 objectstorage-tenant-mgmt.gdch.example.com. A: read udp 10.244.4.184:59927->192.0.2.1:53: i/o timeout
    [INFO] 192.0.2.0:51401 - 5813 "AAAA IN objectstorage-tenant-mgmt.gdch.example.com. udp 72 false 1232" - - 0 2.000585231s
    [ERROR] plugin/errors: 2 objectstorage-tenant-mgmt.gdch.example.com. AAAA: read udp 10.244.4.184:48542->192.0.2.1:53: i/o timeout

    Workaround:

    1. Aktualisieren Sie den gpc-coredns-forwarder-udp-Dienst und den gpc-coredns-forwarder-tcp-Dienst des Root-Administratorclusters und fügen Sie die neuen IP-Bereiche in den Quellbereichen des Load-Balancers hinzu.
    2. Wenn Änderungen am CR überschrieben werden, pausieren Sie die Unterkomponente dns-core mit der Anmerkung lcm.private.gdc.goog/paused="true".
    Datei- und Blockspeicher 1.12.4

    Die Unterkomponente file-netapp-trident schlägt im Stammcluster fehl.

    Symptome:

    Beim Upgrade von 1.12.2 auf 1.12.4 bleibt die Unterkomponente file-netapp-trident beim Löschen von StorageClasses hängen. Dort wird der folgende Status angezeigt:

          status:
      backendStatus:
        conditions:
        - lastTransitionTime: "2024-05-02T06:04:14Z"
          message: 'E0121 - rollback chart: no StorageClass with the name "standard-rwo-non-luks"
            found'
          observedGeneration: 2
          reason: ReconciliationError
          status: "True"
          type: Reconciling
        - lastTransitionTime: "2024-04-08T00:12:53Z"
          message: Successfully pulled chart
          observedGeneration: 2
          reason: ChartPullDone
          status: "True"
          type: ChartPull
        - lastTransitionTime: "2024-05-01T10:10:08Z"
          message: Fetched parameters from default, runtime
          observedGeneration: 2
          reason: ParametersDone
          status: "True"
          type: Parameters
        - lastTransitionTime: "2024-05-02T06:04:04Z"
          message: 'E0121 - rollback chart: no StorageClass with the name "standard-rwo-non-luks"
            found'
          observedGeneration: 2
          reason: DeployError
          status: "False"
          type: Deployed
        - lastTransitionTime: "2024-04-23T06:50:12Z"
          message: Readiness check job passed
          observedGeneration: 1
          reason: ReadinessCheckDone
          status: "True"
          type: Ready
        deploymentFinished: false
        lastDeployTimestamp: "2024-05-02T06:03:16Z"
        readyAfterDeploy: true
        version: ""
      conditions:
      - lastTransitionTime: "2024-05-02T06:04:14Z"
        message: 'Reconciliation error: E0121 - rollback chart: no StorageClass with the
          name "standard-rwo-non-luks" found'
        observedGeneration: 2
        reason: ReconciliationError
        status: "True"
        type: Reconciling
      crdsStatus:
        conditions:
        - lastTransitionTime: "2024-04-07T08:02:33Z"
          message: Successfully pulled chart
          observedGeneration: 2
          reason: ChartPullDone
          status: "True"
          type: ChartPull
        - lastTransitionTime: "2024-04-07T08:02:33Z"
          message: No parameters to fetch
          observedGeneration: 2
          reason: ParametersDone
          status: "True"
          type: Parameters
        - lastTransitionTime: "2024-04-07T08:02:34Z"
          message: Readiness source is empty
          observedGeneration: 2
          reason: ReadinessCheckSkipped
          status: "True"
          type: Ready
        - lastTransitionTime: "2024-05-01T18:37:52Z"
          message: Ready
          observedGeneration: 2
          reason: ReconciliationCompleted
          status: "False"
          type: Reconciling
        deploymentFinished: true
        lastDeployTimestamp: "2024-05-02T06:04:03Z"
        readyAfterDeploy: true
        version: 1.12.3-gdch.312

    Workaround:

    1. Pausieren Sie die Unterkomponente „file-netapp-trident“:
            ## Set KUBECONFIG to root-admin KUBECONFIG
            export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
            kubectl annotate subcomponent file-netapp-trident -n $cluster_namespace lcm.private.gdc.goog/paused=true
    2. Löschen Sie die StorageClasses, die vom Job nicht erstellt werden konnte, z. B. standard-rwo, standard-block, standard-rwo-non-luks und standard-block-non-luks:
            kubectl delete storageclass $(kubectl get storageclasses -o jsonpath='{.items[?(@.provisioner=="csi.trident.netapp.io")].metadata.name}
    3. Lösen Sie die Neuerstellung von StorageClasses aus, indem Sie den oclcm-backend-Controller für Ihren Cluster neu starten (Root-Administratorcontroller für Root- und Organisationsadministratorcluster, Organisationsadministratorcontroller für System- und Nutzercluster):
            kubectl rollout restart deployment oclcm-cm-backend-controller -n oclcm-system
    4. Starten Sie die Bereitstellung von netapp-trident und netapp-trident DaemonSet im Cluster neu:
            kubectl rollout restart deployment netapp-trident-controller -n netapp-trident
            kubectl rollout restart daemonset netapp-trident-node-linux -n netapp-trident
    5. Prüfen Sie, ob das LUKS-Secret für Ihre PersistentVolumeClaim-Ressourcen (PVC) erstellt wurde. Jeder PVC muss ein Secret im Format g-luks-$pvc_name haben.
            kubectl get secret -n $pvc_namespace g-luks-$pvc_name
    6. Prüfen Sie, ob die Unterkomponente file-netapp-trident im Status keinen Fehler aufweist:
            kubectl get subcomponent -n $cluster_namespace file-netapp-trident -o jsonpath='{.status}' | jq
      Hinweis: In Nachrichten und im `backendStatus` dürfen keine Fehler enthalten sein. Im `crdStatus` sollte `delpoymentFinished: true` angezeigt werden.
    7. Heben Sie die Pausierung der untergeordneten Komponente auf, damit die Überschreibungen wirksam werden.
    Physische Server 1.12.4

    Server-Bootstrap schlägt fehl

    Symptome:

    Beim Bootstrapping des Servers wird in den Bare-Metal-Logs möglicherweise eine Meldung wie diese angezeigt:

    Conditions:
        Last Transition Time:  2024-08-12T17:10:23Z
        Message:               Introspection timeout
        Observed Generation:   2
        Reason:                FailedProvision
        Status:                True
        Type:                  BaremetalFailure
        Last Transition Time:  2024-08-10T12:23:30Z
        Message:
        Observed Generation:   2
        Reason:                KeyManagerConfigurationSucceeded
        Status:                True
        Type:                  KeyManagerConfigured
        Last Transition Time:  2024-08-10T12:11:17Z
        Message:               The server is powered off or unknown
        Observed Generation:   2
        Reason:                NotPoweredOn
        Status:                False
        Type:                  Ready

    Workaround:

    1. Folgen Sie für jede Phase, in der es zu Problemen kommt, der Anleitung in den folgenden Runbooks:
      1. SERV-R0006
      2. SERV-R0007
      3. SERV-R0008
    2. Wenn das Problem weiterhin besteht, folgen Sie der Anleitung im SERV-R0001-Runbook.
    3. Wenn das Problem weiterhin besteht, erstellen Sie ein Support-Ticket.
    Upgrade 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Primäre Prometheus-Pods werden während des Upgrades nicht bereinigt

    Symptome:

    primary-prometheus-shardX-replicaX-Pods sind im Namespace obs-system und im Namespace mon-system sichtbar. Wenn primary-prometheus-shardX-replicaX nach einem Upgrade auf Version 1.12 nur im Namespace obs-system vorhanden ist, handelt es sich um ein anderes unbekanntes Problem und der Workaround sollte nicht ausgeführt werden.

    Das beabsichtigte Verhalten ist, dass primary-prometheus-shardX-replicaX erst nach Abschluss des Upgrades auf Version 1.12 im Namespace mon-system vorhanden ist.

    Workaround:

    1. Löschen Sie die primary-prometheus-shardX-replicaX-StatefulSets im Namespace obs-system manuell.
    2. Löschen Sie die primary-prometheus-shardX-replicaX-StatefulSets im Namespace mon-system nicht.
    Netzwerk 1.12.4

    PodCIDR ist Knoten nicht zugewiesen, obwohl ClusterCIDRConfig erstellt wurde

    Symptome:

    Ein ClusterCIDRConfig ist ein erforderliches Objekt, um PodCIDRs zuzuweisen. Obwohl die ClusterCIDRConfig erstellt wurde, wurde die PodCIDRs nicht zugewiesen. Dieses Problem tritt auf, wenn eine ClusterCIDRConfig gleichzeitig mit dem Bootstrapping der ipam-controller-Pods erstellt wird. Die Clustererstellung hängt im Abgleichsstatus fest:

    1. Prüfen Sie, ob das ClusterCIDRConfig-Objekt im Cluster erstellt wurde:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get clustercidrconfigs -oyaml

      Die Ausgabe könnte so aussehen:

      apiVersion: v1
          items:
          - apiVersion: networking.gke.io/v1alpha1
            kind: ClusterCIDRConfig
            metadata:
              annotations:
                baremetal.cluster.gke.io/managed: "true"
                kubectl.kubernetes.io/last-applied-configuration: |
                  {"apiVersion":"networking.gke.io/v1alpha1","kind":"ClusterCIDRConfig","metadata":{"annotations":{"baremetal.cluster.gke.io/managed":"true"},"creationTimestamp":null,"name":"root-admin-control-plane"},"spec":{"ipv4":{"cidr":"172.24.0.0/21","perNodeMaskSize":23},"ipv6":{"cidr":"fd00:1::2:0/112","perNodeMaskSize":119}},"status":{}}
              creationTimestamp: "2024-06-17T05:27:55Z"
              finalizers:
              - networking.kubernetes.io/cluster-cidr-config-finalizer
              generation: 1
              name: root-admin-control-plane
              resourceVersion: "2172"
              uid: d1216fe3-04ed-4356-a105-170d72d56c90
            spec:
              ipv4:
                cidr: 172.24.0.0/21
                perNodeMaskSize: 23
              ipv6:
                cidr: fd00:1::2:0/112
                perNodeMaskSize: 119
          kind: List
          metadata:
            resourceVersion: ""
    2. Führen Sie „describe“ für eines der Knotenobjekte des Clusters aus, das im Abgleich hängen geblieben ist, und prüfen Sie, ob im Knotenobjekt ein CIDRNotAvailable-Ereignis vorhanden ist:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG describe node NODE_NAME

      Die Ausgabereignisse könnten so aussehen:

      Type     Reason            Age                   From             Message
            ----     ------            ----                  ----             -------
            Normal   CIDRNotAvailable  3m22s (x96 over 21h)  cidrAllocator    Node gpc-adhoc-4f533d50vm-worker-node2-zone1 status is now: CIDRNotAvailable
            Warning  ReconcileError    3m22s (x96 over 21h)  ipam-controller  CIDRAssignmentFailed, retrying: failed to get cidrs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, unable to get clusterCIDRs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, no available CIDRs

    Workaround:

    1. Starten Sie die ipam-controller-manager-Pods neu:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG -n kube-system rollout restart ds ipam-controller-manager
    2. Nachdem die ipam-controller-manager-Pods ausgeführt werden, prüfen Sie, ob die podCIDR den Knoten zugewiesen ist:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get nodes -oyaml | grep podCIDR

      Die Ausgabe könnte so aussehen:

      podCIDR: 172.24.4.0/23
          podCIDRs:
          podCIDR: 172.24.2.0/23
          podCIDRs:
          podCIDR: 172.24.0.0/23
          podCIDRs:
    Vertex AI 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Vortrainierte APIs haben in der Benutzeroberfläche den Status Enabling

    Die MonitoringTarget zeigt den Status Not Ready an, wenn Nutzercluster erstellt werden. Dadurch wird in der Benutzeroberfläche für vortrainierte APIs fortlaufend der Status Enabling angezeigt.

    Workaround:

    1. Öffnen Sie das Menü in Ihrem Chrome-Browser (Dreipunkt-Symbol).
    2. Klicken Sie auf Weitere Tools > Entwicklertools, um die Console zu öffnen.
    3. Klicken Sie in der Konsole auf den Tab Netzwerk.
    4. Suchen Sie die ai-service-status-Anfragen.
    5. Klicken Sie in einer ai-service-status-Anfrage auf den Tab Antwort, um den Inhalt der Anfrage aufzurufen.
    6. Prüfen Sie, ob alles bereit ist, mit Ausnahme der Komponenten MonitoringTarget und LoggingTarget.
    Objektspeicher 1.12.4

    Einige Warnungen zum Upgrade des Objektspeichers können ignoriert werden

    Symptome:

    Beim Upgrade von Object Storage wird möglicherweise eine Warnung wie diese angezeigt:

     Type     Reason          Age                From                              Message
      ----     ------          ----               ----                              -------
      Warning  ReconcileError  55m (x2 over 55m)  ObjectStorageAdminNodeReconciler  Reconcile error, retrying: error storing the ssh creds: 500 Internal Server Error:ErrorMessage: {"text":"The GDU service is currently busy. Try again later. Contact technical support if the issue persists.","key":"maintenance.gdu.gdu_server_locked

    Workaround:

    1. Prüfen Sie, ob für jeden Knoten entsprechende SSH-Anmeldedaten in einem Secret gespeichert sind.
      1. Administrator-Knoten prüfen:
        kubectl get objectstorageadminnodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; done
      2. Speicherknoten prüfen:
        kubectl get objectstoragestoragenodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; done

      Die erfolgreiche Ausgabe für Speicherknoten sieht so aus:

      NAME                                      TYPE     DATA   AGE
      gpcstgecn01-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h
      NAME                                      TYPE     DATA   AGE
      gpcstgecn02-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h
      NAME                                      TYPE     DATA   AGE
      gpcstgecn03-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h

      Wenn ein Secret nicht gefunden wird, sieht der Fehler so aus:

      Error from server (NotFound): secrets "gpcstgeadm02-gce-gpcstgesite01-ssh-creds" not found
    2. Wenn der Befehl keine Fehler zurückgibt, können Sie die von den Abgleichern gemeldeten Fehler ignorieren.
    Vertex AI 1.11.x
    1.12.x

    Der Pod und der Dienst für das Übersetzungs-Frontend können nicht initialisiert werden

    Symptome:

    Während Upgrades wird der Translation DB-Cluster neu erstellt. Dadurch ist das Secret des ODS-Systemclusters secret-store veraltet und nicht mehr synchronisiert. Aus diesem Grund schlägt die Initialisierung des Translation-Frontend-Pods und -Dienstes fehl.

    Workaround:

    Löschen Sie das Secret im Systemcluster:

    kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG delete secret postgres-secret-store -n ai-translation-system

    Ersetzen Sie SYSTEM_CLUSTER_KUBECONFIG durch den Pfad zur kubeconfig-Datei im Systemcluster.

    Ein Controller erstellt das Secret automatisch neu und synchronisiert es wieder mit dem DB-Cluster.

    Physische Server 1.12.4

    Server kann keine Verbindung zum Schlüsselmanager herstellen

    Symptome:

    Der Server kann keine Verbindung zum Schlüsselmanager herstellen, sodass der Serverstatus nicht verfügbar ist. Dieses Problem führt dazu, dass der server-encrypt-and-create-logical-drive-Job fehlschlägt und der Administratorcluster nicht bereit ist. In den Joblogs wird möglicherweise ein Fehler wie dieser angezeigt:

    Error: Error during command execution: ansible-playbook error: one or more host failed
    Command executed: /usr/local/bin/ansible-playbook --extra-vars {"server_generation":"gen10","ssa_crypto_pwd":"vf{kXgbL?VFcV]%0","ssa_master_key":"ten-admin-org-2"} --inventory 192.0.2.0, --private-key /etc/ssh-key/id_rsa --become serve
    r/encrypt_and_create_logical_drive.yaml
    exit status 2   

    Workaround:

    Führen Sie einen AuxCycle durch und prüfen Sie, ob iLO eine Verbindung zum Key Manager herstellen kann.

    Logging 1.12.4

    Das Write-Ahead-Log füllt das nichtflüchtige Volume

    Symptome:

    Loki hat nur ein PersistentVolume (PV) für Write-Ahead-Logs (WAL) und Indexe. Das WAL kann das PV füllen, wenn ein Loki-Pod stundenlang keine Verbindung zum Speicher-Bucket herstellen kann. Wenn auf dem persistenten Volume kein Speicherplatz mehr vorhanden ist, kann Loki nur wiederhergestellt werden, wenn Sie das persistente Volume löschen und StatefulSet neu starten.

    Workaround:

    Um einen Loki-Pod aus diesem Zustand wiederherzustellen, müssen Sie die entsprechende StatefulSet herunterskalieren und das PV mit dem Fehler „Kein Speicherplatz mehr“ löschen.

    So stellst du den Loki-Pod wieder her:

    1. Prüfen Sie, ob der IO Tool-Container auf der Workstation installiert ist. Weitere Informationen finden Sie im Betriebshandbuch OOPS-P0065.
    2. Bitten Sie Ihren Sicherheitsadministrator, Ihnen die folgenden Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Bearbeiten von Ressourcen benötigen:
      • observability-viewer
      • observability-admin
    3. Legen Sie die Umgebungsvariable KUBECONFIG auf den Pfad zur kubeconfig-Datei im Administratorcluster der obersten Ebene fest. Weitere Informationen finden Sie im IAM-R0004-Runbook.
    4. Legen Sie für die Umgebungsvariable ORG_NAME den Namen der betroffenen Organisation fest.
    5. Speichern Sie den folgenden Inhalt in einer YAML-Datei mit dem Namen log-admin-overrides.yaml:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: "LoggingPipelineReconciler"
    6. Deaktivieren Sie den LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    7. Legen Sie die Umgebungsvariable KUBECONFIG auf den Pfad zur kubeconfig-Datei im Cluster fest, in dem der betroffene Loki-Pod ausgeführt wird. Weitere Informationen finden Sie im IAM-R0004-Runbook.
    8. Legen Sie für die Umgebungsvariable LOKI_POD_NAME den Namen des betroffenen Loki-Pods fest.
    9. Rufen Sie den Namen von Loki StatefulSet ab:
      export LOKI_STATEFULSET_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.metadata.labels.app')
    10. Rufen Sie den Namen des Loki-PVC ab:
      export LOKI_PVC_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.spec.volumes[] | select(.persistentVolumeClaim != null) | .persistentVolumeClaim.claimName')
    11. Rufen Sie die Loki-Replikate StatefulSet ab:
      export LOKI_STATEFULSET_REPLICAS=$(kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system -o json | jq -r '.status.replicas')
    12. Skalieren Sie das Loki-StatefulSet herunter:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=0
    13. Prüfen Sie, ob keine StatefulSet-Pods ausgeführt werden:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      Die Ausgabe muss wie im folgenden Beispiel aussehen:

      NAME                      READY   AGE
      audit-logs-loki-io        0/0     4d3h
    14. Löschen Sie den betroffenen PVC:
      kubectl delete pvc $LOKI_PVC_NAME -n obs-system
    15. Skalieren Sie das Loki-StatefulSet hoch:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=${LOKI_STATEFULSET_REPLICAS}
    16. Legen Sie die Umgebungsvariable KUBECONFIG mit dem Pfad zur kubeconfig-Datei im Administratorcluster der betroffenen Organisation fest. Weitere Informationen finden Sie im IAM-R0004-Runbook.
    17. Bearbeiten Sie den Inhalt der YAML-Datei log-admin-overrides.yaml so:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
        namespace: root
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: ""
    18. Aktivieren Sie den LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    19. Prüfen Sie, ob alle StatefulSet-Pods ausgeführt werden und fehlerfrei sind:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      Die Ausgabe muss wie im folgenden Beispiel aussehen:

      NAME                 READY   AGE
      audit-logs-loki-io   5/5     2d5h

      In diesem Fall sind fünf von fünf (5/5) Replikaten für die StatefulSet verfügbar.

    Upgrade 1.12.4

    Jobs werden kontinuierlich geplant

    Symptome:

    Jobs werden kontinuierlich geplant. Sobald ein Job beendet wird, wird ein neuer Job geplant. Die Jobs, die kontinuierlich geplant werden, sind:

    • unet-networkpolicy-assets-parameter
    • unet-nodenetworkpolicy-assets-parameter
    • unet-nodenetworkpolicy-assets-readiness
    • unet-userclusterpolicy-assets-parameter
    • unet-clustermesh-backend-parameter
    • unet-clustermesh-backend-readiness

    Workaround:

    1. Pausieren Sie die folgenden Unterkomponenten:
      • unet-networkpolicy
      • unet-nodenetworkpolicy
      • unet-nodenetworkpolicy
      • unet-userclusterpolicy
      • unet-clustermesh
    2. Heben Sie die Pausierung der untergeordneten Komponenten auf, wenn sich das Fleet-Info-Secret im Administratorcluster der Root-Ebene ändert. Dieses Problem tritt auf, wenn sich die Verwaltungsschalter der Instanz ändern, z. B. kr get managementswitches -A, oder wenn sich ein cidrclaim im Organisations-Namespace ändert.
    3. Setzen Sie die Unterkomponenten fort, wenn sich eine NodePool-Ressource im Administratorcluster der Organisation ändert. Aktivieren Sie die untergeordneten Komponenten, bevor Sie beginnen.
    Upgrade 1.12.4

    Kein gesunder Upstream für ServiceNow verfügbar

    Symptome:

    1. Beim Upgrade von 1.12.2 auf 1.12.4 ist kein fehlerfreier Upstream für ServiceNow verfügbar. Möglicherweise wird die folgende Meldung angezeigt: failed to stage volume: LUKS passphrase cannot be empty.
    2. Die Speicherklasse system-performance-rwo ist nicht für LUKS aktiviert. Die Volume-Anhängung gibt an, dass der PVC LUKS-fähig ist.
    3. Der Abgleich sucht nach einem Secret mit den LUKS-Passphrasen. Da die Volume-Anhängung angibt, dass LUKS aktiviert ist, die Speicherklasse jedoch nicht, wird die geheime Passphrase nicht erstellt.

    Workaround:

    1. Rufen Sie die Kubeconfig für den Stamm- oder Organisationsadministratorcluster ab, in dem das Problem auftritt:
            export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    2. Löschen Sie die Speicherklasse system-performance-rwo und erstellen Sie sie neu:
            kubectl delete storageclass system-performance-rwo
            kubectl apply -f system-performance-rwo.yaml
    3. Erstellen Sie eine neue YAML-Datei für die StorageClass system-performance-rwo und aktivieren Sie LUKS:
                 # kubectl get sc system-performance-rwo -o yaml
           allowVolumeExpansion: true
           apiVersion: storage.k8s.io/v1
           kind: StorageClass
           metadata:
             annotations:
               disk.gdc.goog/luks-encrypted: "true"
               helm.sh/resource-policy: keep
               lcm.private.gdc.goog/claim-by-force: "true"
               meta.helm.sh/release-name: file-netapp-trident-backend
               meta.helm.sh/release-namespace: netapp-trident
               storageclass.kubernetes.io/is-default-class: "false"
             labels:
               app.kubernetes.io/managed-by: Helm
             name: system-performance-rwo
           parameters:
             backendType: ontap-san
             csi.storage.k8s.io/node-expand-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-expand-secret-namespace: ${pvc.namespace}
             csi.storage.k8s.io/node-publish-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-publish-secret-namespace: ${pvc.namespace}
             csi.storage.k8s.io/node-stage-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace}
             fsType: ext4
             selector: tier=performance
           provisioner: csi.trident.netapp.io
           reclaimPolicy: Delete
           volumeBindingMode: Immediate
    Upgrade 1.12.4

    Das Upgrade der Unterkomponente file-netapp-trident hat den Status Reconciliation ongoing.

    Symptome:

    Möglicherweise wechselt der Status der Unterkomponente file-netapp-trident zwischen Reconciling und ReconciliationCompleted.

    Workaround:

    Sie können die laufende Abstimmung ignorieren, wenn die folgenden Bedingungen erfüllt sind:

    1. TridentBackend ist online.
    2. Die TridentBackend-Konfiguration ist bound.
    3. Die Bereitstellung von netapp-trident-controller ist fehlerfrei.
    4. Das DaemonSet netapp-trident-node-linux ist fehlerfrei.
    Upgrade 1.12.4

    Beim Upgrade des Worker-Knotens des Systemclusters kann kein Delta zwischen manifest und snapshot generiert werden

    Symptome:

    Beim Upgrade von Version 1.12.2 auf Version 1.12.4 bleibt das Organisationsupgrade in der Phase NodeUpgrade hängen und bei der Aufgabe zum Knotenupgrade wird der folgende Fehler angezeigt:

          Message: failed to generate delta between manifest and snapshot: failed to create or update delta configmap: failed to calculate delta between snapshot and manifest: failed to get valid OS distribution for delta comparison, distribution:

    So bestätigen Sie das Problem:

    1. Rufen Sie die Kubeconfig für den Stamm- oder Organisationsadministratorcluster ab, in dem das Knoten-Upgrade fehlschlägt, und prüfen Sie, ob nodeupgradetask fehlgeschlagen ist:
           export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
           kubectl get nodeupgradetask -A -ojsonpath='{.items[*].status.conditions[?(@.status != "True")]}' | jq 
    2. Prüfen Sie, ob die Meldung mit der vorherigen Fehlermeldung übereinstimmt:
            Message: failed to generate delta between manifest and snapshot: failed to create or update delta configmap: failed to calculate delta between snapshot and manifest: failed to get valid OS distribution for delta comparison, distribution:
    3. Prüfen Sie, ob für ein osartifactsnapshot eine Verteilung fehlt:
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    4. Prüfen Sie, ob mindestens ein Snapshot gedruckt wurde, für den die Verteilung nicht festgelegt ist.

    Workaround:

    1. Rufen Sie die Kubeconfig für den Cluster ab, zu dem der Knoten gehört:
           export KUBECONFIG=${CLUSTER_KUBECONFIG}
           kubectl rollout restart -n os-system os-core-controller 
    2. Prüfen Sie, ob der Snapshot jetzt eine Verteilung hat. Die Ausführung dieses Befehls kann einige Minuten dauern:
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    3. Dieser Befehl sollte keine Ergebnisse zurückgeben. Wenn weiterhin keine Verteilung erfolgt, reichen Sie eine Supportanfrage ein.
    Upgrade 1.12.4

    kubelet kann cgroup für Pods mit Spam-Logs nicht entfernen

    Symptome:

    1. kubelet gibt immer wieder das folgende Spam-Log aus:
      May 22 23:08:00 control-1--f1c6edcdeaa9e08-e387c07294a9d3ab.lab.anthos kubelet[3751]: time="2024-05-22T23:08:00Z" level=warning msg="Failed to remove cgroup (will retry)" error="rmdir /sys/fs/cgroup/freezer/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podea876418628af89ec2a74ea73d4a6023.slice/cri-containerd-d06aacfec2b399fcf05a187883341db1207c04be3698ec058214a6392cfc6148.scope: device or resource busy"
      ……
      May 22 23:09:04 control-1 kubelet[3751]: time="2024-05-22T23:09:04Z" level=warning msg="Failed to remove cgroup (will retry)" error="rmdir /sys/fs/cgroup/net_cls,net_prio/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podea876418628af89ec2a74ea73d4a6023.slice/cri-containerd-d06aacfec2b399fcf05a187883341db1207c04be3698ec058214a6392cfc6148.scope: device or resource busy"
    2. Der runc init-Prozess ist eingefroren, sodass kubelet den cgroup-Pod nicht löschen kann.

    Workaround:

    1. Verwenden Sie das folgende Script, um den Prozess zu finden, der das Löschen von cgroup verhindert:
           # Find matching cgroup directories
      MATCHING_CGROUPS=$(find /sys/fs/cgroup -type d -name "*74353c*")
      
      
      if [ -z "$MATCHING_CGROUPS" ]; then
       echo "No cgroups found containing 'd06aac'."
       exit 0
      fi
      
      
      echo "Matching cgroups:"
      
      
      for cgroup in $MATCHING_CGROUPS; do
       echo "- $cgroup"  # Print cgroup path
      
      
       # Check if cgroup.procs exists
       if [ -f "$cgroup/cgroup.procs" ]; then
         echo "  Processes:"
      
      
         # List PIDs in cgroup.procs
         for pid in $(cat "$cgroup/cgroup.procs"); do
           # Get process details
           ps -o pid,comm,cmd --no-headers $pid 2>/dev/null  # Suppress errors if process doesn't exist
         done
       else
         echo "  No cgroup.procs file found."  # Handle cases where cgroup.procs is missing
       fi
      
      
       echo  # Add a newline for better readability
       done
    2. Prüfen Sie den Status des Gefrierfachs mit cat freezer.state. Der Status sollte FROZEN sein.
    3. Echo "THAWED" > freezer.state
    4. Die cgroup wurde gelöscht. Kubelet stops spamming the log.
    Leistung 1.12.4

    Unterkomponente perf-ptaas mit Abgleichsfehler

    Symptome:

    Die Unterkomponente perf-ptaas zeigt den folgenden Fehlercode an, der die PTaaS-Bereitstellung verhindert:

    Reconciliation error: E0100 - deploy: failed to transfer ownership of conflicting resources for install: these resources need to be force claimed, but they are not annotated: [Resource: "resourcemanager.gdc.goog/v1, Resource=projects", GroupVersionKind: "resourcemanager.gdc.goog/v1, Kind=Project"

    Workaround:

    PTaaS wird in der Organisation gdchservices bereitgestellt.

    1. Sehen Sie sich die Anmerkungen und Labels des PTaaS-Projekts gdch-perftest und des Buckets perftest-bucket-reports im Namespace „perftest“ gdch-perftest an. Dem Bucket fehlen möglicherweise das Label app.kubernetes.io/managed-by=Helm und die Annotationen meta.helm.sh/release-name=perf-ptaas-assets und meta.helm.sh/release-namespace=gdch-perftest. Fügen Sie diese Labels und Annotationen manuell hinzu:
      kubectl --kubeconfig gdchservices-admin-kubeconfig label buckets -n gdch-perftest perftest-bucket-reports app.kubernetes.io/managed-by=Helm
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports meta.helm.sh/release-name=perf-ptaas-assets
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports meta.helm.sh/release-namespace=gdch-perftest
      Prüfen Sie, ob OCLCM den Bucket erzwingt:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports lcm.private.gdc.goog/claim-by-force=true
    2. Sehen Sie sich die Anmerkungen des PTaaS-Projekts gdch-perftest an. Das Projekt ist möglicherweise mit der Annotation meta.helm.sh/release-name=perf-ptaas-assets falsch konfiguriert. Ändern Sie diese Anmerkung in meta.helm.sh/release-name=perf-ptaas-backend:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest meta.helm.sh/release-name=perf-ptaas-backend --overwrite=true
      Achten Sie darauf, dass OCLCM das Projekt erzwingt:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest lcm.private.gdc.goog/claim-by-force=true
    3. Prüfen Sie, ob die untergeordnete Komponente im Root-Administratorcluster abgeglichen wird:
      kubectl get subcomponent -n gdchservices perf-ptaas