Problemi noti di Google Distributed Cloud con air gap 1.9.x

Categoria Versioni identificate Problema e soluzione alternativa
Installazione 1.9.0
1.9.1
1.9.2

A volte iLO non riesce a recuperare la chiave da HSM

Sintomi:

  • `server.status.conditions` ha una voce con tipo `KeyManagerConfigured` e stato `True`, ma nessuna con tipo `DiskEncryptionEnabled`.

  • Esistono pod non riusciti denominati `server-encrypt-and-create-logical-drive-$SERVER-xxxxx` con l'errore `"ERROR: (3065) Error changing the Controller Encryption Mode UNABLE TO RETRIEVE KEY\tController: HPE Smart Array P408i-a SR Gen10, SLOT 0`.

  • Impossibile eseguire SSH nel pod a causa di una chiave non valida.

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Vai a iLO UI > Information > Diagnostics > Reset per ripristinare iLO.

  2. Se durante il ripristino iLO mostra che il server è in fase di autotest all'accensione (POST), riavvia il flusso di provisioning:

    1. Se l'installazione del cluster di amministrazione è stata completata:

      export KUBECONFIG=<root-admin-kubeconfig path>
             
    2. Aggiorna la chiave SSH:

      1. Recupera la chiave SSH pubblica attuale (tieni presente che potrebbe essere stata ruotata e quindi diversa da /root/.ssh/id_rsa.pub

        kubectl -n gpc-system get secret/ssh-key -ojsonpath={.data.'id_rsa\.pub'} | base64 -d
               
      2. Inserisci la chiave pubblica nel ConfigMap ironic-vars:

        kubectl -n gpc-system edit cm/ironic-vars
               

        Aggiungi IRONIC_RAMDISK_SSH_KEY: \

      3. Riavvia ironic:

        kubectl -n gpc-system rollout restart deployment/root-admin-metal3-ironic
    3. Esegui il provisioning della macchina per reinstallare IPA:

      1. Esegui il backup di bmc-credential-$SERVER, poiché l'eliminazione di bmh comporta anche l'eliminazione del secret

        kubectl -n gpc-system get secret bmc-credentials-$SERVER -oyaml > $SERVER
               
      2. Rimuovi dal file gli attributi non applicabili, ad esempio: last-applied, creationtimestamp, finalizer, ownerreference, resourceversion, uid.

      3. Elimina BareMetalHost:

        kubectl -n gpc-system delete bmh/$SERVER
               
      4. Prendi il file Secret bmc-credentials-$SERVER o il backup precedente da cellcfg e applicalo.

    4. Chiedere al server di fare qualcosa di diverso.

      1. Per rimuovere lo stato BMH memorizzato nella cache:

        kubectl -n gpc-system annotate server/$SERVER baremetalhost.metal3.io/status-
  3. Attendi il provisioning del server.

  4. Guarda come vengono creati gli oggetti BMH.

  5. Potresti dover eliminare i job di crittografia per riattivarli.

Operazioni 1.9.0
1.9.1
1.9.2

L'utilizzo della classe di archiviazione a blocchi standard potrebbe impedire l'avvio o il riavvio delle macchine virtuali (VM)

Sintomi:

Lo stato della VM persiste con STATUS di Provisioning o Starting quando storageClassName è standard-block.

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Verifica che la VM STATUS mostri Provisioning o Starting:

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gvm -n PROJECT

    SYSTEM_KUBECONFIG è il percorso del file del cluster di sistema kubeconfig.

    PROJECT è il progetto GDC in cui si trova la VM.

    (Facoltativo) Ottieni ulteriori dettagli sullo stato:

    kubectl get gvm VM_NAME -n PROJECT -o \
               jsonpath='{"State:"}{.status.state}{"\n"}{"Reason:"}{.status.reason}{"\n"}{"Message:"}{.status.message}{"\n"}'

    VM_NAME è il nome della VM che non risponde.

  2. Elimina la VM:

    kubectl --kubeconfig SYSTEM_KUBECONFIG delete gvm VM_NAME -n NAMESPACE_NAME

    NAMESPACE_NAME è il nome del tuo spazio dei nomi.

  3. Verifica che l'eliminazione sia andata a buon fine:

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gvm VM_NAME -n PROJECT

    Un risultato simile al seguente conferma l'operazione:

    Error from server (NotFound): virtualmachines.vm.cluster.gke.io "VM_NAME" not found
  4. Elimina tutti i dischi della VM:

    kubectl --kubeconfig SYSTEM_KUBECONFIG delete gdisk DISK_NAME_1 DISK_NAME_2 DISK_NAME_N -n NAMESPACE_NAME
  5. Sostituisci il nome di ciascuno dei tuoi dischi con DISK_NAME_1 e DISK_NAME_2 fino a DISK_NAME_N e assicurati che tutti i dischi siano elencati.

  6. Verifica che l'eliminazione sia andata a buon fine:

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gdisk DISK_NAME_1 DISK_NAME_2 DISK_NAME_N -n $PROJECT
  7. Un risultato simile al seguente conferma l'operazione:

          Error from server (NotFound): virtualmachinedisks.vm.cluster.gke.io "DISK_NAME_1" not found
          Error from server (NotFound): virtualmachinedisks.vm.cluster.gke.io "DISK_NAME_2" not found
          Error from server (NotFound): virtualmachinedisks.vm.cluster.gke.io "DISK_NAME_N" not found
          
  8. Ricrea la VM e i dischi.

  9. Riavvia la VM.

Operazioni 1.9.2

Durante un upgrade dalla versione 1.9.1 alla 1.9.2, le operazioni su Artifact Registry potrebbero non riuscire e restituire errori di autorizzazione

Sintomi:

gdcloud system container-registry load-oci non riesce a essere eseguito a causa di errori. Se esegui nuovamente il comando, viene eseguito per periodi di tempo diversi e non riesce in punti diversi del processo, ad esempio push o retag, ma con errori simili.

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Esporta KUBECONFIG nel file kubeconfig dell'amministratore root:

    export KUBECONFIG=~/release/root-admin/root-admin-kubeconfig
  2. Esegui questo comando per ridurre lo scale down di deployment/root-admin-tftp-manager-controller a 0 repliche:

    kubectl scale --replicas=0 deployment/root-admin-tftp-manager-controller -n gpc-system
  3. Esegui le operazioni non riuscite.
  4. Aumenta la scalabilità di deployment/root-admin-tftp-manager-controller a 1 replica:

    kubectl scale --replicas=0 deployment/root-admin-tftp-manager-controller -n gpc-system
Operazioni 1.9.1
1.9.2
1.9.3

Impossibile impostare le etichette del selettore di componenti aggiuntivi per il cluster amministratore root

Sintomi:

gdcloud system container-registry load-oci non riesce a essere eseguito a causa di errori. Se esegui nuovamente il comando, viene eseguito per periodi di tempo diversi e non riesce in punti diversi del processo, ad esempio push o retag, ma con errori simili.

Soluzione temporanea:

Ignora pure il messaggio. Scompare dopo un po'.

Operazioni 1.9.2

Impossibile recuperare i log per un pod a causa di un'immagine mancante

Soluzione temporanea:

Per risolvere il problema, riavvia il pod interessato.

Operazioni 1.9.0
1.9.1
1.9.2

Un server è bloccato nello stato available e il relativo job di configurazione della crittografia continua a non riuscire a causa di un errore della chiave SSH

Sintomi:

Lo stato della condizione Server's Ready è "False" e il messaggio contiene "job server-encrypt-and-create-logical-drive-... failed with reason ... and message ...". I log del job non riuscito contengono "Failed to connect to the host via ssh ... Permission denied (publickey)."

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Recupera la chiave SSH pubblica corrente dal cluster di amministrazione principale:

    kubectl -n gpc-system get secret/ssh-key -ojsonpath={.data.'id_rsa\.pub'} | base64 -d
  2. Inserisci la chiave in configmap ironic-vars:

    kubectl -n gpc-system edit cm/ironic-vars
  3. e aggiungi o sostituisci la chiave IRONIC_RAMDISK_SSH_KEY esistente:

    <SSH public key>
  4. Riavvia il deployment di Ironic:

    kubectl -n gpc-system rollout restart deployment/root-admin-metal3-ironic
  5. Per ogni server interessato:

    kubectl -n gpc-system annotate bmh/$SERVER inspect.metal3.io=""
Operazioni 1.9.2

Il provisioning di un cluster utente tramite la GUI si blocca

Soluzione temporanea:

Per evitare il problema di una carenza di indirizzi IP, imposta le dimensioni del CIDR dei pod su /21 o superiore quando crei un cluster utente ad alta disponibilità.

Installazione 1.9.2

Durante il bootstrap, Google Distributed Cloud air-gapped 1.14.2 non restituisce le metriche da Cortex

Soluzione temporanea:

Per risolvere il problema, riavvia i pod.

Per maggiori dettagli, consulta il runbook MON-R0001.

Autenticazione della piattaforma 1.9.13

Le organizzazioni appena create non possono raggiungere gli IP dei dati del server

Sintomi:

Tutti i job cplb-init e storage-ipsec-config-bm-XXXXX mostrano il seguente messaggio: Failed to connect to the host via ssh: ssh: connect to host 10.1.18.X port 22: Connection timed out.

Soluzione temporanea:

1. Controlla se bgp vrf non è disponibile su aggswitch.

2. Controlla se sono presenti modifiche non commit per la nuova configurazione di staging sul firewall.

3. Pulisci tutti i securitypolicyrules che avevano l'organizzazione eliminata nel nome e riavvia root-admin-controller.

Esegui l'upgrade 1.9.1
1.9.2
1.9.11

Durante l'upgrade del sistema operativo del nodo, il server è bloccato nel deprovisioning perché l'URL boot.ipxe non è valido

Sintomi:

Server ha .status.bareMetalHostStatus.provisionState bloccato a deprovisioning da più di 20 minuti.

L'indirizzo IP di gestione del server in fase di upgrade è incluso nell'output di uno qualsiasi di questi comandi:

kubectl -n gpc-system get cm/gpc-dhcp-conf -oyaml | grep dhcp-option=tag:mgmt,option:tftp-server
kubectl -n gpc-system get cm/gpc-dhcp-conf -oyaml | grep dhcp-option=tag:mgmt,tag:ipxe,option:bootfile-name

Soluzione temporanea:

Per risolvere il problema, esegui:

kubectl -n gpc-system rollout restart deploy/root-admin-controller
Esegui l'upgrade 1.9.1
1.9.2
1.9.10
1.9.11
1.9.12
1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18

Durante l'upgrade del sistema operativo del nodo, un nodo non supera il job machine-init

Sintomi:

Un'attività di upgrade in NodeUpgrade rimane incompiuta per oltre 2 ore.

Un NodeUpgradeTask corrispondente rimane in attesa della condizione NodeResumeCompleted per più di un'ora.

bm-system-x.x.x.x-machine-init i job rimangono incompiuti per un lungo periodo di tempo. x.x.x.x è l'indirizzo del nodo.

Soluzione temporanea:

Per trovare l'indirizzo di un nodo non integro, consulta x.x.x.x del job bm-system-x.x.x.x-machine-init in attesa.

Per trovare un nodo del control plane integro per il nodo non integro, segui questi passaggi:

  1. Trova il nodepool del nodo non integro.
  2. Controlla il pool di nodi del control plane nello stesso cluster del nodo non integro e seleziona un indirizzo da .spec.address di quel pool di nodi del control plane.

    1. Su bootstrapper o OC IT, esegui:

      HEALTHY_CP_NODE_IP=Y.Y.Y.Y # Needs to be entered.
      alias ka="kubectl --kubeconfig=/root/release/root-admin/root-admin-kubeconfig"
      HARBOR=$(ka get harborcluster harbor -n harbor-system -o=jsonpath="{.spec.externalURL}")
      REGISTRY=${HARBOR#https://}
      # Download `etcdctl`.
      docker run --rm -v $(pwd):/workspace --workdir /workspace ${REGISTRY}/library/anthos-baremetal-release/etcd:v3.4.21-0-gke.1 /bin/sh -c "cp /usr/local/bin/etcdctl /workspace/etcdctl"
      
      scp etcdctl "root@$HEALTHY_CP_NODE_IP:/root/etcdctl"
      # SSH into the healthy control plane node.
      ssh $HEALTHY_CP_NODE_IP
    2. All'interno del nodo del control plane integro, esegui:

      UNHEALTHY_NODE_IP=X.X.X.X # Needs to be entered.
      
      UNHEALTHY_MEMBER=$(ETCDCTL_API=3 ./etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt     --cert=/etc/kubernetes/pki/etcd/server.crt     --key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://localhost:2379  member list | grep $UNHEALTHY_NODE_IP | cut -d',' -f1)
      
      ETCDCTL_API=3 ./etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://localhost:2379 member remove $UNHEALTHY_MEMBER
Esegui l'upgrade 1.9.1
1.9.2

L'upgrade dalla versione 1.9.0 alla 1.9.1 è bloccato perché l'ods-fleetinstallazione del componente aggiuntivo non è riuscita

Sintomi:

Il pod ODS Fleet Operator è in crash loop.

Per controllare lo stato del pod, esegui:

ko get pods -n ods-fleet-operator

Nei log dell'operatore della flotta ODS viene visualizzato un errore di selezione del leader simile al seguente:

E0413 18:06:48.614127       1 leaderelection.go:330] error retrieving resource lock ods-fleet-system/af0cf209.dbadmin.gdc.goog: Get "https://172.20.0.1:443/apis/coordination.k8s.io/v1/namespaces/ods-fleet-system/leases/af0cf209.dbadmin.gdc.goog": context deadline exceeded
I0413 18:06:48.614214       1 leaderelection.go:283] failed to renew lease ods-fleet-system/af0cf209.dbadmin.gdc.goog: timed out waiting for the condition
E0413 18:06:48.614460       1 main.go:473] "setup: problem running manager" err="leader election lost" log_name="l1_controller"

