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

Categoria Versioni identificate Problema e soluzione alternativa
Backup e ripristino 1.12.1

Il backup del volume non risolve gli endpoint di archiviazione degli oggetti a livello di organizzazione

Il cluster di archiviazione per il backup del volume utilizza il server DNS esterno anziché il forwarder, il che impedisce al backup del volume di risolvere gli endpoint di archiviazione di oggetti a livello di organizzazione. Nella versione 1.12, il traffico di backup richiede nuovi percorsi per ogni organizzazione.

Soluzione temporanea:

I proprietari dell'organizzazione devono aggiornare il cluster di archiviazione per attivare la risoluzione DNS a livello di organizzazione e per creare una route dalle interfacce logiche di replica (LIF) agli endpoint di archiviazione degli oggetti in ogni organizzazione. Copia e incolla i seguenti comandi dal bootstrapper.

  1. Imposta la variabile di ambiente KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Trova il cluster di archiviazione:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Trova il CIDR esterno dell'istanza:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Aggiorna il cluster di archiviazione in modo che utilizzi un forwarder e con una route al CIDR esterno dell'istanza:
    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. Riavvia il controller per assicurarti che la modifica venga implementata:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Backup e ripristino 1.12.1

Il percorso di backup verso le organizzazioni non va a buon fine

Sintomi:

Il recupero del gateway in entrata dell'amministratore dell'organizzazione dai nodi ONTAP non riesce perché non esiste una route dalla subnet di backup ai control plane dell'organizzazione.

Soluzione temporanea:

I proprietari dell'organizzazione devono aggiornare il cluster di archiviazione per attivare la risoluzione DNS a livello di organizzazione e per creare una route dalle interfacce logiche di replica (LIF) agli endpoint di archiviazione degli oggetti in ogni organizzazione. Copia e incolla i seguenti comandi dal bootstrapper.

  1. Imposta la variabile di ambiente KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Trova il cluster di archiviazione:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Trova il CIDR esterno dell'istanza:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Aggiorna il cluster di archiviazione in modo che utilizzi un forwarder e con una route al CIDR esterno dell'istanza:
    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. Riavvia il controller per assicurarti che la modifica venga implementata:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Backup e ripristino 1.12.4

I volumi permanenti di cui è stato eseguito il backup non possono essere eliminati

Sintomi:

Un volume permanente non può essere eliminato se si trova in una relazione SnapMirror.

Soluzione temporanea:

Un'operazione di input/output elimina le relazioni SnapMirror con il volume come destinazione.

  1. Imposta la variabile di ambiente KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Memorizza il nome del PV problematico in una variabile:
    PV_NAME={ PV_NAME }
  3. Recupera il nome del volume interno:
    volume_name=$(kubectl get pv ${PV_NAME?} -o jsonpath='{.spec.csi.volumeAttributes.internalName}')
  4. Accedi a ONTAP seguendo i passaggi descritti nel runbook FILE-A0006.
  5. Elimina le relazioni con questo volume come origine, utilizzando la password raccolta in precedenza:
    ssh ${username?}@${mgmt_ip?} snapmirror delete -source-volume ${volume_name?} -destination-path "*"
    # enter the password collected from the breakglass secret
Backup e ripristino 1.12.0
1.12.1
1.12.2

Il repository di backup è effettivamente integro

Se il repository di backup non presenta alcun tipo di stato di errore, ma viene generato un avviso, la metrica di avviso per il repository potrebbe essere generata per errore. Si tratta di un problema noto della versione 1.12.0, risolto nella versione 1.12.4. La causa di questo problema è che il repository di backup tenta periodicamente di connettersi all'object storage come controllo di integrità e passa a uno stato non integro se la connessione non riesce. Tuttavia, se il repository di backup viene ripristinato, la metrica che indica il suo stato di integrità non tornerà correttamente, facendo sì che l'avviso rimanga bloccato in uno stato di attivazione indefinito. Per risolvere il problema, puoi eliminare e ricreare manualmente il repository di backup per reimpostare la metrica di integrità. Segui i passaggi del runbook BACK-R0003 per ricreare il repository di backup.

Fatturazione 1.12.4

Il sottocomponente bil-storage-system-cluster - Reconciliation error: E0121 non funziona

Sintomi:

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

Il sottocomponente bil-storage-system-cluster non viene riconciliato a causa di job obsoleti. billing-storage-system-init-job-628 e billing-storage-system-init-job-629 rimangono dopo il completamento.

Soluzione temporanea:

Completa i seguenti passaggi:

  1. Esegui backup dei job di fatturazione obsoleti:
    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. Metti in pausa il sottocomponente:
    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. Elimina i job obsoleti.
  4. Riavvia oclcm-backend-controller.
  5. Riattiva il sottocomponente.
Archiviazione a blocchi 1.12.4

I pod Grafana bloccati nello stato Init a causa di errori di montaggio del volume.

Sintomi:

I pod Grafana negli spazi dei nomi anthos-identity-service-obs-system e platform-obs-obs-system sono bloccati nello stato Init a causa di errori di montaggio del volume. Il messaggio di errore nei log di kubelet indica un problema di multi-attach. Il problema deriva da un bug in Trident, che non riesce a identificare e verificare correttamente il dispositivo sottostante per i mapping LUKS, causando un errore di multi-attach.

Soluzione temporanea:

Controlla il PVC per un deletionTimestamp. Se non è presente alcun deletionTimestamp (migrazione dei pod), segui questi passaggi:

  1. Controlla VolumeAttachment per PVC per identificare a cosa è attualmente collegato il volume.
  2. Isola Nodes nel cluster che non corrispondono a questo valore.
  3. Elimina Pod non riuscito. In questo modo, verrà eseguita la migrazione di nuovo a Node originale.

Dopo aver eseguito il controllo, se è presente un deletionTimestamp (eliminazione del volume), segui questi passaggi:

  1. Controlla VolumeAttachment per PVC per identificare a cosa è attualmente collegato il volume.
  2. Su Node, restituisci i contenuti del file di monitoraggio:
    cat /var/lib/trident/tracking/PVC_NAME.json
  3. Verifica che il dispositivo LUKS trovato nel campo devicePath dell'output del file di monitoraggio sia effettivamente chiuso. Questo percorso non deve esistere a questo punto:
    stat DEVICE_PATH
  4. Verifica se il numero di serie è attualmente mappato a un dispositivo multipath.
    1. Copia il valore nel campo iscsiLunSerial del file di monitoraggio.
    2. Converti questo valore nel valore esadecimale previsto:
      echo 'iISCSILUNSERIAL>' | xxd -l 12 -ps
    3. Con questo nuovo valore, verifica se la voce multipath esiste ancora:
      multipath -ll | grep SERIAL_HEX
    4. Se non esiste, elimina il file di monitoraggio.
    5. Se esiste, vedrai un valore esadecimale seriale leggermente più lungo di quello cercato, denominato multipathSerial. Esegui il seguente comando e trova i dispositivi di blocco:
      multipath -ll MULTIPATH_SERIAL
    6. Quindi, esegui i seguenti comandi, con l'ultimo eseguito in modo univoco per ogni dispositivo a blocchi:
                systemctl restart iscsid
                systemctl restart multipathd
                multipath -f MULTIPATH_SERIAL
                echo 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
                  
Gestione dei cluster 1.12.0
1.12.1
1.12.2
1.12.4

Il job machine-init non riesce durante il provisioning del cluster

Sintomi:

  1. Durante il provisioning del cluster, il job machine-init del secondo nodo del control plane non riesce e viene visualizzato il seguente messaggio:
    FAILED! => {"changed": true, "cmd": "/usr/bin/kubeadm join phase control-plane-prepare certs --config /dev/stdin --v 5".
  2. Visualizza i log:
    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"

    L'output mostra un risultato non vuoto.

Soluzione temporanea:

  1. Attiva o disattiva l'autorizzazione di /etc/kubernetes/pki/etcd/ca.crt. Si tratta di un'operazione molto sensibile al tempo. Il cambio di autorizzazione deve avvenire dopo l'esecuzione precedente del job machine-init, ma prima dell'esecuzione successiva del job machine-init, poiché machine-init sovrascrive l'autorizzazione riportandola alla radice.
  2. Riavvia etcd nel secondo nodo per ripristinare etcd nel primo nodo dal ciclo di arresti anomali.

    Dopo aver completato questi due passaggi, l'kube-apiserver nel primo nodo inizia a essere eseguito e il successivo job machine-init ha esito positivo.

Gestione dei cluster 1.12.2

PodCIDR IPv4 obbligatorio non disponibile

Sintomi:

L'agente cilium mostra il seguente avviso:

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

Soluzione temporanea:

  1. Scopri l'indirizzo IP del nodo che vuoi rimuovere.
  2. Rimuovi l'indirizzo IP da spec.nodes nella risorsa personalizzata NodePool.
  3. Attendi che il nodo venga rimosso completamente da NodePool. Se il nodo non viene rimosso, esegui un force-remove:
    1. Aggiungi l'annotazione baremetal.cluster.gke.io/force-remove=true alla risorsa personalizzata Machine:
      kubectl -n org-1-system-cluster annotate machine IP_ADDRESS baremetal.cluster.gke.io/force-remove=true 
  4. Aggiungi di nuovo l'indirizzo IP a spec.nodes nella risorsa personalizzata NodePool.
Logging 1.12.0
1.12.1

I log del server API Kubernetes non vengono inoltrati a una destinazione SIEM

Sintomi:

Dopo aver completato la configurazione dell'esportazione in un sistema SIEM esterno, l'input SIEM non è incluso nella pipeline di elaborazione Fluent Bit e i log del server API Kubernetes non sono presenti in questo SIEM.

Networking 1.12.4

Il job machine-init non riesce durante l'upgrade

Sintomi:

Quando esegui l'upgrade dalla versione 1.12.2 alla 1.12.4, se un nodo viene rimosso e poi aggiunto di nuovo, il processo machine-init per quel nodo potrebbe non riuscire. Questo errore si verifica perché il traffico di rete dal nodo riaggiunto ai servizi essenziali del control plane viene negato dal criterio ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes. Questo errore è evidenziato dai messaggi di stato in questo output di esempio:
      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)

Soluzione temporanea:

Per risolvere il problema, procedi nel seguente modo:

  1. Per il cluster di amministrazione principale:
    1. Recupera i CIDR da CIDRClaim/org-external-cidr -n root (in particolare dal campo .status.ipv4AllocationStatus.allocatedCidrBlocks). Esegui questo comando nel cluster di amministrazione principale:
      ROOTCIDRs=$(ka get cidrclaim/org-external-cidr -n root -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Aggiungi questi CIDR a ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes, in particolare al campo .spec.ingress.fromCIDR. Applica questa modifica nel cluster amministratore principale con il comando:
      ka get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ROOTCIDRs}"'}]' \
        | ka apply -f -
  2. Per il cluster di amministrazione dell'organizzazione:
    1. Recupera i CIDR per l'organizzazione (ad es. org-1) da CIDRClaim/org-external-cidr -n org-1 (in particolare il campo .status.ipv4AllocationStatus.allocatedCidrBlocks). Questo comando viene eseguito sul cluster di amministrazione principale per ottenere i CIDR per "org-1":
      ORGCIDRs=$(ka get cidrclaim/org-external-cidr -n org-1 -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Aggiungi questi CIDR a ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes, in particolare al campo .spec.ingress.fromCIDR. Applica questa modifica nel rispettivo cluster di amministrazione dell'organizzazione con il comando:
      ko get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ORGCIDRs}"'}]' \
        | ko apply -f -

Questa modifica deve essere eseguita una sola volta prima di iniziare l'upgrade.

Networking 1.12.0
1.12.1

Problemi relativi ad aggiornamenti, interruzione e pianificazione di VM e container

Sintomi:

Su un nodo bare metal del cluster di sistema, non è possibile terminare due container anetd. Dopo aver interrotto forzatamente il processo, riavviato kubelet e containerd, il pod anetd viene ricreato, ma tutti i container sono bloccati in podInit e containerd segnala il messaggio di errore:

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

In questo modo, l'interfaccia di rete del container (CNI) non viene avviata e la pianificazione degli altri pod viene interrotta.

Soluzione temporanea:

Esegui queste mitigazioni per evitare questo stato del nodo:

  • Non pianificare più di 10 PVC alla volta su un singolo nodo. Attendi che vengano montati prima di programmarne altri. Questo era più evidente quando si tentava di creare VM.
  • Aggiorna il file /etc/lvm/lvm.conf su ogni nodo in modo che includa la riga: filter = [ "r|/dev/dm.|", "r|/dev/sg.|" ] nel blocco devices{}

Se il nodo entra in uno stato in cui mostra timeout per i collegamenti e i montaggi dei volumi o non è in grado di eliminare un volume, controlla il numero di processi vgs in attesa sul nodo per verificare se il nodo si trova in questo stato particolarmente grave. Il modo più affidabile per correggere un nodo in questo stato è riavviarlo.

Esiste un'altra modalità di errore che potrebbe verificarsi. Questa modalità di errore presenta la seguente firma nel tentativo di montaggio: mount(2) system call failed: No space left on device. Probabilmente è dovuto alla propagazione del montaggio sul nodo. Verifica questa condizione eseguendo cat /proc/mounts | grep devtmpfs | awk '{ print $2 }' | sort -n | uniq -c. Se uno di questi mostra un valore maggiore di uno, elimina il pod che lo utilizza e dovrebbe essere attivato lo smontaggio. Se non riesci, smonta manualmente il percorso. Se il problema persiste, esegui un riavvio.

Networking 1.12.2

GDC non riesce a creare ACL di switch dalle policy di traffico durante il processo di bootstrapping iniziale