Per controllare i log dell'operatore della flotta ODS, esegui:

ko logs deployment/fleet-controller-manager -n ods-fleet-system

Viene visualizzato il seguente messaggio:

Message: Error occurred during addon installation: failed to upgrade chart: an error occurred while rolling back the release. original upgrade error: post-upgrade hooks failed: timed out waiting for the condition: timed out waiting for the condition.

Soluzione temporanea:

Per modificare il deployment, esegui:

ko edit deployment -n ods-fleet-system fleet-controller-manager
ku edit deployment oracle-controller-manager -n ods-oracle-system
ku edit deployment pg-controller-manager -n ods-postgres-system

Assicurati di modificare il campo resources del container manager come segue:

Prima:

resources:
      limits:
         cpu: 100m
         memory: 512Mi
      requests:
         cpu: 100m
         memory: 512Mi

Dopo:

resources:
      limits:
         cpu: 1000m
         memory: 1024Mi
      requests:
         cpu: 1000m
         memory: 1024Mi
Esegui l'upgrade 1.9.2
1.9.3

Il componente aggiuntivo vm-runtime è bloccato durante l'upgrade di gpu-org-system-cluster dalla versione 1.9.1 alla 1.9.2 perché i pod kubevm-gpu-driver-daemonset si trovano nello stato CrashLoopBackOff

Sintomi:

Viene visualizzato il seguente messaggio di errore:

nvidia-driver-init run the action: init, with options: skip_driver                                                                                                                                                                                              
nvidia-driver-init Find the nvidia card, label this node                                                                                                                                                                                                        
nvidia-driver-init node/MACHINE_NAME not labeled                                                                                                                                                                                                                  
nvidia-driver-init enable nvidia container runtime for ubuntu/debian system                                                                                                                                                                                     
nvidia-driver-init install nvidia container runtime package                                                                                                                                                                                                     
nvidia-driver-init (Reading database ... 92144 files and directories currently installed.)                                                                                                                                                                      
nvidia-driver-init Preparing to unpack .../libnvidia-container1_1.12.0-1_amd64.deb ...                                                                                                                                                                          
nvidia-driver-init Unpacking libnvidia-container1:amd64 (1.12.0-1) over (1.12.0-1) ...                                                                                                                                                                          
nvidia-driver-init Setting up libnvidia-container1:amd64 (1.12.0-1) ...                                                                                                                                                                                         
nvidia-driver-init Processing triggers for libc-bin (2.31-0ubuntu9.9) ...                                                                                                                                                                                       
nvidia-driver-init (Reading database ... 92144 files and directories currently installed.)                                                                                                                                                                      
nvidia-driver-init Preparing to unpack .../libnvidia-container-tools_1.12.0-1_amd64.deb ...                                                                                                                                                                     
nvidia-driver-init Unpacking libnvidia-container-tools (1.12.0-1) over (1.12.0-1) ...                                                                                                                                                                           
nvidia-driver-init Setting up libnvidia-container-tools (1.12.0-1) ...                                                                                                                                                                                          
nvidia-driver-init dpkg: regarding .../nvidia-container-toolkit-base_1.12.0-1_amd64.deb containing nvidia-container-toolkit-base:                                                                                                                               
nvidia-driver-init  nvidia-container-toolkit-base breaks nvidia-container-toolkit (<= 1.10.0-1)                                                                                                                                                                 
nvidia-driver-init   nvidia-container-toolkit (version 1.8.1-1) is present and installed.                                                                                                                                                                       
nvidia-driver-init dpkg: error processing archive var/cache/apt/archives/nvidia-container-toolkit-base_1.12.0-1_amd64.deb (--install):                                                                                                                          
nvidia-driver-init  installing nvidia-container-toolkit-base would break nvidia-container-toolkit, and                                                                                                                                                          
nvidia-driver-init  deconfiguration is not permitted (--auto-deconfigure might help)                                                                                                                                                                            
nvidia-driver-init Errors were encountered while processing:                                                                                                                                                                                                    
nvidia-driver-init  var/cache/apt/archives/nvidia-container-toolkit-base_1.12.0-1_amd64.deb

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Accedi a tutti i nodi GPU di cui è stato eseguito il provisioning:

    # ka get servers -A | grep o1-highgpu1-48-gdc-metal
  2. Rimuovi i vecchi pacchetti:

    root@MACHINE_NAME:~# dpkg -r nvidia-container-runtime nvidia-container-toolkit
    (Reading database ... 92154 files and directories currently installed.)
    Removing nvidia-container-runtime (3.8.1-1) ...
    Removing nvidia-container-toolkit (1.8.1-1) ...
  3. Elimina il pod kubevm-gpu-driver-daemonset bloccato. L'installazione viene riavviata:

    # kug get pods -A | grep gpu | grep Init
  4. (Facoltativo) Se l'installazione del componente aggiuntivo è scaduta, riavviala:

    ku delete job vm-runtime-readiness -n gpu-org-system-cluster
Esegui l'upgrade 1.9.10
1.9.11

Il pod gpcbackup-agent-0 non riesce a causa del messaggio di errore failed to stage volume: iSCSI login failed.

Sintomi:

gpcbackup-agent-0 mostra failed to stage volume: iSCSI login failed e non esegue lo staging del volume.

Controlla se il pod non riesce ad associare il volume. Gli esempi seguenti utilizzano il file kubeconfig del cluster di sistema:

  • Descrivi il pod:

    kos describe pod -n gpc-backup-system gpcbackup-agent-0

    Se il pod non funziona, viene visualizzato un output simile al seguente esempio:

    Warning  FailedMount  24m (x1064 over 7d17h)    kubelet  Unable to attach or mount volumes: unmounted volumes=[gpcbackup-agent-vol], unattached volumes=[kube-api-access-cr45d gpcbackup-agent-vol]: timed out waiting for the condition
    Warning  FailedMount  9m18s (x4109 over 7d17h)  kubelet  MountVolume.MountDevice failed for volume "pvc-5df41864-63c5-4589-9569-036fa011f64c" : rpc error: code = Internal desc = failed to stage volume: iSCSI login failed
    Warning  FailedMount  4m32s (x3840 over 7d17h)  kubelet  Unable to attach or mount volumes: unmounted volumes=[gpcbackup-agent-vol], unattached volumes=[gpcbackup-agent-vol kube-api-access-cr45d]: timed out waiting for the condition
  • Controlla il nodo per cui il pod non funziona:

    kos get pod -n gpc-backup-system gpcbackup-agent-0 -o wide

    Ottieni un output simile al seguente esempio:

    NAME                READY   STATUS              RESTARTS   AGE     IP       NODE          NOMINATED NODE   READINESS GATES
    gpcbackup-agent-0   0/1     ContainerCreating   0          7d17h   [none]   vm-e2b9792a   [none]           [none]
  • Recupera il pod netapp-trident sullo stesso nodo per cui il pod gpcbackup-agent-0 non è riuscito:

    kos get pod -o wide -n netapp-trident

    Ottieni un output simile al seguente esempio:

    netapp-trident-node-linux-6kgv4              2/2     Running   0               12h     10.249.20.12   vm-e2b9792a   [none]           [none]
  • Controlla i log del pod netapp-trident sullo stesso nodo per cui il pod gpcbackup-agent-0 non è riuscito:

    kos logs -n netapp-trident netapp-trident-node-linux-6kgv4 trident-main

    Ottieni un output simile al seguente esempio:

    time="2024-01-25T17:35:29Z" level=error msg="Failed to discover targets" error="process killed after timeout" output= portal="172.20.131.41:3260" requestID=e377490f-5407-44ea-9691-1ee8990f8c3e requestSource=CSI
    time="2024-01-25T17:35:29Z" level=error msg="unable to ensure iSCSI target exists: failed to discover targets: process killed after timeout" err="failed to discover targets: process killed after timeout" iface=default requestID=e377490f-5407-44ea-9691-1ee8990f8c3e requestSource=CSI targetIqn="iqn.1992-08.com.netapp:sn.944e1654ac1c11ee86b0d039ea524d51:vs.26" tp="172.20.131.41:3260"
    time="2024-01-25T17:35:29Z" level=error msg="GRPC error: rpc error: code = Internal desc = failed to stage volume: iSCSI login failed" requestID=e377490f-5407-44ea-9691-1ee8990f8c3e requestSource=CSI

Soluzione temporanea:

Per risolvere il problema, procedi nel seguente modo:

  1. Recupera il nome di InventoryMachine:

    export ROOT_ADMIN_KUBECONFIG=[path to the root admin kubeconfig]
    
    export INV_MACH=vm-e2b9792a
  2. Conferma che il job precedente esista:

    export ORG_ADMIN_KUBECONFIG=[path to the org admin kubeconfig]
    kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG} get job -n gpc-system storage-ipsec-config-"${INV_MACH}"

    Ottieni un output simile al seguente:

    NAME                               COMPLETIONS   DURATION   AGE
    storage-ipsec-config-vm-e2b9792a   1/1           17s        19d
  3. Elimina il job:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} delete storageencryptionconnections -n ${INV_MACH} ${INV_MACH}

    Ottieni un output simile al seguente:

    warning: deleting cluster-scoped resources, not scoped to the provided namespace
    storageencryptionconnection.ontap.netapp.storage.private.gdc.goog "vm-e2b9792a" deleted
  4. Verifica che StorageEncryptionConnection esista:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} get storageencryptionconnections -n ${INV_MACH} ${INV_MACH}

    Ottieni un output simile al seguente:

    NAME          INVENTORYMACHINE   STORAGEVIRTUALMACHINE   STORAGECIDR        PRESHAREDKEY                 READY   AGE
    vm-e2b9792a   vm-e2b9792a        org-1-user              172.20.131.32/27   vm-e2b9792a-pre-shared-key   True    19d
  5. Elimina StorageEncryptionConnection:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} delete storageencryptionconnections -n ${INV_MACH} ${INV_MACH}

    Ottieni un output simile al seguente:

    warning: deleting cluster-scoped resources, not scoped to the provided namespace
    storageencryptionconnection.ontap.netapp.storage.private.gdc.goog "vm-e2b9792a" deleted
  6. Riavvia il pod root-admin-controller:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} rollout restart deploy -n gpc-system root-admin-controller && kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} rollout status deploy -n gpc-system root-admin-controller
  7. Verifica che il nuovo job sia stato ricreato ed eseguito correttamente:

    kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG} get job -n gpc-system storage-ipsec-config-${INV_MACH}

    Ottieni un output simile al seguente:

    NAME                               COMPLETIONS   DURATION   AGE
    storage-ipsec-config-vm-e2b9792a   1/1           19s        95s
Esegui l'upgrade 1.9.10
1.9.11

Il nodo zp-aa-bm08 del cluster di amministrazione principale mostra un errore di provisioning e non può essere completato perché il registro non è integro.

Sintomi:

Un pod del registro Harbor mostra un messaggio di errore simile al seguente:

Warning  FailedMount  6m52s (x718 over 2d14h)  kubelet  Unable to attach or mount volumes: unmounted volumes=[storage], unattached volumes=[registry-config authentication-htpasswd internal-certificates sto │
│ age[]: timed out waiting for the condition

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Controlla la richiesta di volume permanente (PVC) del registro Harbor e annota il nome del volume PVC:

    kubectl get pvc harbor-registry -n harbor-system
  2. Per verificare se l'allegato del volume si trova nello stesso nodo del pod del registro Harbor, elenca i volumeattachment e trova quello associato al nome del volume:

    kubectl get volumeattachment | grep [volume-name]
  3. Se l'allegato del volume si trova in un nodo diverso dal pod del registro Harbor, rimuovi volumeattachment:

    kubectl delete volumeattachment [volumeattachment-name]
  4. Riavvia il pod del registro Harbor.

Ora, il registro Harbor nel cluster di amministrazione principale deve essere integro e l'upgrade dei nodi viene completato correttamente.

Installazione 1.9.2
1.9.3
1.9.4
1.9.5

Un cluster utente non diventa pronto in tempo

Sintomi:

Viene visualizzato il seguente messaggio di errore:

pod "coredns-75bd7c95f7-fd4cr" in namespace "kube-system" is not ready yet.

Un log dei pod contiene quanto segue:

[INFO] plugin/ready: Still waiting on: "kubernetes,kubernetes"

La versione di CoreDNS è 1.8.6.

Soluzione temporanea:

Per risolvere il problema, riavvia il deployment di coredns.

Una volta impostato KUBECONFIG per il cluster corretto, esegui:

kubectl rollout restart deployment coredns -n kube-system

Il nome del cluster di utenti fa parte del messaggio di errore.

Per trovare il file kubeconfig in /root/release/user/, individua i kubeconfig: org-1-system-user-kubeconfig user-vm-1-user-kubeconfig user-vm-2-user-kubeconfig

Se mancano i file kubeconfig, generali come segue:

export KUBECONFIG=/root/release/org-admin/org-1-admin-kubeconfig

kubectl get secrets -n user-vm-1-cluster user-vm-1-kubeconfig -o jsonpath='{.data.value}' | base64 -d > /tmp/user-vm-1-user-kubeconfig
Esegui l'upgrade 1.9.2
1.9.3

Lo stato di OrganizationUpgrade non può essere aggiornato

Sintomi:

Viene visualizzato il seguente messaggio di errore:

Warning  ReconcileBackoff  43m (x9 over 61m)  OrganizationUpgrade  [UPG1402: unable to set AddOn selector labels for root-admin cluster: Operation cannot be fulfilled on clusters.baremetal.cluster.gke.io "root-admin": the object has been modified; please apply your changes to the latest version and try again, UPG9900: unable to update status: OrganizationUpgrade.upgrade.private.gdc.goog "root" is invalid: [status.errorStatus.errors[0]. errorResource.name: Required value, status.errorStatus.errors[0].errorResource.namespace: Required value]]

Questo problema è in genere temporaneo e dovrebbe risolversi.

Installazione 1.9.3

Installazione del componente aggiuntivo non riuscita

L'installazione di un componente aggiuntivo non riesce e viene visualizzato il seguente errore:

Error occurred during addon installation: failed to install chart: release netapp-trident failed, and has been uninstalled due to atomic being set: failed post-install: timed out waiting for the condition.

Soluzione temporanea:

L'installazione del componente aggiuntivo potrebbe non riuscire perché i nodi si trovano nello stato NotReady. Controlla se i nodi sono nello stato NotReady utilizzando:

kubectl get nodes

Visualizza i dettagli del nodo nello stato NotReady:

$ kubectl describe node  | grep PodCIDRs

Per un cluster con questo problema, a un nodo non sono assegnati PodCIDR, ad esempio:

PodCIDRs:                     
For a healthy cluster, all the nodes should have PodCIDRs assigned to it(CIDR shown here is for example purposes only and might vary on the actual cluster based in the Configured ClusterCIDR): eg.
PodCIDRs:                     192.168.6.0/24

Per risolvere il problema, riavvia il deployment di ipam-controller nel cluster interessato:

kubectl --kubeconfig KUBECONFIG_PATH -n kube-system rollout restart ds/ipam-controller-manager
Esegui l'upgrade 1.9.3

L'upgrade di un cluster utente non riesce a chiamare i webhook

Un upgrade non riesce e viene visualizzato il seguente errore:

Rollback "netapp-trident" failed: cannot patch "netapp-trident-csi-cert" with kind Certificate: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": dial tcp 172.20.5.144:443: i/o timeout && cannot patch "netapp-trident-server-cert" with kind Certificate: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded && cannot patch "netapp-trident-client-cert" with kind Certificate: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded && cannot patch "netapp-trident-csi-selfsigned-issuer" with kind Issuer: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded && cannot patch "netapp-trident-csi-issuer" with kind Issuer: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded.

Soluzione temporanea:

Aggiorna manualmente il campo <code.spec.addonsettemplateref< code="" dir="ltr" translate="no"> di AddOnSet abm-overrides con il nome di AddOnSetTemplate della versione desiderata nello stesso spazio dei nomi del cluster in fase di upgrade.</code.spec.addonsettemplateref<>

Installazione 1.9.3

Un controller di amministrazione del parco dispositivi si blocca in un ciclo di arresti anomali con l'errore Fleet admin controller manager stopped: failed to wait for auditloggingtarget caches to sync: timed out waiting for cache to be synced nei log

Sintomi:

  1. Un controller di amministrazione della flotta non diventa pronto perché il test TestCreateFleetAdminCluster o TestSimOverlayCreateFleetAdminCluster non va a buon fine.

  2. Il controller dell'amministratore del parco risorse è bloccato in un loop di arresto anomalo.

  3. Il seguente errore si trova nei log del controller di amministrazione del parco dispositivi: Fleet admin controller manager stopped: failed to wait for auditloggingtarget caches to sync: timed out waiting for cache to be synced.

Soluzione temporanea:

  1. Esegui il deployment della CRD Logmon nel cluster di amministrazione dell'organizzazione.

  2. Riavvia il controller di amministrazione della flotta.

Installazione 1.9.3

Un cluster di sistema non diventa pronto in tempo

Sintomi:

Viene visualizzato il seguente messaggio di errore:

k8s_mt_system_cluster_healthcheck_test.go:147: system cluster did not become ready in time: cluster "org-1-system-cluster/org-1-system" did not become healthy in time: [waitingForClusterHealth] WaitForSuccess gave up [...] unable to retrieve logs for pod "anthos-prometheus-k8s-0" [...] pod "anthos-prometheus-k8s-0" in namespace "obs-system" is not ready yet. [...] Message:containers with unready status: [config-reload prometheus-server] [...]

Soluzione temporanea:

Per risolvere il problema, riavvia sia il deployment che il daemonset nel cluster:

kubectl rollout restart deploy/netapp-trident-csi -n netapp-trident
kubectl rollout restart daemonset/netapp-trident-csi -n netapp-trident

Nota:esegui il seguente comando prima di riavviare il deployment e il daemonset per indirizzare il cluster corretto:

export KUBECONFIG=/root/release/system/org-1-system-kubeconfig
Esegui l'upgrade 1.9.4
1.9.5
1.9.6
1.9.7
1.9.8

Un cluster utente con tre nodi worker n2-standard-4 non dispone di risorse CPU sufficienti per l'upgrade

Sintomi:

Un pod non può essere pianificato a causa di una CPU insufficiente.

Soluzione temporanea:

  1. Per un cluster utente esistente creato con nodi worker n2-standard-4, aggiungi un nuovo NodePool n2-standard-8 con tre nodi a questo cluster prima di eseguire l'upgrade.

  2. Per i nuovi cluster utente, crea un n2-standard-8 NodePool con un minimo di tre nodi. Per maggiori dettagli, vedi Creare un cluster utente per i carichi di lavoro dei container.

Operazioni 1.9.0
1.9.2
1.9.3
1.9.4

L'interfaccia utente consente di selezionare configurazioni di tipo GPU e VM incompatibili

Sintomi:

L'istanza VM PHASE mostra Scheduling e READY rimane False, senza mai raggiungere lo stato True. Questo interessa due tipi di macchine, come elencato per la soluzione alternativa. Gli altri tipi di macchina non sono interessati e non richiedono l'applicazione di una soluzione alternativa.

Soluzione temporanea:

  • Quando crei cluster utente che utilizzano GPU A100 40G, seleziona sempre il tipo di macchina a2-highgpu-1g-gdc dalla UI.
  • Quando crei cluster utente che utilizzano GPU A100 80G, seleziona sempre il tipo di macchina a2-ultragpu-1g-gdc dalla UI.
Operazioni 1.9.0
1.9.2
1.9.3
1.9.4

Le dimensioni della memoria della VM superiori a 32 GB, soggette a un calcolo errato dell'overhead di QEMU, richiedono override delle dimensioni della memoria

Sintomi:

Per i pool di nodi con istanze VM con dimensioni della memoria superiori a 32 GB, l'istanza VM può sembrare in esecuzione, poi arrestarsi e riavviarsi, ripetendo possibilmente questa sequenza. Alla fine, viene generato un errore di esaurimento della memoria OOMKilled e l'istanza non funziona.
Questi sono i tre tipi di VM interessati:

  • n2-highmem-8-gdc: 64 GB di memoria
  • a2-highgpu-1g-gdc: 85 GB di memoria
  • a2-ultragpu-1g-gdc: 170 GB di memoria

Soluzione temporanea:

  1. Verifica il tipo di macchina:
    kubectl --kubeconfig= get gvm vm-8c440bc4 -n gdch-vm-infra
  2. Cerca il tipo di VM in
    spec.compute.virtualMachineTypeName
    nell'output.
  3. Se il tipo di VM è uno dei tre tipi elencati modifica configmap per includere un override della memoria:
    kubectl --kubeconfig=SYSTEM_CLUSTER_KUBECONFIG \
          edit configmap NAME -n NAMESPACE
  4. Aggiungi una sezione memory.guest e resources.overcommitGuestOverhead come mostrato nell'esempio seguente:
          apiVersion: v1
          kind: ConfigMap
          metadata:
             name: vm-8c440bc4
             namespace: gdch-vm-infra
          data:
             virtSpec: |
               template:
             spec:
               domain:
                  ...
                  ...
                  memory:
                    guest: "MEMORY_SIZE"
                  resources:
                    overcommitGuestOverhead: true
                   ...
                   ...
          
  5. In memory modifica guest in modo che abbia i seguenti valori:
    • Per n2-highmem-8-gdc, imposta MEMORY_SIZE 63.6G.
    • Per a2-highgpu-1g-gdc, imposta MEMORY_SIZE 84G.
    • Per a2-ultragpu-1g-gdc, crea MEMORY_SIZE 168G.
  6. Ripeti questa operazione per tutte le VM interessate.
Esegui l'upgrade 1.9.4

Un client SSH non può allocare uno pseudo terminale

Sintomi:

Un job bm-system-* si blocca al passaggio Gathering Facts. Quando tenti di accedere manualmente al server tramite SSH, viene visualizzato PTY allocation request failed on channel 0.

Soluzione temporanea:

Riavvia il server utilizzando uno dei seguenti metodi:

  1. curl -X POST -H "content-type: application/json" -k -u $ILO_USER:$ILO_PWD https://$ILO_IP/redfish/v1/Systems/1/Actions/ComputerSystem.Reset

  2. Interfaccia utente iLO

  3. kubectl --kubeconfig=$ROOT_ADMIN_KUBECONFIG annotate -n gpc-system bmh/$SERVER "reboot.metal3.io"=""

Esegui l'upgrade 1.9.4
1.9.10

L'upgrade del nodo non riesce a eseguire il backup della configurazione IPsec

Sintomi:

Un upgrade non riesce a causa dell'errore del job backup-ipsec-*.

Soluzione temporanea:

Segui questi passaggi:

  1. Trova le chiavi precondivise nello spazio dei nomi gpc-system nel cluster di amministrazione dell'organizzazione. Le chiavi sono denominate <node-name>-pre-shared-key.

    Per ottenere l'hash della chiave dal file YAML pre-shared-key di un nodo funzionante, utilizza kubectl get --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig -n gpc-system secret <not-failed-node-name>-pre-shared-key -o=jsonpath='{.data.pre-shared-key}' | awk '{ print $1 }'.

    Tieni presente che devi ottenere l'hash della chiave da un nodo diverso da quello in cui l'upgrade di IPsec non è riuscito.

  2. Applica l'hash di questa chiave precondivisa al secret della chiave precondivisa del nodo non funzionante in gpc-system nel cluster di amministrazione dell'organizzazione.

  3. Elimina l'oggetto storageencryptionconnection che ha lo stesso nome del nodo non riuscito nel cluster di amministrazione principale.

  4. Elimina il job storage-ipsec-config-<node-name> associato nel cluster di amministrazione dell'organizzazione.

  5. Elimina il job di upgrade backup-ipsec-for-upgrade-<node-name> associato.

Esegui l'upgrade 1.9.4

Clamav runner si rifiuta di arrestare la gestione del segnale SIGTERM

Sintomi:

L'upgrade dei cluster dell'organizzazione richiede molto tempo.

Soluzione temporanea:

Attendi l'arresto naturale di clamav.

Esegui l'upgrade 1.9.5

Il harbor-cert-secret ha una CA diversa dalla CA "lato client"

Sintomi:

Vengono visualizzati diversi certificati:

echo $(kubectl get secret harbor-cert-secret -n istio-system -o jsonpath='{.data.ca\.crt}') | openssl base64 -A -d 
-----BEGIN CERTIFICATE-----
MIIBqjCCAS+gAwIBAgIQSve6hYhac9nZr/u/l/hPzjAKBggqhkjOPQQDAzAWMRQw
EgYDVQQDEwtoYXJib3ItY2VydDAeFw0yMzA3MTcwMzQ3MjhaFw0yODA3MTUwMzQ3
MjhaMBYxFDASBgNVBAMTC2hhcmJvci1jZXJ0MHYwEAYHKoZIzj0CAQYFK4EEACID
YgAEsGCynvjnSNNIdz3PxpEqvogHAITWyB3jJbA6jxQhics5MYuq2biaqLg38Ly1
3mF6CRh9Tzroxg2Wtu339McKTAC/7v61ZsbGXbj3eQiTECJut/a55BekG7FcwVG/
btbAo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
FgQUUh1ZUS9CUIHgQmJZTj8m3MIINS8wCgYIKoZIzj0EAwMDaQAwZgIxALDea5fh
IeafRNzR3pjYRgW++TCYZU3XVSJ04K8eIBy1wz1XRDR5SWFgJ/ejWZGUagIxAIQP
9A42lzd7gyqaAAlRB+TQ0sMJMOOyNl0gFg5ZVyhGdJfsZpv1XrcLcqX3tejydw==
-----END CERTIFICATE-----
echo $(kubectl get secret ca-cert-10.2.2.101.10443  -n anthos-creds -o jsonpath='{.data.ca\.crt}') | openssl base64 -A -d
-----BEGIN CERTIFICATE-----
MIIBazCCARKgAwIBAgIQKkDVSpMZf9CQEHxx7UFPmDAKBggqhkjOPQQDAjAWMRQw
EgYDVQQDEwtoYXJib3ItY2VydDAeFw0yMzA3MTYwOTQzMTlaFw0yNDA3MTUwOTQz
MTlaMBYxFDASBgNVBAMTC2hhcmJvci1jZXJ0MFkwEwYHKoZIzj0CAQYIKoZIzj0D
AQcDQgAEI4hXIh65Zc8sWaPQL9gqz3lrq22A1XJsRrMwl/pk3vZiNLGS3+Tt9tXc
WDP74IbinOxZ1Auw08e3s4sxCahfyqNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1Ud
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFN8ob6e8WeFELnVKPSdtMfyvRP95MAoGCCqG
SM49BAMCA0cAMEQCIF8P5THYBHcOdcn1u7zi+Y4jwDTdLAeaDZbVxUDEK2EaAiBW
zilvR3YvW7h5OdSUsgFkSQ42FcSIoNHWYNSZx16CeQ==
-----END CERTIFICATE-----

Soluzione temporanea:

Nota: ruota il certificato harbor-harbor-https prima di eseguire i passaggi successivi.

Segui questi passaggi:

Nel cluster sono memorizzate copie dei dati del certificato nei secret. Dopo aver ruotato il certificato harbor-harbor-https, devi aggiornare anche le copie del secret.

  1. Recupera l'URL di Artifact Registry.
    export registry_url=$(kubectl get harborcluster/harbor -n harbor-system -o json | jq -r '.spec.externalURL')
  2. Aggiorna le copie del secret del certificato Artifact Registry in ogni spazio dei nomi.

    Recupera tutti gli spazi dei nomi che archiviano una copia del secret del certificato Artifact Registry.

    export ca_cert_secret_name=ca-cert-$(printf \"${registry_url}\" | jq -r 'ltrimstr("https://") | sub(":";".")')
    export ca_cert_secret_namespaces=$(kubectl get secrets -A -o json | jq -j ".items[] | select(.metadata.name == \"${ca_cert_secret_name}\") | .metadata.namespace,\" \"")

    Aggiorna la copia del secret del certificato Artifact Registry in ogni spazio dei nomi.

    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    for namespace in ${ca_cert_secret_namespaces}; do kubectl patch secret/${ca_cert_secret_name} -n $namespace -p "{\"data\":{\"ca.crt\":\"${cert_data}\"}}"; done
  3. Per il cluster root-admin, devi anche aggiornare una correzione denominata copia segreta del certificato chiamata ca-cert-in-cluster-registry nello spazio dei nomi anthos-creds.
    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    kubectl -n anthos-creds patch secret/ca-cert-in-cluster-registry -p "{\"data\":{\"ca.crt\":\"${cert_data}\"}}"
  4. Aggiorna registry-cert memorizzato nello spazio dei nomi kube-system.
    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    kubectl -n kube-system patch secret/registry-cert -p "{\"data\":{\"registry-cert\":\"${cert_data}\"}}"
  5. Se ruoti i certificati per il cluster org-admin, devi anche aggiornare le copie segrete dei certificati esistenti nel cluster root-admin.
    Recupera tutti gli spazi dei nomi che archiviano una copia del secret del certificato Artifact Registry.
    export ca_cert_secret_name=ca-cert-$(printf \"${registry_url}\" | jq -r 'ltrimstr("https://") | sub(":";".")')
    export ca_cert_secret_namespaces=$(kubectl get secrets -A -o json | jq -j ".items[] | select(.metadata.name == \"${ca_cert_secret_name}\") | .metadata.namespace,\" \"")

    Aggiorna la copia del secret del certificato Artifact Registry in ogni spazio dei nomi.

    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    for namespace in ${ca_cert_secret_namespaces}; do kubectl patch secret/${ca_cert_secret_name} -n $namespace -p "{\"data\":{\"ca.crt\":\"${cert_data}\"}}"; done
  6. .
Esegui l'upgrade 1.10.0
1.10.1

L'upgrade di un'organizzazione alla versione 1.10.x dalla versione 1.9.1 o precedente potrebbe impedire l'avvio dei pod kube-apiserver durante un upgrade

Sintomi:

Dopo aver avviato un OrganizationUpgrade, il pod kube-apiserver non è in esecuzione su uno o più nodi.

  1. Identifica il nodo in cui l'upgrade è bloccato:
    kubectl get po -n kube-system -l component=kube-apiserver
          

    L'output ha il seguente aspetto:

    NAME                        READY   STATUS    RESTARTS   AGE
    kube-apiserver-ah-aa-bm01   1/1     Running   0          12h
    kube-apiserver-ah-ab-bm01   1/1     Running   0          11h
    kube-apiserver-ah-ac-bm01   1/1     Error     0          12h
  2. Stabilisci una connessione SSH al nodo appena aggiornato:
    root@ah-ac-bm01:~# crictl ps -a | grep kube-api
         

    Viene visualizzato lo stato del container come Exited:

    f1771b8aad929       bd6ed897ecfe2       17 seconds ago       Exited              kube-apiserver                2                   8ceebaf342eb8       kube-apiserver-ah-ac-bm01
    bd14d51b01c09       d0bac8239ee3a       5 minutes ago        Exited
          
  3. Controlla i log del pod Exited:
    crictl logs f1771b8aad929

    L'output ha il seguente aspetto:

    Error: invalid argument "JobTrackingWithFinalizers=false" for "--feature-gates" flag: cannot set feature gate JobTrackingWithFinalizers to false, feature is locked to true

    Il flag è configurato nel file /etc/kubernetes/manifests/kube-apiserver.yaml:

    root@ah-ac-bm01:~# grep JobTrackingWithFinalizers /etc/kubernetes/manifests/kube-apiserver.yaml
        - --feature-gates=JobTrackingWithFinalizers=false

Soluzione temporanea:

Rimuovi il flag dal file /etc/kubernetes/manifests/kube-apiserver.yaml.

  1. Esegui il backup del file:
    root@ah-ac-bm01:~# cp /etc/kubernetes/manifests/kube-apiserver.yaml ~/kube-apiserver.yaml.bak
           
  2. Rimuovi la linea:
    root@ah-ac-bm01:~# sed -i '/--feature-gates=JobTrackingWithFinalizers=false/d' /etc/kubernetes/manifests/kube-apiserver.yaml
           
  3. Conferma che la linea è stata rimossa:
    root@ah-ac-bm01:~# diff /etc/kubernetes/manifests/kube-apiserver.yaml ~/kube-apiserver.yaml.bak
    35a36
    >     - --feature-gates=JobTrackingWithFinalizers=false
           
  4. Elenca il container kube-apiserver:
    root@ah-ac-bm01:~# crictl ps --name kube-apiserver
           
    kubelet rileva automaticamente la modifica e avvia il pod kube-apiserver:
    CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
    e1344008dfed9       bd6ed897ecfe2       12 hours ago        Running    
  5. Ripeti questi passaggi per tutti i nodi interessati.
Esegui l'upgrade 1.9.2
1.9.3
1.9.3
1.9.4
1.9.5
1.9.6

kube-state-metrics cicli di arresto anomalo del deployment

Sintomi:

Il ciclo di arresti anomali del deployment di kube-state-metrics in un'organizzazione dopo la rotazione dei certificati. Questo problema potrebbe causare una perdita di dati di monitoraggio.

Esegui l'upgrade 1.9.6

Nodo worker non bilanciato dopo l'upgrade

Sintomi:

Dopo l'upgrade, il nodo di lavoro non è bilanciato.

Soluzione temporanea:

Bilancia manualmente il nodo worker:

  • Per un workload pod, elimina i pod nel deployment.
  • Per un carico di lavoro VM, elimina virt-launcher senza modificare l'oggetto GVM del piano di controllo.
Esegui l'upgrade 1.9.6

Il plug-in del dispositivo GPU non si avvia

Quando esegui l'upgrade dalla versione 1.9.5 alla 1.9.6, è possibile che il plug-in del dispositivo GPU non possa essere avviato.

Sintomi:

Potresti visualizzare il seguente errore che blocca la preparazione del runtime della VM e il processo di upgrade:

Failed to initialize NVML: could not load NVML library
      

Soluzione temporanea:

  1. Controlla se nvidia-container-runtime è configurato correttamente sul nodo:
    1. Stabilisci una connessione SSH al nodo che sospetti abbia un problema.
    2. Recupera l'elenco dei pod:
      crictl pods
    3. Esamina i pod:
      crictl inspectp $pod_hash | grep runtimeOption -A1
      Se l'output è simile a questo, il nodo è configurato correttamente. Se l'output non è simile a questo, nvidia-container-runtime non è configurato sul nodo:
      binary_name": "/usr/bin/nvidia-container-runtime"
  2. Se nvidia-container-runtime non è configurato correttamente, riavvia containerd per risolvere il problema:
    systemctl restart containerd
Esegui l'upgrade 1.9.7

NodeUpgrade per l'upgrade del firmware del server si blocca nello stato in process

Quando esegui l'upgrade alla versione 1.9.7, il firmware pool di nodi del cluster di amministrazione principale rimane nello stato in process.

Sintomi:

  • Per la parte NodeUpgrade, consulta la soluzione alternativa Timeout del server degli artefatti:
    • NodeUpgrade è bloccato nello stato in process e la condizione per NodeROMFirmwareUpgradeCompleted nello stato Nodeupgradetask non viene mai completata.
    • L'URL in spec.firmware.firmwarePackages.url nell'oggetto NodeUpgrade potrebbe bloccarsi quando viene connesso, ad esempio:
      curl -k https://10.248.2.71:30938/artifacts/serve/Z2RjaC1ocGUtZmlybXdhcmUvaWxvOmlsbzU= -o /tmp/file.cow2
  • Per la parte Harbor, consulta la soluzione alternativa Server artefatti non autorizzato:
    • Nel log del server degli artefatti potrebbe essere visualizzato un errore relativo all'accesso non autorizzato a un repository: gdch-hpe-firmware/ilo, ad esempio:
      root@bootstrapper:~# kubectl --kubeconfig ${KUBECONFIG} logs -n gpc-system -l name=artifact-registry-services-artifact-server -f
      
      artifact-server I1108 05:20:28.084320       1 artifact_server.go:171] Pulling artifact at path /artifacts/serve/Z2RjaC1ocGUtZmlybXdhcmUvaWxvOmlsbzU=
      artifact-server E1108 05:20:28.159685       1 artifact_server.go:194] Error fetching image 10.249.23.11:10443/gdch-hpe-firmware/ilo:ilo5: GET https://10.249.23.11:10443/v2/gdch-hpe-firmware/ilo/manifests/ilo5: UNAUTHORIZED: unauthorized to access repository: gdch-hpe-firmware/ilo, action: pull: unauthorized to access repository: gdch-hpe-firmware/ilo, action: pull
    • Nel progetto Harbor, gdch-hpe-firmware deve avere Spec.harborProjectConfig.accessLevel come private:
      kubectl get --kubeconfig ${KUBECONFIG} HarborProject -n gpc-system gdch-hpe-firmware -o yaml

Soluzione temporanea:

Networking inferiore 1.9.0 - 1.9.6

Impossibile stabilire le sessioni BGP del cluster di sistema a causa di ClusterIP sovrapposti

Sintomi:

Le sessioni BGP non sono attive nella rete interna di un'organizzazione. Solo uno degli endpoint di peering BGP interni dell'organizzazione viene aggiunto a TORSwitchInternal Objects.

Soluzione temporanea:

Modifica in modo esplicito la subnet utilizzata in {organization-name}-system-bgp-flat-ip-ipv4-apc AddressPoolClaim in modo che non si sovrapponga a nessuna altra risorsa AddressPoolClaim analoga dell'organizzazione.

  1. Esamina i sintomi:
    1. Per ogni cluster di sistemi dell'organizzazione, esegui:
      kubectl get bgpsessions -A --kubeconfig ORG_SYSTEM_KUBECONFIG
    2. Controlla il campo State di ogni oggetto BGPSession per State di NotEstablished. Prendi nota del LocalIP di ogni NotEstablished BGPSession associato per utilizzarlo in un secondo momento.
  2. Determina se "System cluster BGP Sessions cannot be established due to overlapping ClusterIPs" è la causa principale:
    1. Per ogni organizzazione attiva, esegui:
      kubectl get clusterbgppeers -A --kubeconfig ORG_ADMIN_KUBECONFIG_FILE -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,CLUSTERIP:.spec.clusterIP | grep flat-ip
    2. Cerca nel campo ClusterIP (terza colonna) dell'output il valore LocalIPs annotato nel passaggio 1.b. Annota gli LocalIP che corrispondono alle voci della terza colonna dell'output per un utilizzo successivo. Se sono presenti più cluster di amministratori dell'organizzazione distinti, in cui l'output del passaggio 2.a contiene i LocalIP indicati nel passaggio 1.b, procedi al passaggio 3.
  3. Risolvi gli IP sovrapposti utilizzati per i cluster di sistema dell'organizzazione.
    1. Esegui:
      kubectl get subnetclaims -A --kubeconfig ROOT_ADMIN_KUBECONFIG -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,CIDRBLOCK:.status.ipv4SubnetStatus.cidrBlock | grep worker-node
    2. Annota il numero di oggetti SubnetClaim restituiti dalla query nel passaggio 3.a. Deve essere uguale al numero di organizzazioni attive.
    3. Per ogni riga, annota lo spazio dei nomi (colonna 1) e il blocco CIDR (colonna 3). Il blocco CIDR di ogni riga deve essere uguale a quello di tutte le altre righe.
    4. Per ogni organizzazione, esegui i seguenti passaggi:
      1. Vai all'oggetto {organization-name}-system-bgp-flat-ip-ipv4-apc AddressPoolClaim nel cluster di amministrazione dell'organizzazione.
      2. Calcola il Start IP della richiesta del pool di indirizzi dei nodi worker dell'organizzazione. Per farlo, prendi il blocco CIDR dal punto 3.c e il campo Size in AddressPoolClaim dal punto 3.d.i. A partire dal penultimo IP nel blocco CIDR, esegui il conto alla rovescia di Size IP. Questo è il nuovo Start IP per la prima organizzazione (utilizzato nel passaggio 3.d.iii). Per ogni organizzazione aggiuntiva, esegui il conto alla rovescia di Size IP secondi, a partire dal nuovo Start IP dell'organizzazione precedente. Ad esempio:
        CIDR block: 10.0.0.0/24
        
        org-1, org-2, & org-3 AddressPoolClaim Size: 2
        
        - New org-1 startIPAddress: 10.0.0.252
        - New org-2 startIPAddress: 10.0.0.250
        - New org-3 startIPAddress: 10.0.0.248
      3. Nel campo AddressPoolClaim del passaggio 3.c.i, aggiungi il seguente campo nel campo Spec:
        staticIPRanges:
        - startIPAddress: {Start IP from step 3.d.ii}
          size: {Size from step 3.d.ii}
        Utilizza questo comando:
        `kubectl edit addresspoolclaim ADDRESS_POOL_CLAIM_NAME -n ORGANIZATION_NAME-system-cluster --kubeconfig ORGANIZATION_ADMIN_KUBECONFIG
        Il risultato deve essere simile al seguente se utilizzi org-1 del punto 3.d.ii, ad esempio:
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AddressPoolClaim
        metadata:
          name: org-1-system-bgp-flat-ip-ipv4-apc
          namespace: org-1-system-cluster
          ...
        spec:
          category: InternalOverlayNetwork
          ...
          parentReference:
            name: worker-node-network-subnet
            type: SubnetClaim
          size: 2
          staticIPRanges:
          - startIPAddress: 10.0.0.252
            size: 2
        status:
          allocatedIPRanges: ...
          ...
  4. Esegui la pulizia per evitare sessioni BGP non necessarie sull'hardware TORSwitch.
    1. Per elencare tutte le risorse TORSwitchInternal che devono essere aggiornate, esegui:
      kubectl get torswitchinternals --kubeconfig ROOT_ADMIN_KUBECONFIG -A
    2. Per ciascuno dei TORSwitchInternals elencati nell'output del comando precedente, esegui questo comando:
      kubectl edit torswitchinternal TOR_SWITCH_INTERNAL_NAME --kubeconfig ROOT_ADMIN_KUBECONFIG -n gpc-system
    3. Per tutti gli oggetti TORSwitchInternal, rimuovi tutte le voci dall'elenco .spec.ebgpNeighbors che hanno NeighborIP uguali a uno qualsiasi dei LocalIP del passaggio 2.b. Ad esempio, LocalIP di 2.2.2.2 è stato annotato nel passaggio 2.b. Di seguito è riportato un esempio di TORSwitchInternal prima e dopo il passaggio di pulizia.
      Prima della pulizia:
      apiVersion: network.private.gdc.goog/v1alpha1
      kind: TORSwitchInternal
      metadata:
        ...
      spec:
        ...
        ebgpNeighbors:
        - md5SecretReference: {}
          neighborIP: 1.1.1.1
          peerASN: 11111
          updateSource:
            loopbackID: ...
          vrf: ...
        - md5SecretReference: {}
          neighborIP: 2.2.2.2
          peerASN: 11111
          updateSource:
            loopbackID: ...
          vrf: ...
        l2Networks:
        ...
      Dopo la pulizia. Prendi nota della voce ebgpNeighbor rimossa:
      apiVersion: network.private.gdc.goog/v1alpha1
      kind: TORSwitchInternal
      metadata:
        ...
      spec:
        ...
        ebgpNeighbors:
        - md5SecretReference: {}
          neighborIP: 1.1.1.1
          peerASN: 11111
          updateSource:
            loopbackID: ...
          vrf: ...
        l2Networks:
        ...
  5. Esegui la convalida eseguendo il passaggio 1 e verificando che tutti gli BGPSession oggetti States siano tornati a Established. Potrebbero essere necessari circa 10 minuti prima che tutte le modifiche vengano propagate alle configurazioni TORSwitch GDC fisiche.
Esegui l'upgrade 1.9.7 - 1.9.21

L'upgrade del nodo e del sistema operativo non procede

Durante un upgrade, è possibile che l'upgrade del nodo e del sistema operativo non progredisca.

Sintomi:

Potresti vedere un nodo con lo stato Ready, SchedulingDisabled per alcune ore.

kubectl --kubeconfig $ROOT_ADMIN_KUBECONFIG get no
NAME      STATUS                    ROLES           AGE   VERSION
aa-bm01   Ready, SchedulingDisabled  control-plane   52d   v1.27.4-gke.500
ab-bm01   Ready                      control-plane   52d   v1.27.4-gke.500
ac-bm01   Ready                      control-plane   52d   v1.27.4-gke.500
      

Soluzione temporanea:

  1. Segui il runbook PLATAUTH-SSH 0001 per ottenere la chiave SSH per il nodo in questione. Dopo aver eseguito la connessione al nodo con SSH, esegui il seguente comando:
    multipath -ll | grep fail
  2. Procedi al passaggio successivo solo se l'output è simile al seguente:
    size=1.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
    |-+- policy='service-time 0' prio=0 status=enabled
    | |- 7:0:0:7 sdad 65:208 failed faulty running
    | `- 8:0:0:7 sdae 65:224 failed faulty running
    `-+- policy='service-time 0' prio=0 status=enabled
      |- 6:0:0:7 sdac 65:192 failed faulty running
      `- 5:0:0:7 sdab 65:176 failed faulty running
  3. Esegui il comando seguente per risolvere il problema:
    systemctl stop multipathd
    iscsiadm -m session -R
    systemctl start multipathd
Esegui l'upgrade 1.9.8-1.9.21

Lo svuotamento del nodo è bloccato perché il pod è bloccato nello stato di terminazione

Sintomi:

Se l'upgrade di un cluster ABM è bloccato per più di 2 ore, lo svuotamento dei nodi potrebbe essere bloccato.

Soluzione temporanea:

Le seguenti operazioni utilizzano il cluster di amministrazione principale come esempio. ${TARGET_KUBECONFIG} si riferisce al file kubeconfig per il cluster ABM di destinazione il cui svuotamento dei nodi è bloccato, ${KUBECONFIG} si riferisce al file kubeconfig per il cluster che gestisce il cluster ABM di destinazione. Per il cluster di amministrazione principale, entrambi fanno riferimento al file kubeconfig dell'amministratore principale.

Completa i seguenti passaggi per verificare se l'upgrade del cluster ABM è bloccato:

  1. Controlla i nodi bloccati durante lo svuotamento:
    kubectl --kubeconfig=${KUBECONFIG} get cluster -n root root-admin -ojsonpath={.status.controlPlaneNodePoolStatus.nodesDraining}; echo

    Il risultato è simile al seguente:

    {"10.200.0.2": 2}

    Ciò significa che per il nodo "10.200.0.2" vengono svuotati due pod.

  2. Controlla se i pod vengono ancora scaricati dal nodo (indicato come ${NODE_BEING_DRAINED}):
    kubectl --kubeconfig=${KUBECONFIG} get baremetalmachine -n root ${NODE_BEING_DRAINED:?} -ojsonpath='{range .status.bareMetalMachineDrainingStatus.podsYetToDrain[?(@.kind=="Pod")]}{@.namespace}{", "}{@.name}{"\n"}{end}'
  3. Il numero di pod di output deve essere uguale al numero di pod in fase di svuotamento segnalato nel passaggio precedente.

    Per ogni pod yetToDrain elencato nel passaggio 1, controlla lo stato del pod:
    kubectl --kubeconfig=${TARGET_KUBECONFIG} get pods -n ${POD_NAMESPACE} ${POD_NAME} -o wide

    Se il pod è nello stato Running o se è audit-logs-loki-0 o loki-0 nello spazio dei nomi obs-system e non ha alcun evento che segnala unable to unmount volume, elimina esplicitamente il pod con un grace-period.

    kubectl --kubeconfig=${TARGET_KUBECONFIG} delete pods --grace-period=30 -n ${POD_NAMESPACE} ${POD_NAME}

  4. Per tutti gli altri casi in cui un pod è bloccato in fase di scaricamento, esegui il riassegnamento ai servizi di reperibilità.
  5. Verifica che lo svuotamento del nodo sia completato.
  6. Ripeti il passaggio 1 se altri nodi sono bloccati nello svuotamento.
Esegui l'upgrade 1.9.6
1.9.7
1.9.8

La distribuzione degli artefatti non riesce dopo l'allegamento delle firme

Le release 1.9 con artefatti firmati non possono essere distribuite perché il flag Override in DistributionPolicy è impostato su false, il che impedisce la distribuzione quando è presente un artefatto con lo stesso nome nel registro di destinazione.

Sintomi:

Potresti riscontrare i seguenti problemi:

  • L'artefatto con la firma viene eseguito il push. Il log potrebbe avere il seguente aspetto:
    pushing the manifest of artifact library/private-cloud-staging/goharbor/harbor-core:sha256-755d062eb3b310fa7f1dd0505a8047f1fc91864b04fdfc5c6bd173da8ce8b87a.sig
  • Impossibile eseguire il push dell'artefatto. Il log potrebbe avere il seguente aspetto:
    failed to push manifest of artifact library/private-cloud-staging/goharbor/harbor-core:sha256-755d062eb3b310fa7f1dd0505a8047f1fc91864b04fdfc5c6bd173da8ce8b87a.sig
  • L'artefatto 404 non è stato trovato. Il log potrebbe avere il seguente aspetto:
    http status code: 404, body: {"errors":[{"code":"NOT_FOUND","message":"artifact library/private-cloud-staging/goharbor/harbor-core@sha256:755d062eb3b310fa7f1dd0505a8047f1fc91864b04fdfc5c6bd173da8ce8b87a not found"}]}
  • La distribuzione degli artefatti non riesce.

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Aggiorna la risorsa personalizzata (CR) DistributionPolicy per impostare Spec.Override su true.
  2. Attiva di nuovo una replica seguendo il runbook SAR-1005.
  3. Dopo che la nuova esecuzione della replica è andata a buon fine, aggiorna il ManualDistribution CR execution-ids in Annotation con l'ID di esecuzione riuscita.
Modulo di sicurezza hardware (HSM) 1.9.9

Il server segnala che il tenant HSM non è integro

Gli HSM potrebbero segnalare in modo intermittente ServicesNotStarted, il che può impedire ai server bare metal di diventare integri e segnalare il seguente messaggio:

"message": "failed to get master key name"

Sintomi:

Potresti riscontrare i seguenti problemi:

  • Esegui il comando kubectl get server:
    kubectl get server zp-aa-bm08 -n gpc-system -o jsonpath='{.status.conditions}' | jq .

    L'output potrebbe essere simile al seguente:

    "message": "failed to get master key name: HSMTenant gpc-system/root does not have condition \"Ready\"=true"
  • Esegui il comando kubectl get HSM:
    kubectl get hsm -A

    I servizi potrebbero essere bloccati al valore ServicesNotStarted.

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi per riavviare gli HSM bloccati:

  1. Installa lo strumento kstl dal primo HSM eseguendo i seguenti comandi:
    export HSM_NAME=`kubectl get hsm \
      -n gpc-system -o jsonpath={.items[0].metadata.name} | tr -d '"'`
    
    export HSM_MGMT_IP=$(kubectl get hsm $HSM_NAME \
        --namespace gpc-system \
        --output jsonpath="{.spec.managementNetwork.ip}")
    
    
    
    curl --insecure \
      https://$HSM_MGMT_IP/downloads/ksctl_images.zip \
      --output ksctl_images.zip
    
    
    
    mkdir -p ~/bin
    
    unzip ksctl_images.zip -d ~/bin
    
    cp ~/bin/ksctl-linux-amd64 ~/bin/ksctl
    
    export PATH=$PATH:~/bin
    
    mkdir -p $HOME/.ksctl
    
    export ADMIN_SECRET_NAME=`kubectl get secrets -n hsm-system -o json | jq .items[].metadata.name | tr -d '"' | grep "admin" | grep -v "luna-admin" | grep -v "ksadmin"`
    export ADMIN_PW=$(kubectl get secrets $ADMIN_SECRET_NAME -n hsm-system -o jsonpath="{.data.password}" | base64 -d)
    
    
    export ADMIN_SSH_SECRET_NAME=`kubectl get secrets -n hsm-system -o json | jq .items[].metadata.name | tr -d '"' | grep "ssh"`
    kubectl get secret $ADMIN_SSH_SECRET_NAME \
        --namespace=hsm-system \
        --output jsonpath='{.data.ssh-privatekey}' \
        | base64 --decode > $HOME/.ksctl/ssh-privatekey
    chmod 0600 $HOME/.ksctl/ssh-privatekey
    
    
    cat << EOF > $HOME/.ksctl/config.yaml
    KSCTL_URL: https://$HSM_MGMT_IP:443
    KSCTL_USERNAME: admin
    KSCTL_PASSWORD: '$ADMIN_PW'
    KSCTL_NOSSLVERIFY: true
    EOF
  2. Verifica che l'HSM abbia problemi di riavvio. Per ogni HSM bloccato su ServicesNotStarted, recupera $HSM_MGMT_IP e verifica che il servizio non sia disponibile:
    ksctl services status  --url=https://$HSM_MGMT_IP
  3. Metti in pausa tutti gli HSM, i cluster HSM e i tenant HSM:
    kubectl annotate hsm --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused=true
    
    kubectl annotate hsmcluster --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused=true
    
    kubectl annotate hsmtenant --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused=true
  4. Stabilisci una connessione SSH all'HSM con il servizio inattivo:
    ssh -i $HOME/.ksctl/ssh-privatekey ksadmin@$HSM_MGMT_IP
  5. Assicurati di trovarti nell'HSM corretto. Verifica di aver stabilito una connessione SSH con il $HSM_MGMT_IP corretto.
  6. Riavvia il primo HSM dall'interno dell'HSM:
    ksadmin@ciphertrust:~ sudo reboot
  7. Attendi che il primo HSM diventi integro dall'esterno dell'HSM:
    watch -c ksctl services status --url=https://$HSM_MGMT_IP

    Il riavvio degli HSM potrebbe richiedere circa cinque minuti.

  8. Ripeti questi passaggi per gli altri HSM i cui servizi non funzionano.
  9. Riattiva le pause per gli HSM, i cluster HSM e i tenant HSM:
    kubectl annotate hsm --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused-
    
    kubectl annotate hsmcluster --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused-
    
    kubectl annotate hsmtenant --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused-
  10. Verifica che tutto sia riconciliato. Potrebbero essere necessari da 5 a 10 minuti per la riconciliazione degli HSM.
Monitoraggio 1.9.0
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
1.9.7
1.9.8
1.9.9

Gli avvisi alertmanager-servicenow-webhook nei cluster di sistema dell'organizzazione non raggiungono ServiceNow

Sintomi:

Gli avvisi alertmanager-servicenow-webhook non raggiungono ServiceNow nel cluster di sistema dell'organizzazione per le versioni di GDC precedenti alla 1.11.3. I log contengono il messaggio di errore read: connection reset by peer. Questo problema è dovuto a un'etichetta mancante per attivare il traffico in uscita. Se il webhook deve comunicare tra organizzazioni, deve utilizzare NAT in uscita.

Soluzione temporanea:

Devi abilitare il traffico in uscita per alertmanager-servicenow-webhook nei cluster di sistema dell'organizzazione. Per risolvere il problema, segui questi passaggi:

  1. Imposta i prerequisiti richiesti:
    • Installa l'interfaccia a riga di comando (CLI) gcloud.
    • Ottieni i percorsi dei file kubeconfig dei cluster di amministrazione principale e di amministrazione dell'organizzazione. Salva i percorsi rispettivamente nelle variabili di ambiente ROOT_KUBECONFIG e ORG_SYSTEM_KUBECONFIG.
    • Chiedi all'Amministratore sicurezza di concederti il ruolo Amministratore dell'osservabilità (observability-admin) nello spazio dei nomi obs-system per i cluster di amministrazione radice e di amministrazione dell'organizzazione.
  2. Verifica che il problema esista nel tuo ambiente:
    1. Ottieni il deployment di alertmanager-servicenow-webhook:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -n obs-system
    2. Visualizza i log del deployment di alertmanager-servicenow-webhook:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" logs deployment/alertmanager-servicenow-webhook -n obs-system

      Se i log contengono il messaggio di errore read: connection reset by peer, il problema esiste e devi continuare con i passaggi di questa soluzione alternativa.

  3. Aggiungi l'etichetta di uscita:
    1. Recupera il file YAML di deployment alertmanager-servicenow-webhook corrente:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -o yaml \
        -n obs-system > $HOME/alertmanager-servicenow-webhook-existing-deployment.yaml && \
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -o yaml \
        -n obs-system > $HOME/alertmanager-servicenow-webhook-new-deployment.yaml
    2. Aggiungi l'etichetta di uscita al file YAML di deployment alertmanager-servicenow-webhook:
      yq e -i '.spec.template.metadata.labels += {"egress.networking.gke.io/enabled": "true"}' $HOME/alertmanager-servicenow-webhook-new-deployment.yaml
    3. Sostituisci il file YAML di deployment alertmanager-servicenow-webhook con gli aggiornamenti:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" replace -f \
      $HOME/alertmanager-servicenow-webhook-new-deployment.yaml -n obs-system

      Il deployment deve riavviarsi automaticamente.

  4. Verifica che il problema sia stato risolto eseguendo di nuovo i passaggi descritti in Conferma che il problema esiste nel tuo ambiente. Il messaggio di errore dei log non deve essere visualizzato. In caso contrario, esegui l'escalation ai tecnici.

Strategia di rollback:

Se i passaggi della soluzione alternativa non vanno a buon fine o se noti una perdita di metriche, ripristina lo stato originale del file YAML di deployment alertmanager-servicenow-webhook:

kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" replace -f \
$HOME/alertmanager-servicenow-webhook-existing-deployment.yaml -n obs-system
Esegui l'upgrade 1.9.10

Il NodeUpgradeTask per il nodo è rimasto bloccato al passaggio NodeMaintainCompleted per un periodo di tempo più lungo (più di 30 minuti).

Sintomi:

L'upgrade è bloccato al passaggio NodeMaintain.

gpc-system                org-1-admin-control-plane-node-poolphdzg          1                          in-progress                   3h58m
Status:                                                                                                                                                                              Tasks:
Name:          zp-aa-bm06                                                                                                                                                            Task Status:  finished
Name: zp-aa-bm04
Task Status:  finished
Name: zp-aa-bm05
Task Status: in-progress
Upgrade Status: in-progress
Events: none

nodeupgradetask per il pool di nodi in corso mostra:

Status:                                                                                                                                                                              Conditions:                                                                                                                                                                            Last Transition Time:  2023-11-09T18:26:31Z 
     Message:
     Observed Generation:1
     Reason:   Succeeded
     Status: True 
     Type: PreUpgradeValidationCompleted
  Last Transition Time:  2023-11-09T18:26:31Z 
     Message:  
     Observed Generation:1  
     Reason: InProgress
     Status:  False
     Type: NodeMaintainCompleted
  Last Transition Time:  2023-11-09T18:26:31Z
    Message:                                                                                                                                                                         Observed Generation:1
    Reason:  Reconciling
    Status:   Unknown
    Type: Succeeded
│   Data IP:10.249.20.4 bm-5f3d1782
│   Start Time: 2023-11-09T18:26:31Z  Events: none  

Soluzione temporanea:

Segui questi passaggi:

  1. Recupera il nome del deployment di cap-controller-manager.
    kubectl --kubeconfig ${KUBECONFIG} get deployment -n kube-system | grep cap-controller-manager
    cap-controller-manager-1.28.0-gke.435    1/1     1            1           30h
  2. Specifica il nome di cap-controller-manager (ad esempio: cap-controller-manager-1.28.0-gke.435):
    export CAP_DEPLOYMENT_NAME=

  3. Riavvia cap-controller-manager.
    kubectl --kubeconfig ${KUBECONFIG} rollout restart deployment ${CAP_DEPLOYMENT_NAME} -n kube-system
    deployment.apps/cap-controller-manager-1.28.0-gke.435 restarted
Esegui l'upgrade 1.9.10

L'upgrade è bloccato al passaggio di controllo post-volo AdminClusterHealth.

Sintomi:

L'upgrade è bloccato al passaggio di controllo post-volo AdminClusterHealth.

Events:
Type     Reason            Age                   From                 Message 
----     ------            ----                  ----                 -------
Warning  ReconcileBackoff  70s (x33 over 4h16m)  OrganizationUpgrade  admin cluster is not ready for org root

L'oggetto organizzazione mostra:

NAMESPACE         NAME          READY
gpc-system       org-1           True
gpc-system        root           False

Soluzione temporanea:

Segui questi passaggi:

Utilizza il seguente comando per ignorare i controlli preliminari:

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

Esegui l'upgrade 1.9.9

NodeUpgradeTask potrebbe avere la condizione failed to monitor failover registry recreation: failed to monitor job: job not complete

Sintomi:

Il NodeUpgradeTask potrebbe avere la condizione failed to monitor failover registry recreation: failed to monitor job: job not complete che blocca il completamento di un'attività.

Soluzione temporanea:

Per risolvere il problema, riavvia il job:

  1. Elimina il job denominato create-failover-registry-*** con completamento "0/1".
  2. Elimina l'annotazione failover-registry-creation-job-name dall'oggetto Server di cui viene eseguito l'upgrade.

Il controller crea di nuovo automaticamente il job.

Esegui l'upgrade 1.9.20

Il nodo non riesce a eseguire il job backup-ipsec-for-upgrade-bm.

Sintomi:

Il nodo non riesce a eseguire il job backup-ipsec-for-upgrade-bm.

I0512 01:05:55.949814       7 main.go:24] BuildDate: 2023-04-01T15:48:57Z
I0512 01:05:55.949920       7 main.go:25] Version: 1.9.2-gdch.135.dirty
"