In alcuni scenari, a causa di condizioni di competizione, Google Distributed Cloud (GDC) air-gapped non riesce a creare le risorse personalizzate Kubernetes ACL switch necessarie durante il bootstrapping iniziale di Distributed Cloud.

Sintomi:

Elenca i CR ACL dello switch:

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

L'output di questo comando indica che non sono state create ACL di switch di gestione (mgmt-switch-acl).

No resources found in gpc-system namespace.

Soluzione temporanea:

  1. Elenca le CR di Traffic Policy:
    kubectl get trafficpolicies -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

    L'output restituisce due CR Kubernetes di Traffic Policy:

    NAME                          AGE     NAME
    default-traffic-policy-data   4d17h   default-traffic-policy-data
    default-traffic-policy-mgmt   4d17h   default-traffic-policy-mgmt
  2. Modifica la CR Kubernetes della policy di gestione del traffico default-traffic-policy-mgmt:
    kubectl edit trafficpolicies default-traffic-policy-mgmt -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  3. Vai all'ultima regola del criterio in questo file, che potrebbe trovarsi alla fine del file.
  4. Identifica il campo della descrizione dell'ultima regola dei criteri. Il campo potrebbe avere il seguente aspetto:
    Deny All rule for Management Network
  5. Modifica questa descrizione e aggiungi The all'inizio della riga descrittiva:
    The Deny All rule for Management Network
  6. Salva il file ed esci.
  7. Elenca di nuovo i CR ACL di Kubernetes switch:
    kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  8. L'output elenca l'ACL dell'interruttore di gestione (mgmt-switch-acl):
    NAME              AGE   NAME
    mgmt-switch-acl   23h   mgmt-switch-acl
Server fisici 1.12.1
1.12.2

NodePool ha un server in stato sconosciuto durante la creazione

Sintomi:

Quando viene eseguito il provisioning di Server durante la creazione di un cluster, è possibile che il server venga contrassegnato come sottoposto a provisioning, ma manchi la condizione Provision-Ready. Di conseguenza, il NodePool non può utilizzare questo server. Un esempio di messaggio di evento di errore in NodePool potrebbe essere il seguente:

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}
      

Soluzione temporanea:

Reimposta ILO eseguendo il seguente script:

      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 rari casi, la procedura di ripristino di iLO precedente potrebbe non risolvere completamente il problema, quindi è necessario eseguire il nuovo provisioning del server. Per le procedure dettagliate, consulta i runbook OS-P0002 e OS-P0003.

Server fisici 1.12.2

Upgrade del firmware del nodo non riuscito nell'organizzazione tenant

Sintomi:

L'upgrade del nodo bare metal è bloccato nello stato in-progress da più di tre ore.

Soluzione temporanea:

Segui i passaggi nel runbook SERV-R0005.

Networking 1.12.1

Lo script di preinstallazione non riesce su diversi sensori

Sintomi:

Il POAP continua a non funzionare e il log del POAP mostra un messaggio simile a questo:

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

Non riesci a trovare nxos.10.3.1.bin, ma trovi qualcosa di simile come nxos64-cs.10.3.1.F.bin nella directory bootflash dello switch.

Soluzione temporanea:

Sulla macchina bootstrapper, completa i seguenti passaggi. Devi completare questi passaggi durante il processo di preinstallazione. Se sono presenti più cartelle /tmp/preinstall-bootstrap-, applica le modifiche alla cartella corrente utilizzata dal processo di preinstallazione controllando i log del processo di preinstallazione. Se devi riavviare il comando di preinstallazione, questa azione crea anche una nuova cartella /tmp/preinstall-bootstrap-.

  1. Vai alla cartella /tmp/preinstall-bootstrap-RANDOM_NUMBER .
  2. All'interno della cartella, trova il file poap.py.
  3. Rimuovi completamente la riga con il checksum MD5 in questo file in modo che head -n 4 poap.py abbia questo aspetto:
    #!/bin/env python3
    import glob
    import os
    import pkgutil
  4. Nello stesso file, aggiungi le seguenti righe a 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",

    La sezione del file aggiornato sarà simile alla seguente:

    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. Esegui md5sum poap.py per ottenere la somma MD5 e aggiungila di nuovo a poap.py in modo che head -n 4 poap.py abbia questo aspetto:
    #!/bin/env python3
    #md5sum="396bed5a5f579b80da5fac6edf0b590c"
    import glob
    import os
Networking 1.12.1

L'upgrade dalla versione 1.11.x alla 1.12.1 non riesce perché il controller pnet non genera correttamente la risorsa personalizzata (CR) hairpinlink.

Soluzione temporanea:

  1. Dopo l'upgrade, nel cluster di amministrazione principale, modifica il file clusterroles/pnet-core-backend-controllers-role.
  2. Cerca hairpinlinks e aggiungi le autorizzazioni create,update,delete alla risorsa.
  3. Verifica che vengano generati i CR hairpinlinks e hairpinbgpsessions.
Server NTP 1.12.1

Il pod del server di inoltro NTP si arresta in modo anomalo dopo il riavvio

Sintomi:

  • Potresti visualizzare il seguente messaggio quando esegui il comando kubectl get pods:
    ntp-system                      ntp-relay-server-75bbf                                            1/2     CrashLoopBackOff    123 (5m12s ago)   24h
  • Nei log potrebbe essere visualizzato un avviso relativo al probe di attività:
    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

Questo problema potrebbe causare la mancata sincronizzazione dell'ora sui server.

Soluzione temporanea:

  1. Apri il daemonset ntp per la modifica:
    kubectl edit daemonset/ntp-relay-server -n ntp-system
  2. Rimuovi la sezione livenessProbe: fino alla riga timeoutSeconds: 30.
  3. Aggiungi la seguente sezione nel container ntp-image:
    securityContext:
      capabilities:
        add:
        - SYS_TIME
  4. Il risultato è una configurazione simile alla seguente:

    containers:
      - name: ntp-image
      image: "DOCKER_REGISTRY/DOCKER_REPOSITORY/ntp-relay-server:DOCKER_TAG"
      imagePullPolicy: Always
      securityContext:
        capabilities:
          add:
          - SYS_TIME
  5. Apri il criterio NTP del sistema operativo per la modifica:
    kubectl edit ospolicy/bm-ntp-policy -n gpc-system
  6. Rimuovi tutti gli indirizzi IP NTP nella sezione dei criteri. Successivamente, le norme avranno questo aspetto:
    policy:
      installPlaybook:
        extraVars:
          ntp_servers: {}
        name: server-ntp-config
        secrets: {}
          
Server NTP 1.12.1

Arresto anomalo del pod ntp-relay-job-xxxx dopo il riavvio

Sintomi:

Potresti visualizzare il seguente messaggio quando esegui il comando kubectl get pods:

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

Questo problema è causato dalla pulizia impropria del job di upgrade. Non è necessario alcun intervento e il job può essere lasciato nello stato di loop di arresto anomalo.

Server NTP 1.12.2

Il sistema operativo del nodo non è sincronizzato

Sintomi:

Potresti visualizzare il seguente messaggio nei log del cluster di sistema:

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

Questo è un problema per i server che non mantengono l'ora sincronizzata. La configurazione non è applicata correttamente e deve essere modificata in uno spazio dei nomi diverso per essere applicata correttamente.

Soluzione temporanea:

Applica i passaggi seguenti a tutti i cluster:

  1. Elenca le policy del sistema operativo esistenti:
    kubectl get ospolicies -n ntp-system

    L'output mostra admin-ntp-policy o worker-ntp-policy.

  2. In base al nome del criterio, salvalo in un file .yaml:
    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. Modifica il file cambiando metadata.namespace da ntp-system a gpc-system e rimuovendo status: line e tutto ciò che segue.
  4. Applica il file modificato al cluster:
    kubectl apply -f ntp-ospolicy.yaml
  5. Attendi qualche minuto affinché il controller applichi il criterio del sistema operativo.
  6. Stabilisci una connessione SSH a uno dei nodi a cui si applica OSPolicy ed esegui cat /etc/chrony.conf. L'output mostra un messaggio all'inizio del file che indica che è gestito da Ansible e che i server nist.time.gov o ntp.pool sono stati rimossi dalla configurazione.
Backup e ripristino delle VM 1.12.0

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.

Servizio di database 1.12.0

I carichi di lavoro di Database Service operano all'interno del cluster di sistema

Sintomi:

I carichi di lavoro del servizio di database vengono sottoposti a provisioning e configurati in progetti separati nel cluster di sistema Distributed Cloud. Sebbene i progetti vengano utilizzati per applicare i limiti amministrativi in Distributed Cloud, non influiscono su come e dove viene eseguito un workload. Pertanto, questi carichi di lavoro potrebbero condividere l'infrastruttura di calcolo sottostante con altre istanze di database e vari sistemi del control plane.

Soluzione temporanea:

Per i carichi di lavoro del database che richiedono un isolamento aggiuntivo, gli utenti possono richiedere la creazione di un pool di nodi sul cluster di sistema. Questo pool di nodi, a cui è necessario fare riferimento durante la creazione del progetto, garantisce che i carichi di lavoro del database vengano sottoposti a provisioning ed eseguiti su un'infrastruttura di calcolo dedicata. La configurazione del pool di nodi isolato deve essere completata dall'operatore dell'infrastruttura.

Servizio di database 1.12.2

DBCluster AlloyDB Omni bloccato nello stato di riconciliazione

Sintomi:

Per AlloyDB Omni versione 15.2.1, quando vengono creati più cluster AlloyDB Omni sullo stesso nodo, l'ultimo cluster creato rimane bloccato in uno stato di riconciliazione. Recuperare i log di PostgreSQL con il comando

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- cat /obs/diagnostic/postgresql.log 
dovresti vedere che il database non è in grado di avviarsi con stacktrace simili ai seguenti:

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)

Soluzione temporanea:

1. Accedi al pod del database

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- bash 
2. Crea manualmente un file di configurazione in /mnt/disks/pgsql/data/postgresql.conf.d/
echo "enable_lux_wal_writer = off" > /mnt/disks/pgsql/data/postgresql.conf.d/55user.conf
3. Riavvia il database per caricare il file di configurazione
supervisorctl restart postgres
4. Il database viene avviato correttamente con un output simile al seguente:
Chose default config file: /etc/supervisor/supervisord.conf
postgres: ERROR (not running)
postgres: started

Firewall 1.12.0

Firewall bootstrap secret.yaml contains TO-BE-FILLED

Sintomi:

Durante l'implementazione del cliente, il nome utente dell'amministratore del file secret.yaml deve essere admin. Il file contiene invece TO-BE-FILLED dopo la prima creazione. Il nome utente admin deve essere utilizzato per inizializzare la prima configurazione sul firewall e sull'IP loopback admin\admin

Soluzione temporanea:

Verifica che TO-BE-FILLED non sia presente nelle seguenti credenziali firewall:

  • CELL_ID/CELL_ID-secret.yaml
  • CELL_ID-ab-rack/CELL_ID-secret.yaml
  • CELL_ID-ac-rack/CELL_ID-secret.yaml
  • Verifica che tutti gli account amministratore del firewall abbiano il nome utente admin.

    Firewall 1.12.2

    bm-system-machine-init non riesce a connettersi al primo nodo

    Sintomi:

    Le policy firewall IDPS predefinite non supportano gli IP personalizzati dell'organizzazione per l'interconnessione Direct Connect (DX). Di conseguenza, la creazione dell'organizzazione con IP personalizzati non riesce perché gli IP personalizzati non possono connettersi a Harbor nell'amministratore principale.

    Soluzione temporanea:

    Per sbloccare il traffico, crea manualmente un SecurityPolicyRule per gli IP personalizzati dell'organizzazione e implementalo nei firewall IDPS. Segui i passaggi del runbook FW-G0002 per completare i seguenti passaggi:

    1. Crea un SecurityPolicyRule in entrata nel sistema virtuale firewall root per consentire agli IP personalizzati dell'organizzazione di accedere a Harbor root

        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. Crea un SecurityPolicyRule in entrata nel firewall dell'organizzazione vsys per consentire all'utente root di accedere all'API Server dell'organizzazione.

        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. Attiva la sostituzione della configurazione del firewall per eseguire il deployment di SecurityPolicyRules.

    Modulo di sicurezza hardware 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Le licenze di prova HSM disattivate sono ancora rilevabili

    Sintomi:

    A causa di un problema noto esistente in CipherTrust Manager, le licenze di prova disattivate sono ancora rilevabili e potrebbero attivare falsi avvisi di scadenza.

    Soluzione temporanea:

    Consulta HSM-R0003 per verificare le licenze normali attive ed eliminare le licenze di prova disattivate.

    Modulo di sicurezza hardware 1.12.0

    Il modulo di sicurezza hardware funziona in modo imprevisto durante l'eliminazione di un KMS

    Sintomi:

    Il modulo di sicurezza hardware (HSM) si comporta in modo imprevisto durante l'eliminazione di un CTMKey KMS. Ad esempio, il servizio KMS potrebbe non avviarsi per l'organizzazione.

    Soluzione temporanea:

    Gli utenti possono eseguire la distruzione crittografica dei dati eliminando le chiavi KMS anziché la chiave radice KMS, che si manifesta come CTMKey.

    Modulo di sicurezza hardware 1.12.0
    1.12.1
    1.12.2

    Il segreto ruotabile per i moduli di sicurezza hardware è in uno stato sconosciuto

    Sintomi:

    Recupera un elenco di secret ruotabili sconosciuti:

    kubectl get rotatablesecret -A | grep -i unknown

    L'output potrebbe essere simile al seguente:

    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

    Requisiti:

    1. Accesso al cluster di amministrazione principale
    2. Lo strumento jq
    3. Segui IAM-R0004 per generare il file KUBECONFIG per il cluster di amministrazione principale.
    4. Segui IAM-R0005 per ottenere clusterrole/hsm-admin nel cluster di amministrazione principale.

    Soluzione temporanea:

    1. Ottieni un elenco degli indirizzi IP della rete di dati dell'HSM:
      kubectl --kubeconfig ${KUBECONFIG:?} get hsm -A -o json | jq -r '.items[] | "\(.spec.dataNetwork.ip)"'

      L'output potrebbe essere simile al seguente:

      10.89.3.2
      10.89.3.3
      10.89.3.4
    2. Per ciascuno degli indirizzi IP della rete di dati HSM del passaggio precedente:
      1. Esporta l'indirizzo IP in una variabile denominata HSM_DATA_IP:
        export HSM_DATA_IP=HSM_DATA_IP_ADDRESS
      2. Recupera i certificati server web (porta 443), nae (porta 9000) e kmip (porta 5696) ed esamina la validità del certificato:
        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

        L'output potrebbe essere simile al seguente:

        Validity
                    Not Before: Mar 12 20:36:58 2024 GMT
                    Not After : Jun 16 20:36:58 2026 GMT
    3. Segui i passaggi descritti nel runbook HSM T0016 per rinnovare i certificati del server, se la data Not After è entro 30 giorni dalla data odierna.
    Monitoraggio 1.12.0

    I certificati Node Exporter potrebbero non essere pronti durante la creazione di un'organizzazione

    Sintomi:

    I certificati non vengono preparati durante la creazione di un'organizzazione:

    $ 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

    I secret esistono ancora a causa di `SecretForwarder`:

    $ 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

    Soluzione temporanea:

    Metti in pausa Lifecycle Manager in modo che non ricrei ed elimini i certificati:

    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

    Tieni presente che node-exporter non verrà riconciliato sui cluster utente.

    Monitoraggio 1.12.0
    1.12.1
    1.12.2

    La configurazione del webhook ServiceNow comporta la riconciliazione e il ripristino delle modifiche apportate agli oggetti ConfigMap e Secret nello spazio dei nomi mon-system.

    Sintomi:

    La configurazione del webhook ServiceNow comporta la riconciliazione e il ripristino delle modifiche apportate all'oggetto ConfigMap mon-alertmanager-servicenow-webhook-backend e all'oggetto Secret mon-alertmanager-servicenow-webhook-backend nello spazio dei nomi mon-system da parte di Lifecycle Management (LCM).

    Soluzione temporanea:

    Metti in pausa il sottocomponente LCM per consentire l'applicazione delle modifiche senza che vengano ripristinate:

    1. 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_ADMIN_KUBECONFIG e ORG_ADMIN_KUBECONFIG.
    2. Metti in pausa il sottocomponente LCM in uno dei seguenti cluster:
      • Metti in pausa il sottocomponente LCM nel cluster di amministrazione principale:
        kubectl --kubeconfig $ROOT_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n root lcm.private.gdc.goog/paused="true"
      • Metti in pausa il sottocomponente LCM nel cluster di amministrazione dell'organizzazione:
        kubectl --kubeconfig $ORG_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    Monitoraggio 1.12.0

    Le metriche dei cluster utente non vengono raccolte.

    Sintomi:

    Alcune metriche dei cluster di utenti non vengono raccolte. Questo problema riguarda i cluster VM utente, ma non il cluster di sistema.

    • Puoi visualizzare i seguenti log dal server Prometheus:
      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:"
    • Puoi visualizzare i seguenti log dal tenant Cortex:
      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"

    Soluzione temporanea:

    Per risolvere il problema, segui questi passaggi:

    1. Ottieni il percorso del file kubeconfig del cluster. Salva il percorso nella variabile di ambiente KUBECONFIG.
    2. Esegui il deployment di un servizio stub nei cluster VM utente:
            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. Riavvia il deployment del tenant Cortex:
      kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n mon-system cortex-tenant
    Monitoraggio 1.12.0

    Prometheus primario invia le metriche al tenant Cortex oltre i confini del cluster

    Sintomi:

    Le metriche destinate all'istanza Grafana dell'operatore dell'infrastruttura possono trovarsi nell'istanza Grafana dell'amministratore della piattaforma e viceversa. Il problema è causato dalle richieste di bilanciamento del carico ASM tra i limiti del cluster, che hanno tenant predefiniti diversi.

    Soluzione temporanea:

    La soluzione alternativa richiede l'accesso all'origine private-cloud e la possibilità di implementare un aggiornamento dei componenti. Devi modificare la configurazione del mesh per limitare il servizio cortex-tenant alla ricezione del traffico solo dal cluster locale e implementare il componente ASM.

    1. Apri il file manifests/plain/asm/1.19/asm-primary-cluster-operator.yaml.
    2. Introduci il campo serviceSettings nel campo meshConfig.

      Il campo meshConfig inizialmente è simile al seguente esempio:

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

      Pertanto, devi modificare il campo meshConfig in modo che sia simile all'esempio seguente:

              profile: minimal
                revision: 1-19
                meshConfig:
                  serviceSettings:
                    - settings:
                        clusterLocal: true
                      hosts:
                      - 'cortex-tenant.mon-system.svc.cluster.local'
                  localityLbSetting:
                      enabled: false
            
    3. Esegui il deployment del componente ASM nel cluster.
    Esegui l'upgrade 1.12.0

    Upgrade dei nodi non riuscito per NodeOSInPlaceUpgradeCompleted

    Sintomi:

    Durante l'upgrade dalla versione 1.11.0 alla 1.11.3, l'upgrade del nodo non riesce per NodeOSInPlaceUpgradeCompleted.

    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
    } 

    Soluzione temporanea:

    Accedi alla macchina bare metal di cui viene eseguito l'upgrade. Controlla se fstab ha /boot/efi e se la directory è montata:

    # 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 

    Metti in pausa nodeupgradetask

    1. Esegui mount -a e controlla se la directory è montata:
      # mount -a
      root@mb-aa-bm04:~# ls /boot/efi/
      EFI
    2. Procedi con i controlli qui. Esegui questi comandi:
      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. Se non tutti i file sono identici, esegui questo comando sul computer e ripeti i controlli.
      /usr/local/update-efi-files.sh
    4. Riattiva nodeupgradetask
    Esegui l'upgrade 1.12.0

    L'upgrade dello switch non riesce a eseguire il comando install add bootflash://..

    Sintomi:

    L'upgrade dello switch non riesce ad aggiungere bootflash:

    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"   

    Soluzione temporanea:

    Accedi allo switch che non funziona ed esegui il comando di attivazione dell'installazione dallo switch sul pacchetto:

    install activate nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
    Esegui l'upgrade 1.12.1, 1.12.2, 1.12.4

    Durante l'upgrade dalla versione 1.11.x alla 1.12.1, l'upgrade del nodo si blocca con l'MaintenanceModeHealthCheckReadyerrore undrain

    Sintomi:

    L'upgrade del cluster è bloccato da più di un'ora. Lo stato e le specifiche della modalità di manutenzione della macchina bare metal non corrispondono. Ad esempio, il comando:

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

    mostra:

    root        10.252.135.4   false             true

    Il job di controllo preliminare della macchina bare metal mostra il seguente messaggio di errore:

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

    Soluzione temporanea:

    Utilizza questo comando:

    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"
    Sistema operativo del nodo 1.11.3

    Il nodo VM è bloccato al riavvio dopo la soluzione alternativa manuale per il pod os-policy

    Sintomi:

    Un'attività di riavvio della VM non riesce dopo la soluzione alternativa manuale per il pod os-policy. Viene visualizzato il seguente messaggio:

    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

    Soluzione temporanea:

    L'arresto e l'avvio della VM risolvono il problema. Segui le istruzioni riportate in Avviare e arrestare una VM.

    Networking superiore 1.12.0

    Un cluster di VM utente si blocca nello stato ContainerCreating con l'avviso FailedCreatePodSandBox

    Sintomi:

    Un cluster di VM utente si blocca e la descrizione del pod con lo stato ContainerCreating mostra il seguente avviso:

    # 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 

    Soluzione temporanea:

    Segui i passaggi del runbook NET-P0001 per riavviare anetd sul cluster di sistema.

    Registro degli artefatti di sistema 1.12.1

    Harbor crash loops after an ABM upgrade

    Sintomi:

    Quando esegui l'upgrade di un'organizzazione principale dalla versione 1.11.1 alla 1.12.1, l'upgrade potrebbe non riuscire nella fase del componente aggiuntivo con errori di pull di Helm:

    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

    Soluzione temporanea:

    Invia una richiesta di assistenza. Per maggiori dettagli, vedi Richiedere assistenza.

    Esegui l'upgrade 1.12.0

    Diversi pod in un cluster di sistema potrebbero bloccarsi nello stato TaintToleration

    Sintomi:

    Durante un upgrade, il sottocomponente OPA Gatekeeper non viene installato nel cluster di sistema. Tuttavia, i vincoli vengono installati e l'webhook per applicarli viene installato.

    Diversi pod in un cluster di sistema potrebbero bloccarsi nello stato TaintToleration:

    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

    Pod nello stato ImagePullBackOff con l'evento Back-off pulling image "auto"

    Sintomi:

    Il pod con il nome del container istio-proxy non è pronto e ha lo stato ImagePullBackOff con l'evento Back-off pulling image "auto".

    Soluzione temporanea:

    1. Verifica che il webhook mutante istio-revision-tag-default sia presente nel cluster. In caso contrario, attendi circa 10 minuti per vedere se il sistema si ripristina automaticamente. In caso contrario, riassegna il problema.
    2. Se il webhook di modifica è presente, elimina il pod problematico e verifica che venga ripristinato. .spec.containers[].image non deve essere auto, ma deve apparire come un'immagine reale simile alla seguente: gcr.io/gke-release/asm/proxyv2:<image version>.
    Logging 1.12.1

    L'upgrade di ValidatingWebhookConfigurations, MutatingWebhookConfigurations e MonitoringRules di cui è stato eseguito il deployment dal componente Log potrebbe non riuscire

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.1 alla 1.12.1, l'upgrade di ValidatingWebhookConfigurations, MutatingWebhookConfigurations e MonitoringRules implementati dal componente Log potrebbe non riuscire.

    Soluzione temporanea:

    1. Assicurati di avere kubectl e di poter accedere al runbook IAM-R0004 per ottenere KUBECONFIG per il cluster di amministrazione principale.

    2. Elimina ValidatingWebhookConfiguration root-admin-private-logging-validation-webhook dal cluster di amministrazione principale:

      kubectl delete validatingwebhookconfiguration root-admin-private-logging-validation-webhook
    3. Elimina MutatingWebhookConfiguration root-admin-private-logging-defaulter-webhook dal cluster di amministrazione principale:

      kubectl delete mutatingwebhookconfiguration root-admin-private-logging-defaulter-webhook
    4. Elimina ValidatingWebhookConfiguration root-admin-logging-webhook dal cluster di amministrazione principale:

      kubectl delete validatingwebhookconfiguration root-admin-logging-webhook
    5. Elimina MonitoringRule operational-logs-alerts dallo spazio dei nomi infra-obs nel cluster di amministrazione principale:

      kubectl delete monitoringrule operational-logs-alerts -n infra-obs
    6. Elimina 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 e audit-logs-sli-loki-pa-up da infra-obs namespace nel cluster di amministrazione principale:

      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. Verifica che il sottocomponente log-admin sia pronto nel cluster di amministrazione principale:

      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

      In caso di esito positivo, il comando stampa log-audit is ready. In caso contrario, l'output è log-audit is not ready.

    8. Verifica che il sottocomponente log-admin sia pronto nel cluster di amministrazione principale:

      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

      In caso di esito positivo, il comando stampa log-operational is ready. In caso contrario, l'output è log-operational is not ready.

    Logging 1.12.1

    Audit log e log operativi non raccolti

    A causa di un problema nel job log-infra-backend-preinstall, i log di controllo e i log operativi Loki non sono installati e i log non vengono raccolti.

    Sintomi:

    Potresti visualizzare un errore CrashLoopBackoff nel cluster di sistema:

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

    Il pod cortex-ingester mostra lo stato OOMKilled

    Sintomi:

    Potresti visualizzare lo stato OOMKilled per il pod nello spazio dei nomi mon-system:

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

    Soluzione temporanea:

    Aumenta la memoria di ogni ingester, il numero di ingester o entrambi. Puoi farlo eseguendo il deployment di un SubcomponentOverride sul cluster di amministrazione dell'organizzazione, come mostrato nell'esempio seguente:

    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
          
    Esegui l'upgrade 1.12.1

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, un nodo del cluster potrebbe non uscire dalla modalità di manutenzione a causa di un errore del controllo di integrità per registy_mirror

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, l'upgrade del nodo non riesce e viene visualizzato il seguente messaggio di errore:

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

    Soluzione temporanea:

    Utilizza questo comando:

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

    OrganizationUpgrade è bloccato nelle fasi anthosBareMetal, addOn o node con errore di controllo check_registry_mirror_reachability_pass.

    Sintomi:

    1. OrganizationUpgrade è bloccato nelle fasi anthosBareMetal, addOn o node e mostra lo stato Unknown per la condizione Succeeded.

    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. Lo stato di Baremetalmachine mostra check_registry_mirror_reachability_pass errore di controllo.
    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" 
        },

    Soluzione temporanea:

    Utilizza questo comando:

    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"
    Esegui l'upgrade 1.12.1, 1.12.2, 1.12.4

    OrganizationUpgrade è bloccato nelle fasi anthosBareMetal, addOn o node con l'errore di controllo di integrità netutil.

    Sintomi:

    1. OrganizationUpgrade è bloccato nelle fasi anthosBareMetal, addOn o node e mostra lo stato Unknown per la condizione Succeeded.

    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. I controlli di integrità mostrano l'errore netutil mancante.
    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"
      }

    Soluzione temporanea:

    Elimina il job Kubernetes corrispondente al controllo di integrità non riuscito

    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

    Durante l'upgrade dalla versione 1.11.x alla 1.12.x, una VM potrebbe non essere pronta a causa di un numero eccessivo di pod

    Sintomi:

    Durante l'upgrade dalla versione 1.11.x alla 1.12.x, una VM potrebbe non essere pronta a causa di un numero eccessivo di pod, il che blocca lo svuotamento di un nodo bare metal.

    Soluzione temporanea:

    Riavvia la VM.

    Server fisici 1.12.1

    NodeUpgrade contiene più versioni dello stesso modello hardware, bloccando la verifica dell'upgrade del firmware

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, NodeUpgrade contiene più versioni per lo stesso modello hardware, bloccando la verifica dell'upgrade del firmware.

    Soluzione temporanea:

    Segui questi passaggi per modificare il NodeUpgrade CR spec:

    1. Se l'upgrade riguarda i server HPE Gen10 (GDC-4D), rimuovi il firmware del modello ilo6. In caso contrario, rimuovi il firmware del modello ilo5.
    2. Sezione per conservare la voce con il redfishVersion più recente per ogni descrizione.
      Ad esempio, se esistono entrambe le seguenti voci, mantieni solo quella con 2.98 Oct 10 2023:
      - description: SystemBMC
              model: ilo5
              redfishVersion: 2.98 Oct 10 2023
            - description: SystemBMC
              model: ilo5
              redfishVersion: 2.95 Jul 19 2023
    Server fisici 1.12.1

    I server sono bloccati nello stato di provisioning

    Sintomi:

    Ironic ha raggiunto il timeout durante l'attesa dell'accensione di un server. Lo stato cambia da cleaning a clean failed a 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

    Per determinare se l'opzione è attiva:

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

    Se l'interruttore è attivo, l'output restituisce "On".

    Soluzione temporanea:

    Rimuovi il blocco image dai server problematici e attendi che i server tornino allo stato disponibile. Una volta disponibili, aggiungi di nuovo il blocco image.

    Server fisici 1.12.2

    Avvio del server non riuscito

    Sintomi:

    Potresti visualizzare un messaggio di debug simile al seguente:

    [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

    Questo problema si verifica quando gli errori iLO vengono ignorati e la risposta HTTP viene letta anziché restituita immediatamente, il che comporta un dereferenziazione del puntatore nullo.

    Registro degli artefatti di sistema 1.12.1

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, lo stato del cluster Harbor potrebbe essere unhealthy

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.1 alla 1.12.1, lo stato del cluster Harbor potrebbe diventare unhealthy con il seguente errore:

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

    Passaggi per la diagnosi:

    1. Controlla lo stato di 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. Se non è integro, controlla lo stato dei componenti di Harbor:

      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. Se harbor-core e pg-harbor-db non sono pronti, controlla lo stato di 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. Se harbor-db è in modalità InProgress, controlla se un nodo root-admin-control-plane è in modalità UNDERMAINTENANCE.

      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

      Durante un upgrade, i nodi dovrebbero essere in modalità di manutenzione. Se un nodo è in manutenzione, potresti non avere risorse sufficienti per pianificare harbor-db.

    Soluzione temporanea:

    Per risolvere il problema, segui questi passaggi:

    1. Imposta KUBECONFIG

      :
      export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    2. Riduzione dei controller dei database:

      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. Imposta il nome della classe di priorità su system-cluster-critical o system-node-critical nel modello di pod:

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

      kubectl delete pods -n harbor-system pg-harbor-db-0
    5. Dopo aver verificato che harborcluster sia integro, esegui lo scale up dei controller dbs:

            kubectl scale --replicas=1 deployment -n dbs-fleet-system fleet-controller-manager
            kubectl scale --replicas=1 deployment -n dbs-postgres-system pg-controller-manager
    Registro degli artefatti di sistema 1.12.2

    Pod del servizio di job non pronto

    Sintomi:

    Il pod del servizio di job ha difficoltà a essere pronto:

    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)

    Soluzione temporanea:

    1. Riavvia il pod del servizio di job.
      kubectl delete pod POD_NAME -n NAMESPACE

      L'output ha il seguente aspetto:

      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. Sul bootstrapper, recupera lo stato dell'organizzazione:
      kubectl get org -A

      L'output potrebbe essere simile al seguente:

      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
    Monitoraggio 1.12.1

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, l'eliminazione del bucket Cortex potrebbe non riuscire

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.1 alla 1.12.1, l'eliminazione del bucket Cortex potrebbe non riuscire e viene visualizzato il seguente errore:

            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

    Soluzione temporanea:

    Segui questi passaggi per eliminare forzatamente i bucket:

    1. Completa i passaggi dell'attività di routine MON-R0017 per accedere alla UI di StorageGRID.
    2. Vai ai bucket nell'interfaccia utente.
    3. Fai clic sul pulsante Elimina oggetti nel bucket per eliminare i dati.
    Monitoraggio 1.12.0
    1.12.1
    1.12.2

    La classe di archiviazione delle metriche è definita in modo errato nella configurazione

    Sintomi:

    L'oggetto Prometheus StatefulSet è configurato in modo errato con la classe di archiviazione standard anziché standard-rwo. Questo problema causa l'avvio dell'oggetto StatefulSet di Anthos Prometheus dal componente di monitoraggio.

    Il problema si verifica perché il riconciliatore ObservabilityPipeline imposta questo valore solo alla prima installazione e il riconciliatore ObsProjectInfra monitora le risorse personalizzate del cluster.

    Soluzione temporanea:

    Riavvia il deployment di fleet-admin-controller nel cluster di amministrazione dell'organizzazione per risolvere il problema.

    Monitoraggio 1.12.2

    Il sottocomponente mon-common non esegue il deployment di Istio Telemetry

    Sintomi:

    Il sottocomponente mon-common deve eseguire il deployment di un oggetto Istio Telemetry nel cluster di amministrazione dell'organizzazione per impedire il logging di controllo di tutte le richieste per Cortex. Tuttavia, il file manifest non è incluso nel file di build.

    Soluzione temporanea:

    Segui questi passaggi per eseguire il deployment dell'oggetto Istio Telemetry nel cluster di amministrazione dell'organizzazione:

    1. Crea un file YAML che definisca la risorsa personalizzata (CR) Istio Telemetry nello spazio dei nomi mon-system del cluster di amministrazione dell'organizzazione:

      # 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. Applica il file manifest al cluster di amministrazione dell'organizzazione nello spazio dei nomi mon-system:

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

    Il ConfigMap mon-prober-backend-prometheus-config viene reimpostato

    Sintomi:

    • L'avviso MON-A0001 è attivato.
    • L'oggetto ConfigMap mon-prober-backend-prometheus-config viene reimpostato in modo da non includere job di probe, ad esempio:
            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
            

    Soluzione temporanea:

    Per risolvere il problema, procedi nel seguente modo:

    1. Imposta le seguenti variabili di ambiente:
      • KUBECONFIG: il percorso del file kubeconfig nel cluster.
      • TARGET_CLUSTER: il nome del cluster in cui stai risolvendo il problema.
    2. Metti in pausa il sottocomponente mon-prober su tutti i cluster:
            kubectl --kubeconfig $KUBECONFIG annotate subcomponent mon-prober -n $TARGET_CLUSTER lcm.private.gdc.goog/paused=true
            

      Ad esempio:

            kubectl --kubeconfig ~/root-admin-kubeconfig annotate subcomponent mon-prober -n my-org lcm.private.gdc.goog/paused=true
            
    3. Riavvia il controller amministratore MON su ogni cluster di amministrazione:
            kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n obs-system mon-admin-backend-controller
            

      ConfigMap Prober viene compilato man mano che ogni probe viene registrato.

    4. Segui il runbook MON-R2009 per disattivare l'avviso MON-A0001, Blackbox monitoring metrics pipeline down, perché questo avviso continuerà a essere attivato.
    Piattaforma del nodo 1.12.1

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.x, un pod di download dell'immagine di commutazione potrebbe bloccarsi nello stato ErrImagePull

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.x, un pod di download dell'immagine dello switch potrebbe bloccarsi nello stato ErrImagePull con il seguente avviso:

     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"

    Soluzione temporanea:

    Per risolvere il problema, tagga nuovamente l'immagine pnet-core-switch-image-downloader con switch-image-downloader.

    Piattaforma del nodo 1.12.1

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, il firewall dell'host blocca il download dell'immagine dell'interruttore

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.11.x alla 1.12.1, il firewall host blocca il download dell'immagine dello switch a causa di una mancata corrispondenza delle interfacce utilizzate dal firewall host.

    Soluzione temporanea:

    Applica la seguente soluzione alternativa prima di eseguire l'upgrade, solo se esegui l'upgrade dalla versione 1.11.x alla versione 1.12.x.

    1. Aggiorna i cluster di amministrazione root e di amministrazione dell'organizzazione.
      1. Recupera il nome e lo spazio dei nomi del pool di nodi per i nodi bare metal dell'amministratore root e i nodi bare metal dell'amministratore dell'organizzazione. Per il cluster root-admin, utilizza il file kubeconfig root-admin. Il seguente comando elenca un inventario delle macchine e filtra l'elenco in base alle macchine bare metal:
        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
        L'output mostra il nome e lo spazio dei nomi del pool di nodi:
        admin-control-plane-node-pool,org-1
        root-admin-control-plane,root

        I valori nell'output corrispondono a quanto segue:

        • 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. Crea i seguenti oggetti nel cluster root-admin e org-admin per rinominare eth0 in mgmt0 sui nodi:

        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. I campi NODEPOOL_NAME e NODEPOOL_NAMESPACE vengono compilati con l'elenco di tutti i nodepool nel rispettivo cluster quando viene eseguito il deployment del file YAML precedente.

        Un esempio di file YAML per il cluster amministratore root con i nomi effettivi del pool di nodi amministratore root e del pool di nodi amministratore dell'organizzazione potrebbe essere simile al seguente:

        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. Applica il file YAML al cluster di amministrazione principale:
        kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    2. Aggiorna il cluster di sistema:
      1. Ottieni un inventario delle macchine e filtra l'elenco in base alle macchine bare metal:
        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
        L'output è simile al seguente:
        worker-node-pool-o1-highgpu1-48-gdc-metal,org-1-system-cluster

        I valori nell'output corrispondono a quanto segue:

        • SYSTEM_CLUSTER_NODEPOOL_NAME: worker-node-pool-o1-highgpu1-48-gdc-metal
        • SYSTEM_CLUSTER_NODEPOOL_NAMESPACE: org-1-system-cluster
      2. I campi NODEPOOL_NAME e NODEPOOL_NAMESPACE vengono compilati dall'elenco dell'output del comando precedente.

      3. Crea i seguenti oggetti nel cluster di sistema per rinominare eth0 in mgmt0 sui nodi e aggiorna il criterio del sistema operativo:
        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

        Un file YAML di esempio per il cluster di sistema con i nomi effettivi dei nodepool potrebbe avere il seguente aspetto:

        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. Applica il file YAML al cluster di amministrazione dell'organizzazione:
        kubectl --kubeconfig=ORG_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    Networking inferiore 1.12.2

    Gli switch di rete precaricati con una versione precedente alla 9.3.10 potrebbero non riuscire a eseguire il bootstrap

    Sintomi:

    Gli switch di rete precaricati con una versione precedente alla 9.3.10 non riescono a eseguire il bootstrap perché la versione prevista dello switch è 10.3(4a).

    Soluzione temporanea:

    Esegui l'upgrade manuale del firmware dello switch dalla versione 9.3.5 alla 9.3.10 e poi dalla 9.3.10 alla 10.3.4a.

    Networking inferiore 1.12.2

    Alcune connessioni al nodo org-admin scadono

    Sintomi:

    Le connessioni vengono interrotte sullo switch perché gli switch non hanno la configurazione più recente a causa della scadenza dei certificati sullo switch.

    Soluzione temporanea:

    1. Ruota i certificati sullo switch.
    2. Attiva i nuovi certificati:
      1. nxapi certificate httpskey keyfile bootflash:api-private-key.pem
      2. nxapi certificate httpscrt certfile bootflash:api-certificate.pem
      3. nxapi certificate enable
    Archiviazione di file e blocchi 1.12.1
    1.12.2
    1.12.4

    Quando esegui l'upgrade dalla versione 1.11.1 alla 1.12.1, 1.12.2 o 1.12.4, l'implementazione del componente secondario file-netapp-trident potrebbe non riuscire

    Sintomi:

    Il sottocomponente Linux Unified Key Setup (LUKS) non viene ridistribuito durante l'upgrade. Per controllare il sottocomponente file-netapp-trident:

    1. Imposta alias:
      alias ka='kubectl --kubeconfig=/path/to/root-admin/root-admin-kubeconfig' 
      alias ko='kubectl --kubeconfig=/path/to/org-admin/org-admin-kubeconfig'
    2. Ottieni il sottocomponente:
      ka get subcomponent -n root file-netapp-trident -o yaml
      ko get subcomponent -n root file-netapp-trident -o yaml

    L'output potrebbe essere simile al seguente:

    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 questo esempio, due classi di archiviazione non sono riuscite: standard-rwo e standard-block.

    Soluzione temporanea:

    1. Elimina StorageClasses che il job non è riuscito a creare, come standard-rwo, standard-block, standard-rwo-non-luks e standard-block-non-luks.
    2. Attiva la ricreazione di StorageClasses riavviando oclcm-backend-controller per il tuo cluster (controller root-admin per i cluster root e di amministrazione dell'organizzazione, controller org-admin per i cluster di sistema e utente).
    3. Per la versione 1.12.4, verifica che le classi di archiviazione installate abbiano l'annotazione disk.gdc.goog/luks-encrypted: impostata su true (escluse le classi di archiviazione non LUKS). Se l'annotazione non è impostata su true, ripeti i passaggi 1 e 2.
    4. Riavvia il deployment di netapp-trident e netapp-trident DaemonSet nel cluster.
    5. Verifica che il secret LUKS sia stato creato per le risorse PersistentVolumeClaim (PVC). Ogni PVC deve avere un secret nel formato g-luks-$pvc_name.
    6. Verifica che il sottocomponente file-netapp-trident non presenti errori nello stato.
    Archiviazione di oggetti 1.12.2

    I bucket di archiviazione oggetti potrebbero non essere pronti dopo l'upgrade dell'organizzazione principale

    Sintomi:

    Dopo l'upgrade dell'organizzazione principale dalla versione 1.12.1 alla 1.12.x, la convalida post-upgrade non va a buon fine e viene visualizzato il seguente errore:

    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
          

    Soluzione temporanea:

    Aggiungi manualmente il finalizzatore prima di avviare l'upgrade.

    Gestione dei cluster 1.12.1, 1.12.2

    I cluster utente con Kubernetes versione 1.27.x potrebbero avere node pool che non vengono inizializzati

    Sintomi:

    I node pool all'interno dei cluster utente che eseguono Kubernetes versione 1.27.x potrebbero non inizializzarsi, impedendo al cluster utente di gestire i carichi di lavoro dei container.

    Soluzione temporanea:

    Non creare un cluster utente con Kubernetes 1.27.x.

    Macchine virtuali 1.12.0

    La traduzione delle immagini non riesce a recuperare i pacchetti quando l'immagine di origine ha valori predefiniti

    Sintomi:

    L'importazione dell'immagine della VM non riesce al passaggio di conversione dell'immagine se un'immagine di origine Ubuntu contiene origini APT predefinite in sources.list.

    Soluzione temporanea:

    Assicurati che la directory /var/lib/apt/lists/ sia vuota nell'immagine di origine.

    Macchine virtuali 1.12.2

    I pod dell'importatore non funzionano o sono bloccati

    Sintomi:

    Ottieni un elenco di pod di importazione:

    kubectl get pods -A | grep import 

    L'output potrebbe essere simile al seguente:

    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

    Il log potrebbe mostrare un evento simile al seguente:

    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

    Soluzione temporanea:

    1. Ottieni il nome PersistentVolumeClaim (PVC) dal messaggio di errore, ad esempio pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405.
    2. Cerca il PersistentVolume (PV) con questo nome e prendi nota di spec.csi.volumeAttributes.internalName da utilizzare in un secondo momento.
    3. Stabilisci una connessione SSH al cluster di archiviazione seguendo i passaggi nel runbook FILE-A0006.
    4. Mostra il volume e prendi nota del nome del vserver restituito dal comando:
      volume show -volume INTERNAL_NAME
    5. Disattiva il volume offline:
      volume offline -volume INTERNAL_NAME -vserver VSERVER_NAME
    6. Elimina il volume:
      volume delete -volume INTERNAL_NAME -vserver VSERVER_NAME
    Macchine virtuali 1.12.1
    1.12.2

    VMRuntime potrebbe non essere pronto a causa dell'errore di installazione di network-controller-manager

    Sintomi:

    VMRuntime sul cluster di destinazione (potrebbe essere il cluster di amministrazione o di sistema) ha lo stato VMRuntime.ready = false e network-controller-manager nello spazio dei nomi kube-system è in attesa

    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
          

    Soluzione temporanea:

    L'eliminazione del deployment network-controller-manager dovrebbe ricrearlo automaticamente con i certificati richiesti dall'operatore VMM. Il deployment dovrebbe passare allo stato Running e successivamente lo stato di VMRuntime dovrebbe cambiare in ready=true.

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

    Tempo di provisioning lungo per i dischi delle macchine virtuali

    Sintomi:

    Il ciclo di arresti anomali dei pod di VM Importer e il volume di dati rimane bloccato nello stato di importazione per più di 90 minuti. Lo stato dei pod potrebbe avere il seguente aspetto:

    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>

    Tutte le importazioni del disco vengono completate entro tre ore.

    Esegui l'upgrade 1.12.2

    Quando esegui l'upgrade dalla versione 1.11.1 alla 1.12.2, la riconciliazione del componente secondario unet-nodenetworkpolicy-infra non va a buon fine

    Sintomi:

    Il messaggio di errore potrebbe avere il seguente aspetto:

         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

    Soluzione temporanea:

    1. Se l'errore si verifica nella radice, nei passaggi successivi sostituisci KUBECONFIG con il file kubeconfig dell'amministratore root.
    2. Se l'errore si verifica nell'organizzazione, nei passaggi successivi sostituisci KUBECONFIG con il file kubeconfig dell'amministratore dell'organizzazione.
    3. Esegui questo comando:
               alias k="kubectl --kubeconfig=KUBECONFIG"
               k get networks mgmt-network -o json | jq '.spec.nodeInterfaceMatcher.interfaceName'
    4. Se l'output è eth0, esegui:
      k patch network mgmt-network -p '{"metadata":{"finalizers":null}}' --type=merge
    5. Elimina mgmt-network.
      k delete network mgmt-network
    6. Verifica che lo stato di unet-nodenetworkpolicy-infra non presenti errori.

      Ad esempio:

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

      L'output è simile al seguente:

               NAME                           AGE   STATUS
               unet-nodenetworkpolicy-infra   34d   ReconciliationCompleted

    Upgrade 1.12.2

    Il cluster di sistema non riesce durante l'upgrade dalla versione 1.11.x alla 1.12.2

    Sintomi:

    Durante o dopo l'upgrade dalla versione 1.11.x alla 1.12.2, i job con il nome bm-system-add-ons-* potrebbero non riuscire e generare il seguente errore:

       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.

    Soluzione temporanea:

    Applica le seguenti annotazioni a tutti i cluster Kubernetes prima di iniziare un upgrade dalla versione 1.11 alla 1.12.2.

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

    Ad esempio, nel cluster di amministrazione principale utilizza:

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

    Esegui l'upgrade 1.12.2

    Il sottocomponente file-observability non funziona su org-1-system-cluster

    Sintomi:

    Questo problema si verifica durante l'aggiornamento dalla versione 1.11.1 alla 1.12.2.

    Esamina il file .yaml per il sottocomponente file-observability :

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

    Il file potrebbe contenere il seguente messaggio nella sezione 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'

    Soluzione temporanea:

    1. Controlla lo spazio dei nomi file-system per verificare che non termini con org-admin cluster:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG get namespace file-system
    2. Se è in fase di terminazione, elimina tutti i target di monitoraggio nello spazio dei nomi file-system:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG delete monitoringtarget -n file-system --all
    3. Metti in pausa il sottocomponente file-observability finché il sottocomponente mon-admin non è attivo aggiungendo le seguenti annotazioni al sottocomponente:
      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. Rimuovi l'annotazione per mettere in pausa il sottocomponente al termine dell'upgrade:
      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-
    Esegui l'upgrade 1.12.2

    HSMupgrade non riesce perché hsmcluster non è pronto

    Sintomi:

    Questo problema si verifica durante l'aggiornamento dalla versione 1.11.1 alla 1.12.2.

    Una volta completati tutti i passaggi di upgrade per hsmupgraderequest e ctmclusterupgraderequest, viene visualizzato il seguente errore:

    HSMCluster "hsmcluster" is not ready. 

    Ad esempio:

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

    Soluzione temporanea:

    1. Verifica che l'upgrade sia completato sull'HSM e recupera l'indirizzo IP di ogni HSM:
      kubectl get hsm -A --kubeconfig=ROOT_ADMIN_KUBECONFIG

      L'output ha il seguente aspetto:

      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. Scarica e configura ksctl.
    3. Esegui ksctl system info get --url=https://HSM_MANAGEMENT_IP per verificare che tutte le versioni di HSM siano state aggiornate alla versione .Spec.TargetVersion di ctmclusterupgraderequest:

      L'output ha il seguente aspetto:

            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. Aggiorna il campo Status.FirmwareVersion di ogni HSM alla versione di cui è stato eseguito l'upgrade ottenuta nel passaggio precedente:

      Ad esempio:

          kubectl edit-status hsm HSM_NAME -n gpc-system
    5. Aggiorna l'ultimo stato della condizione ctmclusterupgraderequest.status.conditions da False a True. Dopodiché, anche lo stato dell'ultima condizione hsmupgraderequest.status.conditions diventa true.

      Ad esempio:

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

    Esegui l'upgrade 1.12.2
    1.12.4

    IP di gestione non raggiungibile

    Durante un upgrade, l'IP di gestione di un server non è raggiungibile, in particolare dopo un upgrade del sistema operativo dello switch.

    Con Rocky Linux, quando vengono aggiunte route statiche, l'IP di destinazione utilizzato per raggiungere le route statiche deve essere raggiungibile prima di aggiungere le route statiche. Se lo switch si riavvia dopo un upgrade del sistema operativo, questo IP di gestione potrebbe essere temporaneamente irraggiungibile.

    Soluzione temporanea:

    Stabilisci una connessione SSH al server utilizzando l'indirizzo IP dei dati e riavvia il servizio di rete per ricreare le route statiche mancanti:

    systemctl restart NetworkManager.service
    Sistema di gestione dei ticket 1.12.2

    La sincronizzazione della knowledge base del sistema di gestione dei ticket non riesce

    Sintomi:

    Durante una sincronizzazione della knowledge base, potresti visualizzare il seguente errore:

    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. 

    Soluzione temporanea:

    Aggiungi una proprietà di sistema per aumentare la lunghezza massima:

    1. Nella piattaforma ServiceNow, inserisci sys_properties.list nel filtro di navigazione.
    2. Fai clic su New (Nuovo).
    3. Nel campo Nome, inserisci glide.rest.max_content_length.
    4. Nel campo Tipo, seleziona string.
    5. Nel campo Valore, inserisci 15.
    6. Fai clic su Invia.
    7. Sincronizza di nuovo la knowledge base.
    Sistema di gestione dei ticket 1.12.2

    Il sistema di gestione dei ticket non ha upstream integri

    Sintomi:

    Quando esegui il deployment dell'organizzazione gdchservices manualmente, il sistema di gestione dei ticket non ha upstream integri, non vengono create VM e il pod midserver non è integro nel cluster gdchservices-system nello spazio dei nomi support.

    Soluzione temporanea:

    Crea una nuova risorsa personalizzata TicketingSystem con l'immagine VM corretta nel cluster gdchservices-admin:

    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
    Esegui l'upgrade 1.12.2

    SSH per una VM con IP di gestione e i log di Cilium non riesce

    Sintomi:

    L'accesso di accesso non funziona con una VM con IP di gestione. Nei log del pod anetd potresti visualizzare un errore simile a questo:

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

    Soluzione temporanea:

    Elimina il pod virt-launcher per la VM.

    Esegui l'upgrade 1.12.2

    Gli aggiornamenti del sottocomponente mz-etcd spec.deployTarget e spec.Namespace causano l'esito negativo dell'upgrade dalla versione 1.11.x alla 1.12.x

    Sintomi:

    Durante l'upgrade dalla versione 1.11.x alla 1.12.x, potresti visualizzare un errore simile a questo:

          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

    Il sottocomponente mz-etcd ha le seguenti specifiche prima di un upgrade:

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

    Soluzione temporanea:

    1. Elimina i seguenti sottocomponenti nel cluster di amministrazione principale:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n root mz-etcd
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n org-1 mz-etcd
    2. Controlla il sottocomponente negli spazi dei nomi radice e dell'organizzazione:
            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. Il nuovo sottocomponente deve avere le seguenti specifiche e l'URL della chat deve mostrare la versione a cui sono già stati aggiornati i cluster:
                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
    Esegui l'upgrade 1.12.2

    L'upgrade dell'object storage mostra un errore durante il controllo post-volo o pre-volo

    Sintomi:

    I controlli preflight o postflight non riescono a essere completati e viene visualizzato un errore. Controlla i log:

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

    L'errore potrebbe avere il seguente aspetto:

     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

    Soluzione temporanea:

    Se l'errore si verifica durante i controlli post-volo e tutti gli altri controlli vengono completati senza errori, salta i controlli post-volo. Quando l'upgrade viene riavviato, devi saltare anche i controlli preliminari utilizzando kubeconfig dell'amministratore root:

     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

    Ad esempio, se l'errore si verifica in org-1, il comando ha il seguente aspetto:

     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

    Se l'errore si verifica durante i controlli preflight e tutti gli altri controlli preflight vengono completati senza errori, salta i controlli preflight:

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

    Ad esempio, se l'errore si verifica in org-1, il comando ha il seguente aspetto:

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

    Potresti dover applicare questa soluzione alternativa più di una volta se non viene applicata.

    Portfolio ATAT 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Impossibile sincronizzare il portfolio

    Sintomi:

    ConfigSync restituisce un errore con il messaggio:

     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. 

    Soluzione temporanea:

    Lo schema Portfolio è cambiato nella versione 1.12 di GDC. Il campo portfolioName è stato refactorizzato in portfolioID. Trova il file YAML contenente la risorsa personalizzata del portfolio menzionata nel messaggio di errore. Rinomina il campo portfolioName in portfolioID.

    Esegui l'upgrade 1.12.2

    L'errore OSPolicy NTP impedisce l'esecuzione di tutti gli altri OSPolicies

    Sintomi:

    Di seguito sono riportati i potenziali motivi per cui non viene creato un job in esecuzione per un job di applicazione patch che ha completato solo i job di preflight:

    1. L'errore NTP impedisce l'esecuzione di tutti gli altri job di patch.
    2. Il nodo è in uno stato non integro.
    3. L'agente OS Config non è in esecuzione.
    4. L'agente OS Config non può comunicare con il servizio OS Config.
    5. Si è verificato un problema con il servizio OS Config.

    Soluzione temporanea:

    1. Controlla la CR `NodeTargetPolicy` del nodo.
    2. Cerca `.spec.osPolicies` del CR `NodeTargetPolicy` con `ref.name=admin-ntp-policy` e `type: Ready` con stato false:
            # Enter the node InventoryMachine name.
            NAME=
            kubectl get nodetargetpolicy -n gpc-system $NAME -ojsonpath="{.spec.osPolicies}" | jq
    3. L'output ha il seguente aspetto:
       - 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. Elimina tutte le condizioni di queste `osPolicies` e mantieni solo la seguente parte:
      - conditions:
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    Esegui l'upgrade 1.12.3
    1.12.4

    NodeUpgrade mostra Rocky Linux

    Sintomi:

    NodeUpgrade CR menziona version: rocky-86-xyz nelle sue specifiche, anche se il nodo di cui viene eseguito l'upgrade è Ubuntu.

    Soluzione temporanea:

    Non è necessaria una soluzione alternativa perché queste informazioni sono innocue. L'upgrade del nodo viene eseguito correttamente a una versione più recente di Ubuntu.

    SIEM 1.12.0
    1.12.1
    1.12.2
    1.12.3
    1.12.4

    Errori nei job di preinstallazione di SIEM

    Sintomi:

    I job siem-*-preinstall nello spazio dei nomi root e org-1 nel cluster di amministrazione root non vengono eseguiti ripetutamente.

    Soluzione temporanea:

    È previsto che i job non vadano a buon fine quando il feature gate SIEMComponent è disattivato. Gli errori non indicano che il componente è guasto. La riconciliazione del componente SIEM può essere sospesa se il rumore è di disturbo, ma in genere è consigliabile lasciare il componente abilitato, se possibile. Se la riconciliazione dei componenti è in pausa, deve essere riattivata manualmente quando l'installazione del componente SIEM non sarà più limitata negli upgrade futuri.

    Upgrade del nodo 1.12.0
    1.12.1
    1.12.2

    L'upgrade del nodo non riesce a causa di un file lvm.conf obsoleto

    Sintomi:

    Potrebbero esserci problemi con vgs, blkid e gather_facts di Ansible che non rispondono. Questo problema riguarda sia i sistemi operativi Rocky che Ubuntu.

    Esegui questi passaggi se i nodi sono già stati aggiornati. La procedura per aggiornare il file lvm.conf prevede i seguenti passaggi:

    1. Recupera un elenco di tutti i nodi in modo che questa correzione possa essere applicata a tutti.
    2. Crea un playbook Ansible e un file di criteri del sistema operativo.
    3. Applica la correzione ai nodi.
    4. Controlla se la correzione è stata applicata.

    Prerequisiti:

    1. Segui i passaggi descritti nel runbook IAM-R0004 per generare ROOTCONFIG per il cluster di amministrazione principale e ORGCONFIG per il cluster di amministrazione dell'organizzazione.
    2. Segui i passaggi del runbook IAM-R0005 per ottenere i seguenti ruoli dell'organizzazione.

    Soluzione temporanea:

    1. Identifica i InventoryMachines che corrispondono ai cluster:
      kubectl --kubeconfig=$ROOTCONFIG get inventorymachines
          kubectl --kubeconfig=$ORGCONFIG get inventorymachines

      Mantieni l'output separato. Correggi un cluster alla volta. L'output potrebbe essere simile al seguente:

          NAME
          bm-2bca8e3f
          bm-4caa4f4e
    2. Crea un playbook e un file di criteri:
      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. La sezione dell'inventario precedente deve essere compilata come in questo esempio. Aggiungi un paragrafo per ogni nodo trovato nel passaggio 1. Dovrai creare un cluster alla volta, quindi compila la sezione dell'inventario con i nodi per un cluster.
      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. Applica la correzione al cluster di amministrazione root:
      kubectl --kubeconfig=$ROOTCONFIG apply -f PRECEDING_FILENAME_WITH_ROOT_NODES
    5. Applica la correzione al cluster di amministrazione dell'organizzazione:
      kubectl --kubeconfig=$ORGCONFIG  apply -f PRECEDING_FILENAME_WITH_ORG_NODES
    6. Riavvia il server per applicare la nuova impostazione.
    7. Segui i passaggi nel runbook OS-P0005 per verificare che i nodi siano aggiornati.
    8. Dopo aver verificato che la policy sia stata completata correttamente, eliminala utilizzando lo strumento k9s:
      1. Vai alle policy del sistema operativo, ad esempio :ospolicies.
      2. Trova e seleziona le norme lvm-conf-device-filter-node-update.
      3. Premi Ctrl + D.
      4. Conferma l'eliminazione.

    Per riassegnare il problema, crea una richiesta utilizzando il runbook SUPP-G0008. Il ticket deve includere informazioni quali:

    1. Comandi eseguiti e relativi messaggi di output
    2. Dettagli come InventoryMachineName e cluster
    3. Messaggi di log
    Sistema operativo (OS) 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Rocky OS è selezionato erroneamente per i nuovi cluster o organizzazioni

    Sintomi:

    Questo problema si verifica se l'ambiente è stato precedentemente implementato con la versione 1.11 e poi è stato eseguito l'upgrade alla versione 1.12. Quando crei un nuovo cluster o una nuova organizzazione in una versione 1.12.x, viene selezionato Rocky OS anziché Ubuntu OS per il provisioning dei nodi bare metal e delle macchine virtuali a causa della versione di Rocky OS specificata nei CR ReleaseMetadata e Userclustermetadata.

    Soluzione temporanea:

    Applica la seguente soluzione alternativa prima di creare una nuova organizzazione:

    1. Controlla se sono presenti richieste di modifica OrganizationUpgrade non nello stato Succeeded: true:
      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

      In questo caso, contatta il team tecnico prima di procedere con i passaggi successivi.

    2. Rimuovi tutti i CR OrganizationUpgrade esistenti per evitare aggiornamenti accidentali del sistema operativo dei nodi:
      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. Definisci la versione di GDC di destinazione per la creazione della nuova organizzazione. Deve essere presente un ReleaseMetadata corrispondente per questa versione di destinazione:
      TARGET_RELEASE=
    4. Identifica l'ultima versione di OSImageMetadata CR per il sistema operativo Ubuntu di destinazione nel cluster di amministrazione principale e definisci la variabile 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

      L'output potrebbe essere simile al seguente:

      1.12.4-gdch.4

      Assicurati che la variabile utilizzi la stessa versione major.minor.patch, ad esempio 1.12.4, di TARGET_RELEASE. In caso contrario, riassegna la richiesta al team di ingegneria prima di procedere con i passaggi successivi.

    5. Aggiorna la destinazione ReleaseMetadata per utilizzare Ubuntu OS_VERSION nel cluster di amministrazione root:
      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. Identifica l'elenco UserclusterMetadata mappato per il ReleaseMetadata di destinazione:
      UCMS=$(kubectl --kubeconfig=KUBECONFIG get releasemetadata  "${TARGET_RELEASE}" -o json | jq -r '.spec.userClusters[].name')
    7. Aggiorna il target UserclusterMetadata in modo che utilizzi Ubuntu OS_VERSION nel cluster di amministrazione root e nel cluster di amministrazione dell'organizzazione per ogni organizzazione. Esegui questo comando per ogni cluster:
      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
    Macchine virtuali 1.12.1
    1.12.2
    1.12.4

    L'importazione di immagini BYO non riesce per le immagini qcow2 e raw

    Sintomi:

    Quando le immagini VM locali vengono importate utilizzando l'interfaccia a riga di comando gdcloud compute images import, lo stato dell'importazione rimane bloccato su WaitingForTranslationVM o ImportJobNotCreated. Questo perché il disco temporaneo creato per la traduzione o l'importazione utilizza le dimensioni esatte dell'immagine qcow2 o raw, ma LUKS aggiunge un overhead di alcuni MiB che causa l'errore di provisioning del disco.

    Soluzione temporanea:

    Crea manualmente un nuovo VirtualMachineImageImport con lo stesso nome dell'immagine, ma con un spec.minimumDiskSize più grande. Ad esempio, se questo era il comando utilizzato per importare l'immagine:

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

    Se il VirtualMachineImageImport originale creato automaticamente dalla CLI ha minimumDiskSize come X Gi, creane uno nuovo con X+1 Gi. Il valore si basa sulle dimensioni dell'immagine importata. Nel caso di qcow2, si tratta della dimensione virtuale, ad esempio 20 Gi devono essere sostituiti con 21 Gi.

    Sostituisci i valori dei segnaposto in base a come è stata chiamata la CLI.

    1. Trova il VirtualMachineImageImport:
      kubectl get virtualmachineimageimport $IMPORT_NAME -n $PROJECT -o yaml

      Se l'oggetto non è presente, attiva di nuovo il comando gdcloud compute images import .... Dopo che l'output della console passa da Uploading image to ... a Image import has started for ..., premi CTRL + C in modo che l'immagine locale venga caricata nell'object storage e VirtualMachineImageImport venga conservato come riferimento per crearne uno nuovo.

    2. Crea un nuovo VirtualMachineImageImport con un minimumDiskSize più grande:
      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
    Macchine virtuali 1.12.0
    1.12.1
    1.12.2
    1.12.3

    L'importazione delle immagini è bloccata in TranslationInProgress

    Sintomi:

    Il pod importer-image-import-$VMII nello spazio dei nomi del progetto del cluster di sistema si arresta in modo anomalo con il seguente errore: 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`). L'oggetto VMII VirtualMachineImageImport ha la condizione Tipo Ready con Stato False e Motivo TranslationInProgress dopo 2 ore dall'inizio dell'importazione.

    Soluzione temporanea:

    Per migliorare la velocità, modifica le dimensioni minime del disco dell'immagine impostandole su 200 Gi come segue:

    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

    Tieni presente che per eliminare e applicare ValidatingWebhookConfiguration, devi disporre del file kubeconfig dell'amministratore del cluster per il cluster di amministrazione dell'organizzazione. Puoi ottenere questo runbook IAM-R0004.

    Se utilizzi gdcloud per avviare l'importazione, tieni presente che non è possibile fornire il parametro minimumDiskSize. Devi creare un oggetto VMII e modificarlo come mostrato nel comando precedente.

    Il processo di VirtualMachineImageImport continua, ma si blocca di nuovo in un passaggio successivo. Nello spazio dei nomi del progetto nel cluster di sistema, il job image-import-$VMII non va a buon fine in modo continuo e viene visualizzato l'errore: error: stream error: stream ID x; NO_ERROR; received from peer. A questo punto, l'importazione dell'immagine viene completata. L'immagine finale viene caricata nell'archiviazione di oggetti, ma manca VirtualMachineImage. Puoi creare manualmente un VirtualMachineImage nel seguente modo:

    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` deve corrispondere a `VMII.ImageMetadata.Name`, mentre `$OS_NAME` può essere uno dei seguenti valori: [`ubuntu-2004`, `ubuntu-2204`, `windows-2019`, `rhel-8`] e deve corrispondere al tipo di immagine importata.

    Istio 1.12.4

    Il deployment di istio-eastwestgateway nello spazio dei nomi istio-system è bloccato

    Sintomi:

    Il deployment di istio-eastwestgateway nello spazio dei nomi istio-system è bloccato e gli eventi dei pod mostrano un errore Back-off pulling image "auto" da kubelet.

    Per diagnosticare il problema, controlla se il mutatingwebhookconfiguration denominato istio-revision-tag-default esiste nello stesso cluster del deployment del gateway bloccato.

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

    Soluzione temporanea:

    • Se la configurazione esiste, riavvia il deployment istio-eastwestgateway nello spazio dei nomi istio-system.
      kubectl --kubeconfig=KUBECONFIG rollout restart deployment/istio-eastwestgateway -n istio-system
    • Se la configurazione non esiste, attendi che esista il webhook, il che dovrebbe avvenire a breve poiché si trova in un ciclo di riconciliazione.
    Monitoraggio 1.12.2

    cortex-store-gateway riavvio con errore di limiti della sezione fuori intervallo

    Sintomi:

    I pod cortex-store-gateway vengono riavviati con il seguente messaggio di errore nei log:

    panic: runtime error: slice bounds out of range

    Soluzione temporanea:

    1. Metti in pausa il sottocomponente mon-cortex nel cluster di sistema.
      kubectl --kubeconfig $ORG_ADMIN_CONFIG annotate subcomponent mon-cortex -n $SYSTEM_CLUSTER_NAMESPACE lcm.private.gdc.goog/paused=true
    2. Modifica il configMap cortex-config nel cluster di sistema e imposta il timeout per memcached all'interno di index_cache su due secondi in modo che la configurazione di index_cache sia simile a questa:
       index_cache:
            backend: memcached
            memcached:
              addresses: dnssrvnoa+_memcached._tcp.cortex-index-memcached.mon-system.svc.cluster.local
              timeout: 2s
    3. Riavvia i pod cortex-store-gateway nel cluster di sistema in modo che utilizzino la configurazione aggiornata.
    Esegui l'upgrade 1.12.4

    Il riavvio del nodo di amministrazione principale durante l'upgrade causa un errore del sottocomponente

    Sintomi:

    Il nodo bare metal viene visualizzato come NotReady e il server è bloccato nella schermata di avvio con l'ultimo messaggio che dice Retrieving encryption keys.

    Soluzione temporanea:

    1. Riavvia iLO.
    2. Dopo il ripristino di iLO, riavvia il server.
    Esegui l'upgrade 1.12.4

    Il numero di versione di storagecluster non viene visualizzato durante l'upgrade

    Sintomi:

    Dopo l'upgrade, il report StorageCluster non mostra alcun valore per il campo di stato StorageVersion. Controlla la versione:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get StorageCluster -n gpc-system
    Se il campo Versione è vuoto, segui i passaggi della soluzione alternativa.

    Soluzione temporanea:

    Riavvia il deployment di file-storage-backend-controller:

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

    Infrastruttura della suite operativa (OI) 1.12.4

    Il percorso del programma di installazione di Fluent Bit non è corretto

    Sintomi:

    La posizione del programma di installazione di fluent-bit è cambiata in operations_center\bin\fluent-bit-win64.msi. Copy-ConfigHostFiles.ps1 prevede che il programma di installazione client fluent-bit corrisponda al pattern fluent-bit-*-win64.*. Il programma di installazione non riesce a trovare il programma di installazione perché il pattern non corrisponde più.

    Soluzione temporanea:

    1. Apri il file Copy-ConfigHostFiles.ps1.
    2. Trova la seguente riga:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-*-win64.*').FullName
    3. Modifica la riga precedente per aggiungere la posizione corretta del programma di installazione:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-win64.*').Name
    Infrastruttura della suite operativa (OI) 1.12.4

    Il percorso del programma di installazione di Nessus non è corretto

    Sintomi:

    La posizione del programma di installazione di Nessus è stata modificata in operations_center\bin\NessusAgent-x64.msi. Copy-ConfigHostFiles.ps1 prevede che il programma di installazione del client corrisponda al nome file /NessusAgent-10.4.1-x64.msi. Il programma di installazione non riesce a trovare il programma di installazione perché il pattern non corrisponde più.

    Soluzione temporanea:

    1. Apri il file Copy-ConfigHostFiles.ps1.
    2. Trova le seguenti righe:
      [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. Modifica le righe precedenti per aggiungere la posizione corretta del programma di installazione, modificando 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" }
    Archiviazione di oggetti 1.12.4

    La creazione di una nuova organizzazione si blocca nello stato VMImageDistributing

    Sintomi:

    Potresti visualizzare un messaggio simile a questo:

    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  

    Questo problema è causato da una configurazione dell'endpoint S3 mancante per la nuova organizzazione.

    Soluzione temporanea:

    Crea manualmente un gruppo HA per la nuova organizzazione.

    1. Tramite la procedura di emergenza, acquisisci un kubeconfig del cluster di amministrazione root che abbia accesso in lettura alle seguenti risorse:
      • Organizzazione
      • ObjectStorageAdminNode
      • SubnetClaim
      • ObjectStorageSite
      • Secret
    2. Prendi nota del nome dell'organizzazione:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get Organization -A
    3. Prendi nota degli indirizzi IP client delle risorse personalizzate ObjectStorageAdminNode nel cluster di amministrazione principale.
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode

      Per ogni CR AdminNode:

      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode NODE_NAME -o jsonpath='{.spec.network.clientIP}'
    4. Prendi nota dell'intervallo di indirizzi IP disponibili e degli IP riservati in quell'intervallo:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get SubnetClaim -n root external-objectstorage-client-lif-subnet -o jsonpath='{.status.ipv4SubnetStatus}'
    5. Recupera le credenziali di accesso alla UI di gestione di StorageGRID dal secret gpc-system/objectstorage-breakglass-root-level1 nel cluster root-admin.
    6. Accedi alla UI di gestione di StorageGRID con le credenziali del passaggio precedente. L'URL ha lo stato ObjectStorageSite:
      kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig get ObjectStorageSite -n gpc-system mb-obj-site-1 -o jsonpath='{.status.managementAPIEndpointURL}'
    7. Vai alla scheda Configurazione e fai clic su Gruppi ad alta disponibilità.
    8. Apri la visualizzazione dettagliata di ogni gruppo HA e annota il relativo indirizzo IP virtuale (VIP).
    9. Crea un nuovo gruppo HA:
      1. Nome gruppo: il pattern del nome è ORGANIZATION_NAME-ha . In questo caso, è org-2-ha.
      2. Descrizione gruppo: utilizza i gruppi HA esistenti per il pattern di descrizione.
      3. Interfacce: seleziona tutti i eth2.
      4. Ordine di priorità: l'interfaccia principale deve avere la priorità più alta.
      5. SubnetCIDR: questo campo viene compilato automaticamente da StorageGRID. Verifica che la subnet corrisponda a status.ipv4SubnetStatus.cidrBlock in SubnetClaim external-objectstorage-client-lif-cidr.
      6. IP virtuale: l'IP successivo nell'intervallo IP disponibile. L'IP non può entrare in conflitto con l'IP riservato, l'IP client del nodo di amministrazione e i VIP dei gruppi HA esistenti.
    10. Ruota le credenziali di emergenza di StorageGRID.
    Esegui l'upgrade 1.12.4

    Riconciliazione continua nel sottocomponente

    Sintomi:

    Quando esegui l'upgrade dell'organizzazione principale dalla versione 1.12.2 alla 1.12.4, il componente secondario iac-gitlab ha uno stato di riconciliazione in corso. Per diagnosticare il problema, controlla i log di Prometheus, ad esempio:

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

    I log potrebbero includere un errore come questo:

    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

    Soluzione temporanea:

    1. Esegui sleep 3600 per ottenere una shell nel container in esecuzione, ad esempio.
      kubectl exec --stdin --tty POD_NAME -n gitlab-system -c prometheus-server -- /bin/sh
      /prometheus $ df -h

      Sostituisci POD_NAME con il nome del pod, ad esempio gitlab-prometheus-server-d7969c968-hppsl.

    2. Controlla l'output per vedere se la cartella /data è piena:
      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. Se questo problema si verifica durante l'upgrade, elimina il job di migrazione perché ha un timeout di 3600 secondi, quindi procedi con l'upgrade:
      kubectl delete job gitlab-migrations-1-fe7-2 -n gitlab-system
    Esegui l'upgrade 1.12.4

    Il controllo preflight IAM non va a buon fine

    Sintomi:

    Per diagnosticare il problema, controlla i log di upgrade di IAM, ad esempio:

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

    L'output potrebbe essere simile al seguente:

    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

    Soluzione temporanea:

    1. Fai riferimento al messaggio di errore precedente e annota lo spazio dei nomi e il nome del deployment. In questo esempio, NAME è iam-authzpdp-backend-server e NAMESPACE è iam-system.
    2. Recupera l'elenco dei pod:
      kubectl get pods -n NAMESPACE | grep NAME
    3. Nota il risultato nel seguente formato:
      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

      Prendi nota del pod in cui non tutti i contenitori sono pronti. In questo caso, POD_NAME è iam-authzpdp-backend-server-6875654c4b-pvscg che ha uno dei due container non pronto, come indicato dallo stato 1/2. Se ci sono più pod di questo tipo, ripeti il passaggio successivo per ogni pod interessato.

    4. Elimina il pod non completamente integro:
      kubectl delete pod -n NAMESPACE POD_NAME>
    5. Esegui di nuovo il comando del passaggio 2. Nota che tutti i pod dovrebbero essere integri ora. Questo passaggio potrebbe richiedere alcuni minuti.
    6. Se il pod eliminato non viene sostituito da un pod integro, apri un ticket di assistenza.
    Esegui l'upgrade 1.12.1
    1.12.2
    1.12.4

    Lo stato di OrganizationUpgrade è Unknown

    Sintomi:

    Lo stato di OrganizationUpgrade è Unknown al termine di un upgrade.

    Soluzione temporanea:

    Se il campo della versione in Organization corrisponde al campo targetVersion, puoi ignorare lo stato Sconosciuto.

    Esegui l'upgrade 1.12.4

    Upgrade del sottocomponente non riuscito per opa gatekeeper

    Sintomi:

    Durante l'upgrade dell'organizzazione tenant dalla versione 1.12.2 alla 1.12.4, l'upgrade del sottocomponente opa gatekeeper non riesce e viene visualizzato un messaggio ReconciliationError.

    Soluzione temporanea:

    1. Modifica l'oggetto mutatingwebhookconfiguration edr-sidecar-injector-webhook-cfg del cluster di utenti interessato. Se sono presenti più cluster utente interessati, ripeti i passaggi per ogni cluster utente interessato:
           kubectl edit mutatingwebhookconfiguration edr-sidecar-injector-webhook-cfg
    2. Modifica la sezione webhooks > (edr-sidecar-injector.gpc-system.internal) > namespaceSelector > matchExpressions > (key: kubernetes.io/metadata.name) > values aggiungendo i seguenti due valori:
      • opa-system
      • cert-manager

      L'oggetto aggiornato dovrebbe avere il seguente aspetto:

                  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. La risoluzione del problema potrebbe richiedere fino a un'ora.
    Esegui l'upgrade 1.12.4

    ansibleplaybook non viene eseguito l'upgrade nell'ambito dell'upgrade del cluster

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.12.2 alla 1.12.4, ansibleplaybook non viene aggiornato nell'ambito dell'upgrade del cluster. Le correzioni aggiornate in ansibleplaybook non vengono applicate e bloccano il criterio del sistema operativo che esegue la versione precedente di ansibleplaybook.

    Soluzione temporanea:

    1. Elimina il job Kubernetes 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. Riavvia il deployment di os-core-controller.
    3. Questa azione riattiva i job e aggiorna i playbook.
    DNS 1.12.4

    La creazione dell'organizzazione non riesce perché il traffico DNS al nodo amministratore radice scade

    Sintomi:

    Quando crei una nuova organizzazione, potresti notare che il sottocomponente core-dns va in timeout nei log:

    [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

    Soluzione temporanea:

    1. Aggiorna il servizio gpc-coredns-forwarder-udp e il servizio gpc-coredns-forwarder-tcp del cluster di amministrazione root e aggiungi i nuovi intervalli IP negli intervalli di origine del bilanciatore del carico.
    2. Se le modifiche di CR vengono sostituite, metti in pausa il sottocomponente dns-core con l'annotazione lcm.private.gdc.goog/paused="true".
    Archiviazione di file e blocchi 1.12.4

    Il sottocomponente file-netapp-trident non funziona sul cluster radice

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.12.2 alla 1.12.4, il sottocomponente file-netapp-trident è bloccato sull'eliminazione di StorageClasses. Mostra il seguente stato:

          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

    Soluzione temporanea:

    1. Metti in pausa il sottocomponente 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. Elimina StorageClasses che il job non è riuscito a creare, come standard-rwo, standard-block, standard-rwo-non-luks e standard-block-non-luks:
            kubectl delete storageclass $(kubectl get storageclasses -o jsonpath='{.items[?(@.provisioner=="csi.trident.netapp.io")].metadata.name}
    3. Attiva la ricreazione di StorageClasses riavviando oclcm-backend-controller per il tuo cluster (controller root-admin per i cluster root e org-admin, controller org-admin per i cluster di sistema e utente):
            kubectl rollout restart deployment oclcm-cm-backend-controller -n oclcm-system
    4. Riavvia il deployment di netapp-trident e netapp-trident DaemonSet nel cluster:
            kubectl rollout restart deployment netapp-trident-controller -n netapp-trident
            kubectl rollout restart daemonset netapp-trident-node-linux -n netapp-trident
    5. Verifica che il secret LUKS sia stato creato per le risorse PersistentVolumeClaim (PVC). Ogni PVC deve avere un secret nel formato g-luks-$pvc_name.
            kubectl get secret -n $pvc_namespace g-luks-$pvc_name
    6. Verifica che il sottocomponente file-netapp-trident non presenti errori nello stato:
            kubectl get subcomponent -n $cluster_namespace file-netapp-trident -o jsonpath='{.status}' | jq
      Nota: non devono essere presenti errori nei messaggi e in `backendStatus`. `crdStatus` deve mostrare `delpoymentFinished: true`
    7. Riattiva il sottocomponente per rendere effettive le sostituzioni.
    Server fisici 1.12.4

    Avvio del server non riuscito

    Sintomi:

    Durante l'avvio del server, potresti visualizzare un messaggio simile a questo nei log bare metal:

    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

    Soluzione temporanea:

    1. Per ogni fase bloccata, segui le istruzioni riportate nei seguenti runbook:
      1. SERV-R0006
      2. SERV-R0007
      3. SERV-R0008
    2. Se il problema persiste, segui i passaggi del runbook SERV-R0001.
    3. Se il problema non è ancora stato risolto, apri un ticket di assistenza.
    Esegui l'upgrade 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Pod Prometheus primari non puliti durante l'upgrade

    Sintomi:

    I pod primary-prometheus-shardX-replicaX sono visibili nello spazio dei nomi obs-system e nello spazio dei nomi mon-system. Se primary-prometheus-shardX-replicaX esiste solo nello spazio dei nomi obs-system dopo un upgrade alla versione 1.12, allora si tratta di un problema sconosciuto diverso e la soluzione alternativa non deve essere eseguita.

    Il comportamento previsto è che primary-prometheus-shardX-replicaX esista solo nello spazio dei nomi mon-system dopo il completamento dell'upgrade alla versione 1.12.

    Soluzione temporanea:

    1. Elimina manualmente i primary-prometheus-shardX-replicaX StatefulSet nello spazio dei nomi obs-system.
    2. Non eliminare i primary-prometheus-shardX-replicaX StatefulSet nello spazio dei nomi mon-system.
    Networking 1.12.4

    PodCIDR non assegnato ai nodi anche se ClusterCIDRConfig è stato creato

    Sintomi:

    Un ClusterCIDRConfig è un oggetto obbligatorio per assegnare PodCIDRs. Nonostante la creazione di ClusterCIDRConfig, non è stato assegnato PodCIDRs. Questo problema si verifica se viene creato un ClusterCIDRConfig contemporaneamente all'avvio dei pod ipam-controller. La creazione del cluster è bloccata nello stato di riconciliazione:

    1. Controlla se l'oggetto ClusterCIDRConfig è stato creato sul cluster:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get clustercidrconfigs -oyaml

      L'output potrebbe essere simile al seguente:

      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. Esegui describe per uno degli oggetti nodo del cluster bloccato nella riconciliazione e verifica se è presente un evento CIDRNotAvailable sull'oggetto nodo:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG describe node NODE_NAME

      Gli eventi di output potrebbero avere il seguente aspetto:

      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

    Soluzione temporanea:

    1. Riavvia i pod ipam-controller-manager:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG -n kube-system rollout restart ds ipam-controller-manager
    2. Dopo che i pod ipam-controller-manager sono in esecuzione, controlla se podCIDR è assegnato ai nodi:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get nodes -oyaml | grep podCIDR

      L'output potrebbe essere simile al seguente:

      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

    Le API preaddestrate mostrano lo stato Enabling nell'interfaccia utente

    MonitoringTarget mostra lo stato Not Ready durante la creazione dei cluster di utenti, il che fa sì che le API preaddestrate mostrino continuamente lo stato Enabling nell'interfaccia utente.

    Soluzione temporanea:

    1. Apri il menu del browser Chrome (icona con tre puntini).
    2. Fai clic su Altri strumenti > Strumenti per sviluppatori per aprire la console.
    3. Fai clic sulla scheda Rete nella console.
    4. Trova le richieste ai-service-status.
    5. Fai clic sulla scheda Risposta in una richiesta ai-service-status per visualizzare i contenuti della richiesta.
    6. Verifica che tutto sia pronto, ad eccezione dei componenti MonitoringTarget e LoggingTarget.
    Archiviazione di oggetti 1.12.4

    Alcuni avvisi di upgrade dell'object storage possono essere ignorati

    Sintomi:

    Quando esegui l'upgrade dell'archiviazione oggetti, potresti visualizzare un avviso come questo:

     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

    Soluzione temporanea:

    1. Controlla che ogni nodo abbia le credenziali SSH corrispondenti memorizzate in un secret.
      1. Controlla i nodi amministratore:
        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. Controlla i nodi di archiviazione:
        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

      L'output riuscito è simile a questo esempio per i nodi di archiviazione:

      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

      Se non viene trovato un secret, l'errore ha il seguente aspetto:

      Error from server (NotFound): secrets "gpcstgeadm02-gce-gpcstgesite01-ssh-creds" not found
    2. Se il comando non restituisce errori, puoi ignorare tranquillamente gli errori segnalati dai riconciliatori.
    Vertex AI 1.11.x
    1.12.x

    Il pod e il servizio frontend di traduzione non vengono inizializzati

    Sintomi:

    Durante gli upgrade, il cluster Translation DB viene ricreato, il che causa l'obsolescenza e la mancata sincronizzazione del secret del cluster di sistema ODS secret-store. Per questo motivo, l'inizializzazione del pod e del servizio frontend di traduzione non va a buon fine.

    Soluzione temporanea:

    Elimina il secret nel cluster di sistema:

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

    Sostituisci SYSTEM_CLUSTER_KUBECONFIG con il percorso del file kubeconfig nel cluster di sistema.

    Un controller ricrea automaticamente il secret e lo sincronizza nuovamente con il cluster di database.

    Server fisici 1.12.4

    Il server non può connettersi a Key Manager

    Sintomi:

    Il server non può connettersi al gestore delle chiavi, impedendo la disponibilità dello stato del server. Questo problema causa l'errore del job server-encrypt-and-create-logical-drive e il cluster di amministrazione non diventa pronto. Nei log dei job potresti visualizzare un errore simile al seguente:

    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   

    Soluzione temporanea:

    Esegui un AuxCycle e verifica che iLO possa connettersi a Key Manager.

    Logging 1.12.4

    Il log write-ahead riempie il volume permanente

    Sintomi:

    Loki ha un solo volume permanente (PV) sia per i log write-ahead (WAL) sia per gli indici. Il WAL può riempire il PV se un pod Loki non riesce a connettersi al bucket di archiviazione per ore. Se il PV non ha più spazio, Loki non può eseguire il recupero a meno che tu non elimini il PV e riavvii StatefulSet.

    Soluzione temporanea:

    Per recuperare un pod Loki da questo stato, devi ridurre lo scale down del StatefulSet corrispondente ed eliminare il PV senza spazio rimanente.

    Per recuperare il pod Loki:

    1. Assicurati che il contenitore dello strumento IO sia installato sulla workstation. Per maggiori dettagli, consulta il manuale operativo OOPS-P0065.
    2. Per ottenere le autorizzazioni necessarie per modificare le risorse, chiedi all'Amministratore sicurezza di concederti i seguenti ruoli:
      • observability-viewer
      • observability-admin
    3. Imposta la variabile di ambiente KUBECONFIG con il percorso del file kubeconfig nel cluster di amministrazione principale. Per maggiori dettagli, consulta il runbook IAM-R0004.
    4. Imposta la variabile di ambiente ORG_NAME con il nome dell'organizzazione interessata.
    5. Salva i seguenti contenuti in un file YAML denominato 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. Disattiva LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    7. Imposta la variabile di ambiente KUBECONFIG con il percorso del file kubeconfig nel cluster in cui è in esecuzione il pod Loki interessato. Per maggiori dettagli, consulta il runbook IAM-R0004.
    8. Imposta la variabile di ambiente LOKI_POD_NAME con il nome del pod Loki interessato.
    9. Ottieni il nome di Loki StatefulSet:
      export LOKI_STATEFULSET_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.metadata.labels.app')
    10. Ottieni il nome del PVC Loki:
      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. Ottieni le repliche di Loki StatefulSet:
      export LOKI_STATEFULSET_REPLICAS=$(kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system -o json | jq -r '.status.replicas')
    12. Fai lo scale down di Loki StatefulSet:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=0
    13. Verifica che non siano in esecuzione pod StatefulSet:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      L'output deve essere simile all'esempio seguente:

      NAME                      READY   AGE
      audit-logs-loki-io        0/0     4d3h
    14. Elimina la PVC interessata:
      kubectl delete pvc $LOKI_PVC_NAME -n obs-system
    15. Fai lo scale up di Loki StatefulSet:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=${LOKI_STATEFULSET_REPLICAS}
    16. Imposta la variabile di ambiente KUBECONFIG con il percorso del file kubeconfig nel cluster di amministrazione dell'organizzazione interessata. Per maggiori dettagli, consulta il runbook IAM-R0004.
    17. Modifica i contenuti nel file YAML log-admin-overrides.yaml nel seguente modo:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
        namespace: root
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: ""
    18. Attiva LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    19. Verifica che tutti i pod StatefulSet siano in esecuzione e integri:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      L'output deve essere simile all'esempio seguente:

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

      In questo caso, il StatefulSet ha cinque repliche su cinque (5/5) disponibili.

    Esegui l'upgrade 1.12.4

    I job vengono pianificati continuamente

    Sintomi:

    I job vengono pianificati continuamente. Non appena un job viene terminato, ne viene pianificato uno nuovo. I job programmati continuamente sono:

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

    Soluzione temporanea:

    1. Metti in pausa i seguenti sottocomponenti:
      • unet-networkpolicy
      • unet-nodenetworkpolicy
      • unet-nodenetworkpolicy
      • unet-userclusterpolicy
      • unet-clustermesh
    2. Riattiva i sottocomponenti ogni volta che viene modificato il secret fleet-info nel cluster amministratore principale. Questo problema si verifica quando viene modificata la gestione degli switch dell'istanza, ad esempio kr get managementswitches -A o quando viene modificato un cidrclaim nello spazio dei nomi dell'organizzazione.
    3. Riattiva i componenti secondari ogni volta che viene modificata una risorsa NodePool nel cluster di amministrazione dell'organizzazione. Disattiva la modalità di pausa dei sottocomponenti prima di iniziare.
    Esegui l'upgrade 1.12.4

    L'upstream integro per ServiceNow non è disponibile

    Sintomi:

    1. Quando esegui l'upgrade dalla versione 1.12.2 alla 1.12.4, non è disponibile un upstream integro per ServiceNow. Potresti visualizzare il seguente messaggio: failed to stage volume: LUKS passphrase cannot be empty.
    2. La classe di archiviazione system-performance-rwo non è abilitata per LUKS. L'allegato del volume indica che il PVC è abilitato per LUKS.
    3. Il riconciliatore cerca un segreto con le passphrase LUKS. Poiché l'allegato del volume indica che LUKS è abilitato e la classe di archiviazione non lo è, la passphrase segreta non viene creata.

    Soluzione temporanea:

    1. Ottieni il Kubeconfig per il cluster root o org-admin in cui si verifica il problema:
            export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    2. Elimina la classe di archiviazione system-performance-rwo e ricreala:
            kubectl delete storageclass system-performance-rwo
            kubectl apply -f system-performance-rwo.yaml
    3. Crea un nuovo file YAML per la classe di archiviazione system-performance-rwo e attiva 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
    Esegui l'upgrade 1.12.4

    L'upgrade del sottocomponente file-netapp-trident ha lo stato Reconciliation ongoing

    Sintomi:

    Potresti notare che lo stato del sottocomponente file-netapp-trident passa da Reconciling a ReconciliationCompleted.

    Soluzione temporanea:

    La riconciliazione in corso può essere ignorata se sono soddisfatte le seguenti condizioni:

    1. Il valore TridentBackend è online.
    2. La configurazione di TridentBackend è bound.
    3. Il deployment netapp-trident-controller è integro.
    4. Il DaemonSet netapp-trident-node-linux è integro.
    Esegui l'upgrade 1.12.4

    L'upgrade del nodo di lavoro del cluster di sistema non riesce a generare il delta tra manifest e snapshot

    Sintomi:

    Quando esegui l'upgrade dalla versione 1.12.2 alla 1.12.4, l'upgrade dell'organizzazione si blocca nella fase NodeUpgrade e l'attività di upgrade del nodo mostra il seguente errore:

          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:

    Per confermare il problema, esegui i seguenti passaggi:

    1. Recupera Kubeconfig per il cluster root o org-admin in cui l'upgrade del nodo non riesce e controlla se nodeupgradetask non è riuscito:
           export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
           kubectl get nodeupgradetask -A -ojsonpath='{.items[*].status.conditions[?(@.status != "True")]}' | jq 
    2. Verifica che il messaggio corrisponda al messaggio di errore precedente:
            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. Controlla che un osartifactsnapshot abbia una distribuzione mancante:
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    4. Verifica che sia presente almeno uno snapshot stampato per cui non è impostata la distribuzione.

    Soluzione temporanea:

    1. Recupera il file Kubeconfig per il cluster a cui appartiene il nodo:
           export KUBECONFIG=${CLUSTER_KUBECONFIG}
           kubectl rollout restart -n os-system os-core-controller 
    2. Controlla che lo snapshot ora abbia una distribuzione. (questo comando potrebbe richiedere alcuni minuti):
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    3. Questo comando non dovrebbe restituire alcun risultato. Se continui a notare una distribuzione mancante, apri una richiesta di assistenza.
    Esegui l'upgrade 1.12.4

    kubelet non riesce a rimuovere cgroup per i pod con log di spam

    Sintomi:

    1. kubelet continua a stampare il seguente log di spam:
      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. Il processo runc init è bloccato, impedendo a kubelet di eliminare il pod cgroup.

    Soluzione temporanea:

    1. Utilizza il seguente script per trovare il processo che blocca l'eliminazione di cgroup:
           # 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. Controlla lo stato del congelatore utilizzando cat freezer.state. Lo stato deve essere FROZEN.
    3. Echo "THAWED" > freezer.state
    4. cgroup è stato eliminato. Kubelet smette di inviare spam al log.
    Prestazioni 1.12.4

    Sottocomponente perf-ptaas con errore di riconciliazione

    Sintomi:

    Il sottocomponente perf-ptaas mostra il seguente codice di errore, impedendo il deployment di PTaaS:

    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"

    Soluzione temporanea:

    PTaaS viene implementato nell'organizzazione gdchservices.

    1. Esamina le annotazioni e le etichette del progetto PTaaS gdch-perftest e del bucket perftest-bucket-reports nello spazio dei nomi perftest gdch-perftest. Il bucket potrebbe non avere l'etichetta app.kubernetes.io/managed-by=Helm e le annotazioni meta.helm.sh/release-name=perf-ptaas-assets e meta.helm.sh/release-namespace=gdch-perftest. Aggiungi manualmente queste etichette e annotazioni:
      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
      Assicurati che OCLCM rivendichi il bucket forzatamente:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports lcm.private.gdc.goog/claim-by-force=true
    2. Esamina le annotazioni del progetto PTaaS gdch-perftest. Il progetto potrebbe essere configurato in modo errato con l'annotazione: meta.helm.sh/release-name=perf-ptaas-assets. Modifica questa annotazione 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
      Assicurati che OCLCM rivendichi il progetto forzatamente:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest lcm.private.gdc.goog/claim-by-force=true
    3. Verifica che il sottocomponente venga riconciliato nel cluster root-admin:
      kubectl get subcomponent -n gdchservices perf-ptaas