Soluzione temporanea:

Elimina il job `backup-ipsec-for-upgrade-bm` e attendi che venga ricreato.

Google Distributed Cloud 1.9.9

La creazione dell'organizzazione potrebbe bloccarsi perché il pool di nodi del control plane non diventa pronto in tempo.

Sintomi:

Un pool di nodi del control plane non è pronto a causa dell'impossibilità di avviare il cluster etcd. Potresti riscontrare il seguente problema:

--- FAIL: TestPlan (27563.26s)
    --- FAIL: TestPlan/TestMTSystemClusterHealth (3445.24s)
        k8s_mt_system_cluster_healthcheck_test.go:149: FATAL FLAKE: TestMTSystemClusterHealth: system cluster did not become ready in time: NodePool org-1-system-cluster/control-plane-node-pool didn't get ready: NodePool "control-plane-node-pool" is not ready
            Error Routing:
            {
              "Name": "NODEPOOL_NOT_READY_ERR",
              "Description": "NodePool is not ready",
              "OwnerTeam": "Cluster Management",
              "OwnerLDAP": "",
              "TrackingBug""
            }
FAIL

Soluzione temporanea:

Per risolvere il problema, segui questi passaggi:

  1. Controlla se la creazione del cluster è bloccata nel job di inizializzazione della macchina.
    L'attività kubeadm join non è riuscita a causa di:
    error execution phase control-plane-join/etcd: error creating local etcd static pod manifest file: etcdserver: re-configuration failed due to not enough started members
    L'attività kubeadm reset non è riuscita a causa di:
    panic: runtime error: invalid memory address or nil pointer dereference
  2. Utilizza SSH per connetterti a un nodo del pannello di controllo funzionante.
  3. Esegui il comando etcdctl per pulire i dati obsoleti.
  4. Controlla l'abbonamento a etcd:
    # etcdctl --key=/etc/kubernetes/pki/etcd/peer.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt member list
    5feb7ac839625038, started, vm-72fed95a, https://10.252.164.11:2380, https://10.252.164.11:2379, false
    99f09f145a74cb15, started, vm-8a5bc966, https://10.252.164.12:2380, https://10.252.164.12:2379, false
    bd1949bcb70e2cb5, unstarted, , https://10.252.164.10:2380, , false
  5. Rimuovi l'abbonamento obsoleto:
    # etcdctl --key=/etc/kubernetes/pki/etcd/peer.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt member remove bd1949bcb70e2cb5
    Member bd1949bcb70e2cb5 removed from cluster  9d70e2a69debf2f
Backup e ripristino delle VM 1.9.0
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
1.9.7
1.9.8
1.9.9
1.9.10
1.9.11

Le impostazioni del webhook VM impediscono agli utenti di avviare le procedure di backup e ripristino delle VM

Sintomi:

Il processo di backup e ripristino della VM non può essere avviato dagli utenti a causa di impostazioni di controllo dell'accesso basato sui ruoli (RBAC) e dello schema improprie nel gestore VM.
I nomi dei piani di backup delle VM non possono contenere più di 63 caratteri. Ad esempio, potresti visualizzare questo messaggio di errore:

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

Soluzione temporanea:

I nomi dei piani di backup delle VM sono una concatenazione del nome VirtualMachineBackupPlanTemplate, del tipo di risorsa (vm o vm-disk) e del nome della risorsa. Questa stringa concatenata deve contenere meno di 63 caratteri.
Per farlo, mantieni brevi i nomi di queste risorse quando le crei. Per informazioni dettagliate sulla creazione di queste risorse, consulta Crea e avvia un'istanza VM e Crea un piano di backup per le VM.

Esegui l'upgrade 1.9.9

L'upgrade del sistema operativo del nodo non riesce a causa di un errore del modello

Sintomi:

Un upgrade non riesce a eseguire il job di backup ipsec con il seguente errore di modello:

 
      "msg": "An unhandled exception occurred while templating '{'changed': True, 'stdout': 'connections {\\n  # A connection id defined for this specific connection\\n  pol_client {\\n    children {\\n      pol_cli

Soluzione temporanea:

Segui questi passaggi:

  1. Accedi al nodo in cui l'attività di upgrade non è riuscita.

  2. Salva swanctl.conf come backup.

  3. Rimuovi la riga con le parentesi graffe nel file /etc/swanctl/swanctl.conf.

  4. Elimina il job backup-ipsec-for-upgrade non riuscito, attendi che venga ricreato e poi il job successivo viene completato correttamente.

  5. Aggiungi di nuovo la riga rimossa nel passaggio 3 a /etc/swanctl/swanctl.conf.

Piattaforma del nodo 1.9.6
1.9.7
1.9.8
1.9.9

Il nodo bare metal dell'amministratore root rifiuta il traffico di rete in entrata dopo un aggiornamento firmware

Quando viene avviato un upgrade del firmware sul cluster di amministrazione principale, dopo che uno dei nodi ha completato l'upgrade, sembra bloccato.

Sintomi:

  • nodeupgradetask è bloccato alla fase NodeResumeCompleted.
  • Il job machine-init non viene completato e il log mostra che kubeadm join non è riuscito.
  • Non puoi stabilire una connessione SSH al nodo utilizzando l'indirizzo IP del piano dati.

Il problema è causato dal nodo aggiornato che non accetta più il traffico di rete in entrata.

Soluzione temporanea:

  1. Controlla i log job/nodeupgradetask non riusciti per annotare gli indirizzi IP e scoprire quale nodo presenta il problema.
  2. Riavvia il pod anetd-client del nodo interessato.
  3. Verifica la connessione SSH sull'IP del piano dati al nodo interessato.

Passaggi facoltativi per ulteriori indagini:

  1. Accedi a un container dell'agente Cilium di uno qualsiasi dei pod anetd funzionanti.
  2. Esegui il comando cilium-bugtool e attendi circa 10 secondi. Lo strumento salva i log nella directory /var/log/network/policy_action.log.
  3. Cerca deny per vedere se il traffico viene negato:
    grep -r "deny" /var/log/network/ to
    Prendi nota dei server a cui viene negato l'accesso, possibilmente i nodi bare metal dell'amministratore root.
Esegui l'upgrade 1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18
1.9.19

L'upgrade non riesce sul componente aggiuntivo atat-webhooks

Sintomi:

  • Un upgrade non riesce sul componente aggiuntivo atat-webhooks.
  • Le etichette dei componenti aggiuntivi ATAT scaduti potrebbero causare errori negli upgrade dell'organizzazione. Ad esempio:
     Invalid value: "TO1234": The current date 2024-05-06 is not within the valid range of this TaskOrder: 2023-12-16 - 2024-04-16.
  • Soluzione temporanea:

    Gli utenti devono aggiornare le etichette dei componenti aggiuntivi ATAT del proprio portfolio. Segui il runbook ATAT-R0003 per risolvere il problema.

Esegui l'upgrade 1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18
1.9.19

L'upgrade del sistema operativo del nodo su Bare Metal dell'organizzazione tenant non riesce

Sintomi:

  • L'upgrade del sistema operativo del nodo su Bare Metal dell'organizzazione tenant non riesce durante l'upgrade dalla versione 1.9.12 alla 1.9.13. Viene visualizzato il seguente messaggio:
     
           Reason:                Succeeded                                                                                                                          
           Status:                True                                                                                                                                
           Type:                  NodeMaintainCompleted                                                                                                              
           Last Transition Time:  2024-05-06T18:25:20Z                                                                                                               
           Message:               the ssh cert rotation job is still in progress                                                                                     
           Observed Generation:   1                                                                                                                                   
           Reason:                ReconcileBackoff                                                                                                                   
           Status:                Unknown                                                                                                                           
           Type:                  Succeeded                                                                                                                         
           Last Transition Time:  2024-05-06T18:27:42Z 
  • SSH generation fails. The following message appears:
      
           "tasks": [                                                                                                                                
                     {                                                                                                                                              
                         "hosts": {                                                                                                                               
                             "10.248.4.72": {                                                                                                                       
                                 "action": "gather_facts",                                                                                                          
                                 "changed": false,                                                                                                                  
                                 "msg": "Failed to connect to the host via ssh: Certificate invalid: name is not a listed principal\r\nHost key verification failed 
     .",                                                                                                                                                            
                                 "unreachable": true                                                                                                                
                             }                                                                                                                                      
                         },                                                                                                                                         
                         "task": {                                                                                                                                  
                             "duration": {                                                                                                                          
                                 "end": "2024-05-06T19:47:11.284055Z",                                                                                              
                                 "start": "2024-05-06T19:47:11.146536Z"                                                                                             
                             },                                                                                                                                     
                             "id": "98f2b32d-e15c-fe27-2225-00000000001c",                                                                                          
                             "name": "Gathering Facts"                                                                                                              
                         }                                                                                                                                          
                     }  ]
  • Soluzione temporanea:

    1. Rimuovi l'annotazione cluster.private.gdc.goog/ssh-trusted-ca-versions nel CR del server dell'amministratore root e dell'amministratore dell'organizzazione.
    2. Elimina i job Ansible non riusciti. I nuovi job vengono creati automaticamente perché l'annotazione cluster.private.gdc.goog/host-key-rotation-in-progress è contrassegnata come true nel CR del server.
    3. Dopo la rotazione, l'annotazione cluster.private.gdc.goog/ssh-trusted-ca-versions viene nuovamente aggiunta al CR del server.
Nodo, Esegui l'upgrade 1.9.*

I pod sulle macchine bare metal potrebbero mostrare lo stato CrashLoopBackOff a causa delle regole cilium eliminate

Sintomi:

Dopo l'upgrade, i pod su alcuni nodi bare metal sono bloccati nello stato CrashLoopBackOff e iptables -L -v -n | grep CILIUM sul nodo restituisce un risultato vuoto.

Soluzione temporanea:

Per risolvere il problema, completa i seguenti passaggi:

  1. Esegui questo comando: crictl pods --name anetd -o json | jq --raw-output '.items[].id' | xargs crictl rmp --force.
  2. Esegui di nuovo iptables -L -v -n | grep CILIUM e verifica che sia presente un output.
Logging 1.9.14
1.9.15

Il pod audit-logs-loki-0 potrebbe mostrare lo stato CrashLoopBackOff a causa di un errore di Loki

Sintomi:

Il pod audit-logs-loki-0 è nello stato CrashLoopBackOff.

Verifica lo stato del pod:

      kubectl --kubeconfig $SYSTEM_KUBECONFIG get pod -n obs-system audit-logs-loki-0
      

dove SYSTEM_KUBECONFIG è il percorso del file kubeconfig.

L'errore Loki viene visualizzato nell'output seguente, dove CrashLoopBackOff è lo stato:

      NAME                READY   STATUS             RESTARTS       AGE
      audit-logs-loki-0   1/2     CrashLoopBackOff   9 (4m6s ago)   25m
      

Soluzione temporanea:

Per risolvere il problema, completa i seguenti passaggi:

  1. Esporta il percorso del file kubeconfig in una variabile di ambiente denominata SYSTEM_KUBECONFIG.
  2. Riduci le dimensioni dell'operatore Logmon:
          kubectl scale deployment -n obs-system logmon-operator --replicas 0
          
  3. Ridimensiona le risorse Loki:
          kubectl scale loki -n obs-system --replicas 0
          kubectl scale statefulset audit-logs-loki -n obs-system --replicas 0
          
  4. Elimina le richieste di volumi permanenti (PVC) audit-logs-loki-storage-audit-logs-loki-0 e loki-storage-loki-0.
  5. Elimina i volumi permanenti (PV) obs-system/loki-storage-loki-0 e obs-system/audit-logs-loki-storage-audit-logs-loki-0.
  6. Fai lo scale up dell'operatore Logmon:
          kubectl scale deployment -n obs-system logmon-operator --replicas 1
          
  7. Segui i passaggi per aggiornare la configurazione di logging dalla versione 1.9.
  8. Verifica che il pod audit-logs-loki-0 sia in esecuzione:
          kubectl --kubeconfig $SYSTEM_KUBECONFIG get pod -n obs-system audit-logs-loki-0
          

    Lo stato Running deve essere visualizzato nell'output come nell'esempio seguente:

          NAME                READY   STATUS    RESTARTS   AGE
          audit-logs-loki-0   2/2     Running   0          15h
          
Infrastructure as Code (IaC) 1.9.16

L'installazione di GitLab non riesce

Sintomi:

L'installazione del componente aggiuntivo Gitlab non riesce durante l'upgrade alla versione 1.9.16. Potresti visualizzare un errore simile a questo:

Error occurred during addon installation: failed to upgrade chart: an error occurred while rolling back the release. original upgr │
│ ade error: timed out waiting for the condition: deployments/gitlab-sidekiq-all-in-1-v2: release gitlab failed: client rate limiter Wait returned an error: ra │
│ te: Wait(n=1) would exceed context deadline

Il pod postgres, ad esempio gpc-system/gitlab-postgresql-0, è in stato di terminazione.

Soluzione temporanea:

  1. Elimina forzatamente il pod postgres bloccato nello stato di terminazione:
    kubectl delete pod POD_NAME --grace-period=0 --force --namespace NAMESPACE 
  2. Assicurati che il pod postgres venga ricreato dopo l'eliminazione.
Gestione di identità e accessi 1.9.19
1.9.20

L'autenticazione non riesce durante l'accesso alla console

Sintomi:

Quando esegui l'upgrade dalla versione 1.9.18 e provi ad accedere alla console GDC, potresti visualizzare il seguente messaggio:

Authentication failed, please contact your system administrator

Soluzione temporanea:

  1. Ottieni la CA richiesta:
    export KUBECONFIG=ORG_ADMIN_KUBECONFIG
    kubectl get secret fakeoidcprovider-https -n istio-system -o jsonpath='{.data.ca\.crt}'
  2. Apri il file di configurazione del client per modificarlo:
    kubectl edit clientconfig -n kube-public default
  3. Individua certificateAuthorityData nella configurazione del client e aggiorna la CA richiesta utilizzando il seguente percorso: spec > authentication > (fake-oidc-provider) > oidc > certificateAuthorityData