Artifact Registry
Errore di riconciliazione del sottocomponente sar-failoverregistry
Versioni: 1.13.1, 1.13.3, 1.13.4
Sintomi:quando crei il cluster di amministrazione principale con il comando gdcloud system admin-cluster install, l'operazione potrebbe non riuscire se è presente un lungo elenco di server durante il bootstrapping. Il messaggio di output dell'errore è il seguente:
Secret "sar-failoveregistry-backend-parameter" is invalid: data: Too long: must have at most 1048576 bytes
Soluzione alternativa:per risolvere il problema, segui questi passaggi:
Nello stesso cluster Kubernetes del sottocomponente, elenca i server e verifica che ogni risorsa personalizzata del server abbia un'etichetta con la chiave
cluster.private.gdc.goog/inventory-machine:kubectl get servers -n gpc-systemTrova la risorsa personalizzata del componente simile alla seguente:
apiVersion: lcm.private.gdc.goog/v1 kind: Component metadata: creationTimestamp: "2025-01-06T12:00:41Z" generation: 1 name: sar-v1.14.2-sar-acbf97caf6 resourceVersion: "3199" uid: 681ec5cb-9eb3-423b-ac1d-f6aa27abfd75 spec: name: sarNella risorsa personalizzata del componente System Artifact Registry (SAR), aggiungi il selettore di etichette nei server
runtimeParameterSourcespersar-failover-registry:Visualizza la risorsa
serveresistente:servers: targetCluster: Local object: apiVersion: system.private.gdc.goog/v1alpha1 kind: ServerList namespace: gpc-systemAggiorna il campo dei server nella risorsa personalizzata del componente:
servers: targetCluster: Local object: apiVersion: system.private.gdc.goog/v1alpha1 kind: ServerList namespace: gpc-system labelSelector: - key: cluster.private.gdc.goog/inventory-machine operator: "in" strValues: - "bm-1" - "bm-2" - "bm-3"
Verifica che le modifiche nel componente SAR del passaggio precedente vengano propagate al sottocomponente
sar-failverregistry:Visualizza i dettagli del componente SAR:
kubectl get component | grep sarVisualizza i dettagli del componente
sar-failoverregistry:kubectl get subcomponent sar-failoverregistry -n rootUtilizza il flag
-nper specificare lo spazio dei nomi.
Backup e ripristino
Gli snapshot non riescono a causa di spazio del volume insufficiente
Versioni: tutte le versioni 1.13.x
Sintomi:si verifica un problema intermittente con il backup del volume permanente che può influire sui flussi di lavoro dei job di backup periodici. Per alcuni volumi con un tasso di modifica elevato, gli snapshot del volume creati per i backup in corso possono causare l'esaurimento dello spazio del volume, che viene quindi impostato in modalità di sola lettura.
Soluzione alternativa: per evitare potenziali conseguenze sui workload di produzione, segui i passaggi nel runbook BACK-R0104. Se vuoi, puoi anche rimuovere gli snapshot accumulati seguendo il runbook BACK-R0106.
Riavvio dei pod dell'agente e del control plane a causa di memoria insufficiente
Versioni: tutte le versioni 1.13.x
Sintomi:i pod dell'agente e del control plane potrebbero riavviarsi se esauriscono la memoria.
Soluzione alternativa: aumenta la memoria per i pod del control plane e dell'agente seguendo le istruzioni nel runbook BACK-R0005. Aumenta la memoria per i pod a 2 GiB.
Il backup non riesce per lo snapshot PVC
Versioni: tutte le versioni 1.13.x
Sintomi:si sono verificati errori di backup a causa del superamento del limite di snapshot ONTAP di 1023 per risorsa
PersistentVolumeClaim (PVC).
Soluzione alternativa: Per risolvere il problema, segui questi passaggi:
Aggiorna il piano di backup in modo che i limiti non vengano mai raggiunti. Configura un piano di backup per eseguire il backup ogni ora o riduci il valore di
deleteLockDaysa tre in modo che il numero di snapshot non superi 1023:apiVersion: backup.gdc.goog/v1 kind: BackupPlan metadata: name: test-backup-plan spec: clusterName: system-cluster backupSchedule: cronSchedule: "*/10 * * * *" paused: false backupConfig: backupScope: selectedApplications: namespacedNames: - name: test-protected-application namespace: release-namespace backupRepository: gdchservices-backup-repository includeVolumeData: true volumeStrategy: LocalSnapshotOnly retentionPolicy: backupDeleteLockDays: LOCK_DAYS backupRetainDays: RETENTION_DAYSSostituisci quanto segue:
LOCK_DAYS: blocca l'eliminazione del backup per il numero di giorni specificato dopo la creazione del backup. Utilizza i seguenti valori:- Se il campo
volumeStrategyè impostato sul valoreLocalSnapshotOnly, utilizza il valore2. - Se il campo
volumeStrategyè impostato sul valoreProvisionerSpecific, utilizza il valore7.
- Se il campo
RETENTION_DAYS: elimina i backup dopo il numero di giorni specificato dopo la creazione del backup. Se il campovolumeStrategyè impostato su un valoreLocalSnapshotOnly, utilizza un valore inferiore a3.
Per eliminare manualmente gli snapshot in eccesso dal tuo ambiente utilizzando i comandi di eliminazione degli snapshot del volume, segui questi passaggi:
Inizializza le variabili:
export RKCNF=/root/release/root-admin/root-admin-kubeconfig export KCNF=/root/release/org-admin/gdchservices-admin-kubeconfig export ORG_NAME=ORG_NAME export PVC=PVC_NAMESostituisci quanto segue:
ORG_NAME: il nome della tua organizzazione.PVC_NAME: il nome della risorsaPVCcorrelata al piano di backup.
NetApp ONTAP è un sistema operativo utilizzato per amministrare lo spazio di archiviazione per GDC. Ottieni l'accesso a ONTAP:
export USERNAME="$(kubectl --kubeconfig ${RKCNF?} -n gpc-system get secret storage-root-level1 -o jsonpath='{.data.username}' | base64 -d)" export MGMT_IP="$(kubectl --kubeconfig ${RKCNF?} get storagecluster -A -o jsonpath='{.items[0].spec.network.clusterManagement.ip}')" export PASSWORD="$(kubectl --kubeconfig ${RKCNF?} -n gpc-system get secret storage-root-level1 -o jsonpath='{.data.password}' | base64 -d)" echo $PASSWORDElenca tutti gli snapshot per la risorsa
PVCselezionata:ssh ${USERNAME?}@${MGMT_IP?} "volume snapshot show -vserver ${ORG_NAME?} -fields volume,snapshot,size,create-time" | grep "snapshot-" > /tmp/snapshot_unsort.listUtilizza la password del passaggio precedente per accedere alla macchina all'indirizzo IP definito dalla variabile
MGMT_IP.Trova il PVC con il numero più alto di snapshot:
grep ${ORG_NAME?} /tmp/snapshot_unsort.list | grep snapshot | awk '{print $2}' | sort | uniq -cImposta il nome della risorsa
PVCsu quello con il numero elevato di snapshot:export PV_NAME=Elimina lo snapshot per la risorsa
PVCche contiene un numero elevato di snapshot. Il limite per il numero di snapshot per una risorsaPVCè 1023:for snap_name in `grep ${ORG_NAME?} /tmp/snapshot_unsort.list | grep snapshot | grep ${PV_NAME?} | awk '{print $3}'` do echo "volume snapshot delete -vserver ${ORG_NAME} -volume ${PV_NAME} -snapshot $snap_name" echo "Y" doneAccedi a ONTAP ed esegui questi comandi per eliminare lo snapshot:
echo $PASSWORD #Use this password to login to ontap ssh ${username?}@${mgmt_ip?}Esegui i comandi elencati nel passaggio precedente per eliminare lo snapshot. Al termine, esci dalla sessione SSH
Ripeti i passaggi di eliminazione finché tutti gli snapshot
PVCincriminati non vengono puliti.
Ripristino da un backup incompatibile con la quota SVM
Versioni: 1.13.1
Sintomi:il problema è un'incompatibilità tra le funzionalità NetApp. Questa incompatibilità impedisce la distribuzione della quota tenant e l'implementazione corretta dei ripristini. Il problema si verifica solo quando viene ripristinato un backup in un cluster utente con quota limitata.
Soluzione alternativa:se si verifica questo problema, il ripristino non riesce e viene visualizzato il messaggio di errore DP volumes are not supported on storage-limit enabled Vserver. L'operatore dell'infrastruttura deve disattivare la quota per il cluster utente e riavviare la procedura di ripristino. Al termine del ripristino, l'IO deve riattivare le quote tenant e il sistema dovrebbe continuare a funzionare come previsto. Per ulteriori dettagli, consulta il runbook FILE A0030.
Fatturazione
Le metriche di fatturazione non vengono visualizzate correttamente nella dashboard di fatturazione
Versioni: 1.13.1
Sintomi:le metriche di fatturazione non vengono emesse correttamente in Cortex a causa della mancanza di MetricsProxySidecar.
Soluzione: crea una risorsa billing-monetizer MetricsProxySidecar. Quindi, esegui uno script per aggiornare metricExpression.
Esporta la seguente variabile kubeconfig:
export KUBECONFIG=KUBECONFIG_PATHSostituisci la variabile
KUBECONFIG_PATHcon il percorso del file kubeconfig per il cluster di amministrazione dell'organizzazione. Segui i passaggi descritti in Service-manual IAM-R0101 per generare il filekubeconfigrichiesto per questa soluzione alternativa.Crea una risorsa
billing-monetizerMetricsProxySidecarper gli spazi dei nomibilling-systemepartner-billing-system:Per
billing-system:cat <<EOF | kubectl --kubeconfig=$KUBECONFIG apply -n billing-system -f - apiVersion: monitoring.private.gdc.goog/v1alpha1 kind: MetricsProxySidecar metadata: name: billing-monetizer namespace: billing-system annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep spec: restartUninjectedPods: true restartUnsyncedPods: false sources: - port: 8080 scrapeInterval: 60s destinations: - certificate: secretName: billing-monetizer-monitoring-target-infra-obs-cert port: 9090 - certificate: secretName: billing-monetizer-monitoring-target-platform-obs-cert port: 9091 --- apiVersion: monitoring.private.gdc.goog/v1alpha1 kind: MetricsProxySidecar metadata: name: usagemetering namespace: billing-system annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep spec: restartUninjectedPods: true restartUnsyncedPods: false sources: - port: 8099 scrapeInterval: 60s destinations: - port: 9090 certificate: secretName: bil-usagemetering-monitoring-target-cert EOFPer
partner-billing-system:cat <<EOF | kubectl --kubeconfig=$KUBECONFIG apply -n partner-billing-system -f - apiVersion: monitoring.private.gdc.goog/v1alpha1 kind: MetricsProxySidecar metadata: name: billing-monetizer namespace: partner-billing-system annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep spec: restartUninjectedPods: true restartUnsyncedPods: false sources: - port: 8080 scrapeInterval: 60s destinations: - certificate: secretName: billing-monetizer-monitoring-target-infra-obs-cert port: 9090 EOFEsegui lo script seguente per aggiornare
metricExpression. In questo modo,container_name="monetizer"viene rimosso daskuconfig, che includebilling_total_cost{container_name="monetizer":cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig bc73-b150-e0ea --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"BC4D-B784-EA3C|BC73-B150-E0EA|BD0C-C8CF-658B|BD1A-9464-9DF9|BD5A-044C-4860|BDB4-6C62-00BE|BDB4-BBA6-3EEE|3034-EE51-7404|3160-1596-5D9B|54AD-8EBC-8BB1\"}\n [{{.Range}}:1m] ) ) * max(metering_premium_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig bd1a-9464-9df9 --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"BC4D-B784-EA3C|BC73-B150-E0EA|BD0C-C8CF-658B|BD1A-9464-9DF9|BD5A-044C-4860|BDB4-6C62-00BE|BDB4-BBA6-3EEE|3034-EE51-7404|3160-1596-5D9B|54AD-8EBC-8BB1\"}\n [{{.Range}}:1m] ) ) * max(metering_enhanced_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig b93c-effb-6d6b --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_premium_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig b871-c5e5-bac1 --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_enhanced_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig ba38-e4be-ba5d --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_enhanced_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig bbe8-7b7a-03de --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_premium_support_base_fee)" } } ] }' EOF
L'utente non riesce a creare BillingAccountBinding a causa di bug nel webhook di convalida
Versioni: 1.13.0, 1.13.1, 1.13.3
Sintomi:il bug si trova nella logica del webhook di convalida BillingAccountBinding. Se un utente tenta di creare una risorsa BillingAccountBinding, il webhook restituisce l'errore permission denied.
Soluzione alternativa:per creare risorse BillingAccountBinding, notifica all'operatore dell'infrastruttura e crea le risorse corrispondenti tramite IAC.
Archiviazione a blocchi
I pod Grafana sono bloccati nello stato Init a causa di errori di montaggio del volume.
Versioni: 1.13.3
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:
Controlla il PVC per un deletionTimestamp. Se non è presente alcun deletionTimestamp (migrazione dei pod), segui questi passaggi:
- Controlla
VolumeAttachmentperPVCper identificare a cosa è attualmente collegato il volume. - Isola il
Nodesnel cluster che non corrisponde a questo valore. - Elimina
Podnon riuscito. In questo modo, verrà eseguita la migrazione di nuovo aNodeoriginale.
Dopo aver eseguito il controllo, se è presente un deletionTimestamp (eliminazione del volume), segui questi passaggi:
- Controlla
VolumeAttachmentperPVCper identificare a cosa è attualmente collegato il volume. Su
Node, restituisci i contenuti del file di monitoraggio:cat /var/lib/trident/tracking/PVC_NAME.jsonVerifica che il dispositivo LUKS trovato nel campo
devicePathdell'output del file di monitoraggio sia effettivamente chiuso. Questo percorso non dovrebbe esistere a questo punto:stat DEVICE_PATHVerifica se il numero di serie è attualmente mappato a un dispositivo multipath.
Copia il valore nel campo
iscsiLunSerialdel file di monitoraggio.Converti questo valore nel valore esadecimale previsto:
echo 'iISCSILUNSERIAL' | xxd -l 12 -psCon questo nuovo valore, verifica se la voce multipath esiste ancora:
multipath -ll | grep SERIAL_HEXSe non esiste, elimina il file di monitoraggio.
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_SERIALQuindi, 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
I pod di avvio della macchina virtuale non riescono a mappare i volumi
Versioni: 1.13.1
Sintomi:
Potresti visualizzare un avviso simile a questo:
Warning FailedMapVolume 2m50s (x206 over 13h) kubelet MapVolume.SetUpDevice failed for volume "pvc-2a68356a-47da-422b-8781-15e3a6fe7ec9" : rpc error: code = DeadlineExceeded desc = context deadline exceeded
Per diagnosticare il problema:
- Assicurati che i volumi e i pod si trovino sullo stesso nodo.
- Trova il nodo su cui si trovano i pod e controllane l'integrità.
- Controlla la connettività dei nodi.
- Controlla IPSEC.
- Controlla il percorso multiplo per verificare se è presente un zombie.
Controlla i log di Trident per scoprire quale passaggio del flusso CSI potrebbe aver introdotto questo zombie:
kubectl --kubeconfig /root/release/system/org-1-system-cluster logs -n netapp-trident -c trident-main
Soluzione alternativa: per risolvere il problema, segui i passaggi riportati nei seguenti runbook:
- Per problemi relativi ai nodi, consulta il runbook FILE-R0010.
- Per problemi relativi a IPSEC, consulta il runbook FILE-R0007.
- Per problemi relativi alle LUN zombie, consulta il runbook FILE-R0020.
- Per problemi relativi ai super zombie LUN, consulta il runbook FILE-R0021.
Errori relativi allo spazio di archiviazione
Versioni: 1.13.1
Sintomi: gli errori relativi allo spazio di archiviazione possono essere identificati dall'attivazione dell'avviso file_block_zombie_luns_present o dall'impossibilità di avviare il pod a causa di un problema nella chiamata MountVolume che persiste per più di un ciclo di riconciliazione. Il timeout potrebbe durare circa due minuti.
La ripetizione dello stesso errore indica che si è verificato un problema nel percorso CSI NodeStage o NodePublish e richiede una soluzione alternativa. L'unica
eccezione è l'indicazione di un errore di timeout. Potresti visualizzare alcuni errori
come questo:
NMountVolume.SetUp failed for volume "pvc-a63313b2-3e30-4c92-b074-f9fffe0500a4" : rpc error: code = Internal desc = unable to mount device; exit status 32
MapVolume.SetUpDevice failed for volume "pvc-f594b0c7-a5b5-4a5b-8a53-bf13e95c4bb0" : rpc error: code = Internal desc = rpc error: code = Internal desc = failed to stage volume: multipath device not found when it is expected
MapVolume.SetUpDevice failed for volume "pvc-f594b0c7-a5b5-4a5b-8a53-bf13e95c4bb0" : rpc error: code = Internal desc = rpc error: code = Internal desc = failed to stage volume: failure when reconfiguring multipath
Soluzione:
Per verificare se il
Nodeche contienePodpuò essere corretto perPVCnon riuscito, isola il nodo corrente in cui è pianificato il pod ed eliminaPod:KUBECONFIG=CLUSTER_KUBECONFIG kubectl cordon node TARGET_NODEPoddeve essere pianificato per unNodecompletamente diverso, il che comporta l'esecuzione forzata di NodeStage, NodePublish, NodeUnpublish e NodeUnstage. Potrebbe non essere possibile risolvere immediatamente il problema del volume perché potrebbero essere ancora aperte sessioni per questo volume sulNodeoriginale.Una volta completato il passaggio precedente, rimuovi la protezione del nodo in questione:
KUBECONFIG=CLUSTER_KUBECONFIG kubectl uncordon node TARGET_NODESe gli errori sono ancora presenti, isola tutti gli altri
Nodestranne quello in cui era originariamente pianificato ilPoded elimina ilPod. In questo modo,Podinizierà a essere eseguito sulNodeoriginale, dove potrebbero ancora essere presenti dispositivi esistenti.Una volta completato il passaggio precedente, rimuovi la protezione dei nodi in questione.
Come ultimo tentativo per salvare
PVe i relativi dati,Nodepuò essere riavviato per eliminare gli errori multipath, udev e devmapper suNode. Sebbene questo passaggio sia piuttosto arduo, è quello che ha maggiori probabilità di riuscita.Se le mitigazioni precedenti non riescono a risolvere il problema con il volume, significa che i dati sono stati danneggiati e sono inutilizzabili. L'unica opzione rimasta per continuare con il comportamento previsto del container è eliminare
PV,PVCePodnon riusciti, seguito da un riavvio del nodo in cui era ospitato il PV. Questa azione comporta la perdita completa dei dati già scritti nel volume.
Volumi permanenti creati con dimensioni errate
Versioni: 1.13.1
Sintomi: i carichi di lavoro con un volume permanente vengono creati con dimensioni inferiori di circa 16 MiB. Se i carichi di lavoro dipendono esattamente dalle dimensioni
pubblicizzate da un volume persistente, la piccola discrepanza fa sì che il carico di lavoro
non vada a buon fine durante l'espansione o il provisioning. Questo problema è più probabile per i volumi permanenti di cui è stato eseguito il provisioning con una classe di archiviazione standard-block rispetto a quelli di cui è stato eseguito il provisioning con una classe di archiviazione standard-rwo. Questo problema potrebbe
verificarsi su volumi permanenti con una classe di archiviazione standard-rwo che utilizza la modalità
volumemode:block.
Soluzione alternativa: alloca un volume persistente di almeno 16 MiB più grande di quello effettivamente richiesto.
Impossibile eliminare la macchina virtuale di archiviazione
Versioni: 1.13.1
Sintomi: il StorageVirtualMachine potrebbe mostrare un errore come questo:
Warning SVMDeletion 27m (x32 over 4h9m) StorageVirtualMachine Reconcile error for svm deletion: failed to delete svm: failed to delete svm volumes: failed to call VolumeCollectionGet: error message: "SVM \"org-2-user\" does not exist. "; error target: "svm.name"
Soluzione alternativa: elimina il finalizer da StorageVirtualMachines nello spazio dei nomi dell'organizzazione.
La disattivazione dell'organizzazione non comporta la pulizia delle risorse
Versioni: 1.13.1
Sintomi: quando si disattiva un'organizzazione, rimangono alcune risorse StorageVirtualMachines, ad esempio:
- gpc-system secret/org-2-admin-backup-agent-cert-secret
- gpc-system secret/org-2-admin-client-cert-secret
- gpc-system secret/org-2-admin-server-cert-secret
- gpc-system secret/org-2-admin-svm-credential
- gpc-system secret/org-2-admin-backup-agent-cert-secret
- gpc-system secret/org-2-admin-client-cert-secret
- gpc-system secret/org-2-admin-server-cert-secret
- gpc-system secret/org-2-admin-svm-credential
Soluzione: elimina queste risorse.
Errore di riconciliazione dell'eliminazione
Versioni: 1.13.1
Sintomi: quando un StorageVirtualMachine viene eliminato prima della pulizia dei
cluster a seconda di quel StorageVirtualMachine, è possibile che si verifichi un
problema di pulizia di alcuni volumi persistenti (PV) dei cluster. Nello specifico,
quando i PV criptati con LUKS non vengono puliti, il loro secret impedisce l'eliminazione del
namespace in cui si trovano. Nei log potrebbe essere visualizzato un avviso simile al seguente:
Warning ReconcileBackoff 5m35s (x6 over 88m) ClusterLifecycleReconciler cluster namespace deletion is not completed: deletion is still ongoing for namespace: /g-org-2-shared-service-cluster
Soluzione alternativa:elimina il finalizzatore dai secret g-luks-gdc-vm-disk-* nello spazio dei nomi del cluster di servizio.
L'upgrade bare metal è bloccato
Versioni: 1.13.1, 1.13.5, 1.13.6
Sintomi:i job Ansible si bloccano durante la raccolta dei fatti quando sono presenti
LUN zombie. L'esecuzione del comando multipath -ll potrebbe mostrare il seguente problema:
3600a098038314955593f574669785635 dm-11 NETAPP,LUN C-Mode
size=1.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| |- 5:0:0:10 sdaf 65:240 failed faulty running
| `- 6:0:0:10 sdau 66:224 failed faulty running
`-+- policy='service-time 0' prio=0 status=enabled
|- 7:0:0:10 sdad 65:208 failed faulty running
`- 8:0:0:10 sdar 66:176 failed faulty running
Potresti anche visualizzare il seguente messaggio di errore:
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv PLAY [Check inventory] *********************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv TASK [set_fact] ****************************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv Wednesday 03 July 2024 01:39:04 +0000 (0:00:00.018) 0:00:00.018 ********
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv ok: [10.252.151.3]
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv PLAY [Verify inventory]********************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv TASK [assert]******************************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv Wednesday 03 July 2024 01:39:04 +0000 (0:00:00.031) 0:00:00.050 ********
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv ok: [localhost]
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv PLAY [all] *********************************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv TASK [Gathering Facts] *********************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv Wednesday 03 July 2024 01:39:04 +0000 (0:00:00.064) 0:00:00.114 ********
Soluzione alternativa: controlla la connettività SSH con il nodo di destinazione, quindi utilizza il seguente runbook: FILE-R0020.
Errore multi-allegato Trident
Versioni: 1.13.3
Sintomi: i pod e i PVC potrebbero essere bloccati su nodi diversi con il pod bloccato durante l'inizializzazione in attesa del PVC.
Soluzione temporanea:
Controlla la PVC per un
deletionTimestamp:kubectl --kubeconfig KUBECONFIGget pvc -n <namespace> | grep deletionTimestampSe non è presente
deletionTimestamp(migrazione del pod):- Controlla VolumeAttachment per il PVC per identificare dove è collegato il volume.
- Isola i nodi nel cluster che non corrispondono a questo valore.
- Elimina il pod non riuscito. Questa azione esegue la migrazione del pod al nodo originale.
Se è presente un
deletionTimestamp(eliminazione del volume):- Controlla VolumeAttachment per il PVC per identificare dove è collegato il volume.
- Nel nodo, restituisci i contenuti del file di monitoraggio,
/var/lib/trident/tracking/PVC_NAME.json. - Verifica che il dispositivo LUKS trovato nel campo devicePath dell'output del file di monitoraggio sia effettivamente chiuso. Questo percorso non dovrebbe esistere
a questo punto:
stat DEVICE_PATH. Se il percorso esiste ancora, si verifica un problema diverso. - Verifica se il numero di serie è mappato a un dispositivo multipath.
- Copia il valore nel campo iscsiLunSerial del file di monitoraggio.
- Converti questo valore nel valore esadecimale previsto:
echo ISCSI_LUN_SERIAL | xxd -l 12 -ps - Con questo nuovo valore, verifica se la voce multipath esiste ancora:
multipath -ll | grep SERIAL_HEX. - Se non esiste, elimina il file di monitoraggio.
Se esiste, vedrai un valore esadecimale seriale leggermente più lungo di quello che hai cercato. Registra questo valore come MULTIPATH_SERIAL. Esegui
multipath -ll MULTIPATH_SERIALe visualizzi un messaggio simile a questo:3600a09803831486f2d24575445314678 dm-32 NETAPP,LUN C-Mode size=8.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 1:0:0:12 sde 8:64 active ready running | `- 2:0:0:12 sdt 65:48 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 3:0:0:12 sdbc 67:96 active ready running `- 4:0:0:12 sdbe 67:128 active ready runningEsegui questi comandi:
systemctl restart iscsidsystemctl restart multipathdmultipath -f MULTIPATH_SERIALecho 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
Esegui l'ultimo comando in modo univoco per ogni dispositivo a blocchi.
Errore nella configurazione IPsec
Versioni: 1.13.4
Sintomi: la configurazione IPsec di ONTAP rileva un errore a causa di una
chiave precondivisa (PSK) non valida contenente 0X, che viene interpretata come
stringa esadecimale.
Potresti visualizzare un avviso come questo:
Warning ONTAPIPSecConfiguration 3m47s (x22 over 75m) StorageEncryptionConnection Reconcile error on ONTAP IPSec configuration: failed to call IpsecPolicyCreateDefault: error message: "The specified pre-shared key \"0XxBDkG8iHoAlOc
nCUfHl0AKYzClgGCH\" is not valid because it is not a valid hexadecimal string."; error target: ""
Soluzione temporanea:
Recupera le connessioni di crittografia dello spazio di archiviazione:
kubectl get Storageencryptionconnections --kubeconfig ROOT_ADMIN_KUBECONFIGCerca la voce con
Ready=Falsee annota il nome diPRESHAREKEY. L'output potrebbe essere simile a questo esempio:NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE vm-5a77b2a2 vm-5a77b2a2 gpu-org-user 192.0.2.0/27 vm-5a77b2a2-pre-shared-key False 26hQuesta macchina esegue un'organizzazione GPU, quindi elimina
secrets gpc-system/vm-5a77b2a2-pre-shared-keyingpu-org-admin.Attendi che il sistema ricrei
secret/vm-5a77b2a2-pre-shared-key.Cerca un job con un pattern come
gpc-system/os-policy-config-host-ipsec-vm-5a77b2a2. Tieni presente che gli ultimi 8 caratteri vengono generati in modo casuale. Quando la chiave sarà di nuovo disponibile, elimina il job, ad esempiojobs gpc-system/os-policy-config-host-ipsec-vm-5a77b2a2m8xdlingpu-org-admin.
La macchina virtuale di archiviazione non è stata creata
Versioni: 1.13.5
Sintomi:il servizio Harbor su gpu-org non viene avviato a causa di un problema
con il provisioning dei volumi. Questo problema è causato dal pod file-storage-backend-controller
che fa riferimento a una macchina di inventario inesistente.
Potresti visualizzare un errore del controller di archiviazione simile a questo, che indica che
InventoryMachine non è stato trovato:
{"ts":1730135301218.1772,"caller":"controller/controller.go:329","msg":"Reconciler error","controller":"StorageEncryptionConnectionGenerator","controllerGroup":"baremetal.cluster.gke.io","controllerKind":"InventoryMachine","InventoryMachine":{"n
ame":"vm-26c89d33","namespace":"@org-1/org-1-admin"},"namespace":"@org-1/org-1-admin","name":"vm-26c89d33","reconcileID":"48ab38a8-385d-4fdb-bd7e-1212f287379c","err":"InventoryMachine.baremetal.cluster.gke.io \"vm-26c89d33\" not found"}
Soluzione temporanea:
- Elimina il pod
file-storage-backend-controller. - Consenti al controller di archiviazione di recuperare nuovamente le macchine di inventario presenti.
Le reti intercluster di archiviazione non vengono riconciliate
Versioni: 1.13.5, 1.13.6
Sintomi: dopo un upgrade, la risorsa personalizzata StorageCluster nel cluster di amministrazione root non diventa pronta a causa di una configurazione errata delle subnet intercluster nella specifica. Il cluster di archiviazione segnala Not Ready e include un evento con questo errore:
Reconciler error: failed to configure additional networks: failed to configure intercluster LIF: the \"\" Kind is not currently supported
Se si verifica questo errore, la rivendicazione della subnet intercluster utilizzata dal cluster di archiviazione non include il campo kind nel riferimento. Se esamini la risorsa personalizzata
StorageCluster, troverai un riferimento alla richiesta di subnet intercluster
con solo un nome e uno spazio dei nomi, ad esempio:
spec:
additionalNetworks:
- destinationSubnets:
- 10.252.112.0/20
name: backup-agent-storage-network
port: a0a
subnetConfig:
subnetClaimRef:
name: file-block-storage-intercluster-lif-subnet
namespace: root
types:
- BackupAgent
Soluzione alternativa: aggiorna la specifica StorageCluster in modo da includere il campo kind: SubnetClaim nel riferimento alla richiesta di subnet:
spec:
additionalNetworks:
- destinationSubnets:
- 10.252.112.0/20
name: backup-agent-storage-network
port: a0a
subnetConfig:
subnetClaimRef:
kind: SubnetClaim
name: file-block-storage-intercluster-lif-subnet
namespace: root
types:
- BackupAgent
Dopo aver aggiornato la specifica StorageCluster, riavvia il
deployment file-storage-backend-controller e verifica che il cluster di archiviazione
sia pronto.
Gestione dei cluster
Il job machine-init non riesce durante il provisioning del cluster
Versioni: 1.13.1
Sintomi:
Durante il provisioning del cluster, il job
machine-initdel 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".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:
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 jobmachine-init, ma prima dell'esecuzione successiva del jobmachine-init, poichémachine-initsovrascrive l'autorizzazione riportandola alla radice.Riavvia
etcdnel secondo nodo per ripristinareetcdnel primo nodo da un loop di arresto anomalo.
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.
Nessuna connettività dal cluster di servizio al bucket di archiviazione di oggetti
Versioni: 1.13.1
Sintomi: la connessione per un pod di database in esecuzione nel cluster di servizio a un bucket di archiviazione oggetti nel cluster di amministrazione dell'organizzazione non riesce.
Soluzione: segui le istruzioni nel runbook KUB-R0305.
Il controllo preliminare non riesce
Versioni: 1.13.1
Sintomi: potresti visualizzare il seguente messaggio nello stato dell'oggetto cluster:
conditions:
message: Preflight check <cluster> failed
reason: PreflightCheckFailed
status: "False"
type: PreflightCheckSuccessful
Dovresti anche visualizzare un oggetto PreflightCheck corrispondente con lo stesso nome e
spazio dei nomi dell'oggetto cluster presente da diverse ore, mentre
l'errore o l'esito negativo indicato nell'oggetto PreflightCheck non è più
un problema.
Soluzione alternativa: elimina l'oggetto PreflightCheck.
La creazione del pool di nodi worker del cluster utente non riesce
Versioni: 1.13.5
Sintomi: la creazione del pool di nodi worker del cluster utente potrebbe smettere di rispondere per uno di questi tipi di macchine:
- n2-standard-16-gdc
- n2-standard-32-gdc
- n2-highmem-16-gdc
- n2-highmem-32-gdc
Soluzione alternativa: elimina il pool di nodi e ricrealo selezionando altri tipi di macchine disponibili dal menu a discesa dell'interfaccia utente di creazione del cluster utente.
I cluster di utenti, una volta ricreati, potrebbero rimanere bloccati nella riconciliazione a causa di una pulizia impropria
Versioni: 1.13.x
Sintomi: quando i cluster utente vengono creati con lo stesso nome di un cluster eliminato in precedenza, potrebbero rimanere bloccati in Reconciling all'infinito con lo stato che menziona la fase di installazione del componente aggiuntivo ONE.
Soluzione: disinstalla il componente aggiuntivo Helm
CLUSTER_NAME-abm-overrides e riavvia il
deployment managed-adm-controller. Segui
MKS-R0004
per la procedura dettagliata.
Servizio di database
Questa sezione contiene i problemi noti del servizio di database.
Clonazione del database AlloyDB Omni bloccata
Versioni: tutte le versioni 1.13.x
Sintomi: quando un utente clona un cluster AlloyDB Omni da un determinato momento nel tempo, il cluster di database clonato si blocca con l'errore DBSE0005 e non può diventare pronto. La risorsa restore.alloydb corrispondente è bloccata nella fase "ProvisionInProgress".
Soluzione alternativa: per risolvere il problema, scegli con attenzione il momento nel tempo da COMPLETETIME dei backup riusciti.
Elenca i backup di AlloyDB Omni disponibili da clonare sul server API di gestione.
kubectl get backups.alloydb -n source-dbcluster-namespace
Output di esempio:
NAMESPACE NAME PHASE COMPLETETIME
db1 backupplan1-20240908215001 Succeeded 2024-09-08T21:37:38Z
db1 backupplan1-20240909215001 Succeeded 2024-09-09T21:16:18Z
db1 backupplan1-20240910215001 Succeeded 2024-09-10T21:09:38Z
db1 backupplan1-20240911215001 Succeeded 2024-09-11T21:50:47Z
Scegli un valore COMPLETETIME come punto nel tempo per la clonazione. Tieni presente che l'orario è UTC.
L'applicazione delle IOPS influisce sulle prestazioni di archiviazione
Versioni: 1.13.1
Soluzione alternativa: per risolvere il problema, segui una di queste opzioni:
- Aumenta le dimensioni dello spazio di archiviazione.
- Esegui l'override della quota IOPS.
Errore di riconciliazione durante l'upgrade del componente secondario dbs-fleet
Versioni: 1.13.3
Sintomi: durante l'upgrade dell'organizzazione principale dalla versione 1.13.1 alla 1.13.3, potresti visualizzare un errore di riconciliazione. Controlla la presenza di errori di riconciliazione:
kubectl get subcomponent -n ${CLUSTER} -o json | jq -r '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'
L'errore potrebbe avere il seguente aspetto:
Sub-Component: dbs-fleet - Reconciliation error: E0121 - rollback chart: no ControlPlaneAgentsVersion with the name "alloydbomni-v0.12.46" found
Soluzione alternativa: segui i passaggi nel runbook OCLCM-R0122.
La creazione di DBCluster non riesce
Versioni: 1.13.3
Sintomi: dopo l'upgrade a 1.13.3, la riconciliazione dei nuovi DBcluster non riesce e viene visualizzato il seguente errore nello stato:
status:
criticalIncidents:
- code: DBSE0001
createTime: ""
message: Internal. General Controller Error.
resource:
component: controller-default
location: {}
stackTrace:
- component: controller-default
message: 'DBSE0001: Internal. General Controller Error. Failed to reconcile
Postgres DBCluster [<name>] DBSE0001: Internal.
General Controller Error. target release is empty in ModuleInstance <name>'
Soluzione temporanea
Verifica che nel cluster di amministrazione dell'organizzazione siano presenti localrollout CR che terminano sia con cpa-v0.12.46 che con cpa-v0.12.51. Ad esempio:
kubectl get localrollouts -A
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.46 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-13-8-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-14-5-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-15-2-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.51 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-13-8-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-14-5-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-15-2-v0.12.51--cpa-v0.12.51 true
Trova ed elimina i localrollout CR che terminano con cpa-v0.12.46, assicurandoti che gli altri localrollout CR rimangano invariati.
kubectl get localrollouts -A | grep cpa-v0.12.46
Dovrebbe essere restituito un elenco simile a questo:
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.46 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-13-8-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-14-5-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-15-2-v0.12.46--cpa-v0.12.46 true
Elimina ciascuno dei seguenti elementi:
kubectl delete -n dbs-fleet-system localrollout/dp-alloydbomni-15-5.2--cpa-v0.12.46
...
...
Verifica che i CR localrollout che terminano con cpa-v0.12.51 siano ancora presenti:
NAMESPACE NAME PAUSED IN PROGRESS FINISHED
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.51 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-13-8-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-14-5-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-15-2-v0.12.51--cpa-v0.12.51 true
DNS
DNSSEC deve essere disattivato esplicitamente in resolved.conf
Versioni: 1.13.1, 1.13.3, 1.13.4
Sintomi: la risoluzione DNS non riesce sui nodi bare metal o VM. Per verificare che la risoluzione DNS non riesca, stabilisci una connessione SSH al nodo interessato ed esegui systemctl status systemd-resolved. L'output contiene righe come
DNSSEC validation failed for question . IN SOA: no-signature.
Soluzione:
Aggiungi la seguente riga a
/etc/systemd/resolved.confsul nodo interessato.DNSSEC=falseRiavvia il servizio
systemd-resolved:systemctl restart systemd-resolved.service
Servizio portuale
Creazione del servizio Harbor non riuscita
Versioni: 1.13.6
Sintomi: la creazione di un'istanza Harbor non riesce a causa di una mancata corrispondenza dello spazio dei nomi causata
da una limitazione della lunghezza nel nome ServiceIsolationEnvironment. Potresti vedere
un messaggio simile a questo:
Failed to reconcile ODSDatabase: failed to create or update ODS ProjectNetworkPolicy: namespaces "g-dbs-PROJECT_NAME-HARBOR_INSTANCE_NAME" not found
Soluzione alternativa: abbrevia il nome dell'istanza Harbor per risolvere il problema attuale. Assicurati che la lunghezza combinata di PROJECT_NAME e HARBOR_INSTANCE_NAME sia inferiore a 27 caratteri.
L'eliminazione delle istanze di Harbor non comporta l'eliminazione dei mirror del registro associati
Versioni: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7, 1.13.8
Sintomi: l'eliminazione delle istanze di Harbor non comporta l'eliminazione dei mirror del registro associati. Il pool di nodi potrebbe essere bloccato nello stato Provisioning. Ciò è
causato dal fatto che i mirror del registro creati dal controller MHS non vengono
eliminati quando vengono eliminate le istanze Harbor.
Soluzione alternativa: Devi rimuovere manualmente i mirror del registro. Per mitigare il problema, segui questi passaggi:
- Connettiti al cluster di amministrazione dell'organizzazione. Per maggiori informazioni, consulta la pagina Architettura del cluster GDC.
Esegui questo script per rimuovere tutti i mirror del registro che corrispondono al valore della variabile di ambiente
HARBOR_INSTANCE_URLda tutti i cluster Kubernetes che hanno l'etichettalcm.private.gdc.goog/cluster-type=user:LABEL="lcm.private.gdc.goog/cluster-type=user" ENDPOINT=HARBOR_INSTANCE_URL while read -r out; do info=${out% *} ns_name=${info%:*} name=${ns_name##*/} ns=${ns_name%%/*} INDEX=$(kubectl get cluster user-vm-1 -n user-vm-1-cluster -ojson | jq '.spec.nodeConfig.registryMirrors | map(.endpoint=='\"$ENDPOINT\"') | index(true)') kubectl patch clusters "${name}" -n "${ns}" --type=json -p="[{'op': 'remove', 'path': '/spec/nodeConfig/registryMirrors/$INDEX'}]" done <<< $(kubectl get clusters -l "$LABEL" -o jsonpath="$JSONPATH" -A)Sostituisci
HARBOR_INSTANCE_URLcon l'URL dell'istanza Harbor.
Modulo di sicurezza hardware
Le licenze di prova HSM disattivate sono ancora rilevabili
Versioni: 1.13.1, 1.13.3-1.13.11
Sintomi: a causa di un problema noto esistente in CipherTrust Manager, le licenze di prova disattivate sono ancora rilevabili e potrebbero attivare avvisi di scadenza errati.
Soluzione alternativa: consulta HSM-R0003 per verificare le licenze normali attive ed eliminare le licenze di prova disattivate.
Perdita di descrittori di file host-daemon HSM
Versioni: 1.13.x
Sintomi: se gli HSM vengono eseguiti per più di 30 giorni, una perdita di descrittori di file può
causare l'interruzione della risposta del servizio host-daemon, con conseguente
errore ServicesNotStarted.
Soluzione: riavvia il servizio host-daemon. Per farlo, chiedi all'operatore dell'infrastruttura di connettersi all'HSM tramite SSH come utente ksadmin
ed esegui il seguente comando:
sudo systemctl restart host-daemon
Se non funziona, il tuo IO può riavviare l'HSM non integro.
Certificati HSM scaduti
Versioni: 1.13.11
Sintomi: quando esegui l'upgrade di un'organizzazione, potresti visualizzare un avviso come questo:
Warning Unsuccessful 50m OrganizationUpgrade 1 error occurred:
* UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn't after 13h45m23.442682119s, last message was: Cluster upgrade for system cluster: in-progress
org-1-system-cluster è bloccato in un upgrade della versione ABM a causa della scadenza dei certificati
HSM (Hardware Security Module).
Potresti anche visualizzare un errore come questo esempio in HPE server iLO, StorageGRID o ONTAP:
Not able to connect SSL to Key Manager server at IP_ADDRESS
Soluzione:
Ruota manualmente la CA radice e il certificato dell'interfaccia web con ksctl:
- Metti in pausa tutte le RP
HSM,HSMClustereHSMTenant. Crea una nuova CA radice con gli attributi copiati da quella precedente. Trova il vecchio ID cliente con
ksctl ca locals list. Un esempio potrebbe avere il seguente aspetto:ksctl ca locals create --cn example.com --copy-from-ca 6d7f7fa7-df81-44b7-b181-0d3e6f525d46 { "id": "b0516120-6b4c-40ed-93f4-35e9fdc690e7", "uri": "kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7", "account": "kylo:kylo:admin:accounts:kylo", "createdAt": "2025-06-04T18:46:25.728332Z", "updatedAt": "2025-06-04T18:46:25.728332Z", "state": "pending", "csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIHQMHgCAQAwFjEUMBIGA1UEAxMLZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAAR5pwW1UC1JNg79gkjK2rvnmgaZpGNwb4VxYN3dQCieHtHlYJUu\nQWk56RB9oPw4SKkf/Y1ZwEI4m2mx3d9XFHU7oAAwCgYIKoZIzj0EAwIDSAAwRQIh\nANWTPjkJNcY56lSARN714EBa1gLuvxJlMENVHKEbanooAiA1BQ3sz7mxykL/1t7v\nqRlIpxKGrhw56XC67vz4NvZ4Kg==\n-----END CERTIFICATE REQUEST-----\n", "subject": "/CN=example.com", "notBefore": "0001-01-01T00:00:00Z", "notAfter": "0001-01-01T00:00:00Z", "sha1Fingerprint": "21F033940A65657CC6C2C1EA0BB775F14FD5D193", "sha256Fingerprint": "31EF6E1316DF039F77DDDB051890CDEBBF67BBE8A14AEE04E01716D30DC90937", "sha512Fingerprint": "F200817829A23F30239C33DC2CED8C889954A252EBA2CC12A3977FD5F91239ED7A2A4CCF0EA3D90D50CEF7A779E5C487798AAC75617DB2F29AF7F4794AD66F17", "purpose": {} }Autofirma la nuova CA con una durata di un anno. Un esempio potrebbe essere il seguente:
ksctl ca locals self-sign --id b0516120-6b4c-40ed-93f4-35e9fdc690e7 -x 365 { "id": "b0516120-6b4c-40ed-93f4-35e9fdc690e7", "uri": "kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7", "account": "kylo:kylo:admin:accounts:kylo", "createdAt": "2025-06-04T18:46:25.728332Z", "updatedAt": "2025-06-04T18:52:51.976847092Z", "state": "active", "csr": "", "cert": "-----BEGIN CERTIFICATE-----\nMIIBbTCCAROgAwIBAgIRAMyQJHhs4i2uwj4ghilVFJQwCgYIKoZIzj0EAwIwFjEU\nMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMjUwNjAzMTg1MjUxWhcNMjYwNjA0MTg1\nMjUxWjAWMRQwEgYDVQQDEwtleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABHmnBbVQLUk2Dv2CSMrau+eaBpmkY3BvhXFg3d1AKJ4e0eVglS5BaTnp\nEH2g/DhIqR/9jVnAQjibabHd31cUdTujQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQ9uCnTZ+lHhiLx3f1xEn0+JC5J+TAKBggq\nhkjOPQQDAgNIADBFAiBsSiB5BRBJ8TZQ6O5TzMBgDoWzTZVMVXNLdZUiqHtcDwIh\nAOnqKNq5ytWLvMsBQKhulGgqqw1dccpkJJz01n3Smzyp\n-----END CERTIFICATE-----\n", "serialNumber": "271910941595574900448900837122680099988", "subject": "/CN=example.com", "issuer": "/CN=example.com", "notBefore": "2025-06-03T18:52:51Z", "notAfter": "2026-06-04T18:52:51Z", "sha1Fingerprint": "1114AF5ED6DF7D4A9F83A0F8DF5DFEF041A81622", "sha256Fingerprint": "93BAD9D44B320EFB446F65FE2A4F3A341147D15AF5315C000ADF644A3C1347A7", "sha512Fingerprint": "07386D7461B4013304CF0E0830517EA433E09EAB146A9F106F1B0DED4BBEC78BB4C89EAFAEC37178FE98AC4ACA234B98290D240607D5EA896F03DABF3DB56D5C", "purpose": { "client_authentication": "Enabled", "user_authentication": "Enabled" } }Aggiorna l'interfaccia web per utilizzare questa nuova CA per la generazione automatica dei certificati. Un esempio potrebbe avere il seguente aspetto:
ksctl interfaces modify --name web --auto-gen-ca-id kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7 { "id": "61aab814-2821-43ac-b652-41784b7b06bf", "name": "web", "mode": "tls-cert-opt-pw-opt", "cert_user_field": "CN", "auto_gen_ca_id": "kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7", "trusted_cas": { "local": [ "kylo:kylo:naboo:localca:6d7f7fa7-df81-44b7-b181-0d3e6f525d46" ] }, "createdAt": "2023-11-13T22:46:56.251881Z", "updatedAt": "2025-06-04T19:02:12.710563Z", "port": 443, "network_interface": "all", "interface_type": "web", "minimum_tls_version": "tls_1_2", "maximum_tls_version": "tls_1_3", "local_auto_gen_attributes": { "cn": "web.ciphertrustmanager.local", "dns_names": [ "web.ciphertrustmanager.local" ], ...Genera un nuovo certificato dell'interfaccia web, firmato dalla nuova CA. Il flag
--urlè l'IP di gestione dell'HSM (dakubectl get hsm -n gpc-system). Un esempio potrebbe avere il seguente aspetto:ksctl interfaces auto-gen-server-cert --name "web" --url=https://10.128.52.18 { "certificates": "-----BEGIN CERTIFICATE-----\nMIICljCCAjygAwIBAgIRANPuw/42oHZAb9nzAYnrf9MwCgYIKoZIzj0EAwIwFjEU\nMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMjUwNjAzMTkwOTU5WhcNMjYwNjA0MTg1\nMjUxWjBjMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVFgxDzANBgNVBAcTBkF1c3Rp\nbjEPMA0GA1UEChMGVGhhbGVzMSUwIwYDVQQDExx3ZWIuY2lwaGVydHJ1c3RtYW5h\nZ2VyLmxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEy9T8uGa/N9ruRJMy\nxy4an+G/OyZjB/8nth1BPxpw5orljbTuOh9toS9c9FiOuMQQ13mGJSImadLP33PR\ngdXcHaOCARwwggEYMA4GA1UdDwEB/wQEAwIDiDATBgNVHSUEDDAKBggrBgEFBQcD\nATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFD24KdNn6UeGIvHd/XESfT4kLkn5\nMGIGA1UdEQRbMFmCHHdlYi5jaXBoZXJ0cnVzdG1hbmFnZXIubG9jYWyBIXRlY2hu\naWNhbC5zdXBwb3J0QHRoYWxlc2dyb3VwLmNvbYcECoA0EocECgADAocErBMjAocE\nrBMLAjBeBgNVHR8EVzBVMFOgUaBPhk1odHRwOi8vY2lwaGVydHJ1c3RtYW5hZ2Vy\nLmxvY2FsL2NybHMvYjA1MTYxMjAtNmI0Yy00MGVkLTkzZjQtMzVlOWZkYzY5MGU3\nLmNybDAKBggqhkjOPQQDAgNIADBFAiEAusSKWMoFeTsK+OrbURch7XtMR31XD45E\n+w+wjf2VAk4CIAsHytphizTFQks4qqOMaHm6Ap58uU0HMNGSm0WW6mQY\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBbTCCAROgAwIBAgIRAMyQJHhs4i2uwj4ghilVFJQwCgYIKoZIzj0EAwIwFjEU\nMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMjUwNjAzMTg1MjUxWhcNMjYwNjA0MTg1\nMjUxWjAWMRQwEgYDVQQDEwtleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABHmnBbVQLUk2Dv2CSMrau+eaBpmkY3BvhXFg3d1AKJ4e0eVglS5BaTnp\nEH2g/DhIqR/9jVnAQjibabHd31cUdTujQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQ9uCnTZ+lHhiLx3f1xEn0+JC5J+TAKBggq\nhkjOPQQDAgNIADBFAiBsSiB5BRBJ8TZQ6O5TzMBgDoWzTZVMVXNLdZUiqHtcDwIh\nAOnqKNq5ytWLvMsBQKhulGgqqw1dccpkJJz01n3Smzyp\n-----END CERTIFICATE-----\n" }A questo punto,
openssl s_client -showcerts -connect 10.128.52.18:443 2>/dev/null | openssl x509 -textmostra ancora il vecchio certificato. Per recuperare il nuovo certificato, devi riavviare l'HSM.ssh -i ~/.ksctl/ssh-privatekey ksadmin@10.128.52.18 sudo rebootOra
openssl s_client -showcerts -connect 10.128.52.18:443 2>/dev/null | openssl x509 -textmostra il nuovo certificato.Elimina la vecchia CA dal CR HSM:
kubectl edit hsm zv-aa-hsm01 -n gpc-system and delete hsm.Spec.RootCACertificatesRiattiva l'HSM:
kubectl annotate hsm zv-aa-hsm01 -n gpc-system hsm.security.private.gdc.goog/paused-Assicurati che l'HSM diventi integro.
Ripeti questi passaggi per gli altri due HSM. Hanno già la nuova CA radice autofirmata perché la CA è condivisa tra gli HSM di un cluster. Salta i passaggi 2 e 3, ma ripeti i passaggi 4-8.
Segui l'attività HSM T0008 di rotazione CA per automatizzare la rotazione di tutti i certificati, ma salta il passaggio Finalizza la rotazione aggiungendo una nuova annotazione di rotazione a
hsmclusterin cui viene aggiuntoca-rotation-finalizing annotation.
Carica il nuovo nome della CA su iLO:
- Nell'interfaccia iLO, apri la pagina Administration - Key Manager (Amministrazione - Gestione chiavi) e fai clic sulla scheda Key Manager (Gestione chiavi).
- Ruota il nome del certificato.
- Esegui un riavvio a freddo.
- Verifica che l'handshake SSL ricominci a funzionare.
Gestione di identità e accessi
I pod gatekeeper-audit nello spazio dei nomi opa-system vengono riavviati di frequente
Versioni: 1.13.3
Sintomi: controlla lo stato dei pod gatekeeper-audit-*** nello spazio dei nomi
opa-system:
kubectl get pods/gatekeeper-audit-POD_ID -n opa-system-NAMESPACE_ID -n opa-system
L'output potrebbe essere simile a questo esempio:
NAME READY STATUS RESTARTS AGE
gatekeeper-audit-58d8c4c777-7hzvm 2/2 Running 987 (12h ago) 12d
Questo problema è causato da limiti di risorse bassi.
Infrastructure as Code (IaC)
La creazione eccessiva di token Gitlab rischia di riempire i database Gitlab
Versioni: 1.13.1
Sintomi: il sottocomponente iac-manager crea ripetutamente un nuovo token per l'utente configsync-ro, anche quando non è necessario. Ciò può comportare il riempimento del database Gitlab
e rendere inaccessibile IAC. Il pod pg-gitlab-database-0 nello spazio dei nomi gitlab-system
potrebbe non essere in grado di avviarsi e mostrare eventi come:
Warning Unhealthy 84s (x18 over 4m14s) kubelet Startup probe failed: /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
psql: error: connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: could not write init file
Soluzione temporanea:
Collabora con il tuo contatto Google per ottenere hotfix_3 per la release 1.13.1 e applicala.
Key Management System (KMS)
La modifica del tipo di chiave radice invalida tutte le chiavi esistenti
Versioni: 1.13.x
Sintomi:una volta creata un'organizzazione, il KMS viene automaticamente sottoposto a provisioning con una chiave root software. Per eseguire la migrazione da una chiave radice software a una chiave CTM, gli utenti eseguono l'override di un sottocomponente. In questo modo, il tipo di chiave radice viene modificato, il che invalida tutte le chiavi software esistenti nel KMS.
Soluzione alternativa: se possibile, evita di aggiornare il tipo di chiave principale. Se aggiorni il tipo di chiave principale, tutte le chiavi esistenti verranno invalidate.
kms-rootkey-controller CrashLoopBackOff a causa di OOMKILL
Versioni: 1.13.1
Sintomi:quando l'utilizzo della memoria kms-rootkey-controller supera il limite 600Mi, il controller entra in uno stato CrashLoopBackOff a causa di uno stato OOMKilled.
Soluzione:crea un SubcomponentOverride per aggiornare il limite di memoria a 1500Mi. Per istruzioni, vedi KMS Runbook 0007. Dopo aver completato i passaggi dei prerequisiti del runbook, esegui questi comandi:
Crea una risorsa personalizzata
SubcomponentOverride:cat << EOF > ~/kms-rootkey-subcomponentoverride.yamlNell'esempio seguente, viene visualizzata una risorsa personalizzata
SubcomponentOverridecompleta:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: kms-rootkey-subcomponentoverride namespace: root spec: subComponentRef: kms-rootkey-cm backend: operableParameters: resourcesLimit: memory: 1500Mi EOFApplica la risorsa
SubcomponentOverride:kubectl --kubeconfig ${KUBECONFIG:?} apply -f ~/kms-rootkey-subcomponentoverride.yaml kubectl --kubeconfig ${KUBECONFIG:?} describe subcomponentoverride kms-rootkey-subcomponentoverride -n root
Logging
Il logger di controllo dell'archiviazione degli oggetti non riesce a risolvere l'host DNS
Versioni: 1.13.x
Sintomi:
Nel cluster di amministrazione principale, il deployment obs-system/log-remote-logger contiene più errori come i seguenti:
E1220 17:00:25.247258 1 manager.go:183] Failed to fetch obj audit logs for gce-gpcstgesite01: failed to get authorization token for Grid Management API: Post "https://objectstorage-grid-mgmt.gpc-system.svc.cluster.local/api/v3/authorize": dial tcp: lookup objectstorage-grid-mgmt.gpc-system.svc.cluster.local: no such host
Soluzione alternativa: applica la patch al deployment di obs-system/log-remote-logger con il seguente comando:
kubectl --kubeconfig ${KUBECONFIG:?} patch deployment log-remote-logger -n obs-system -p '{"spec":{"template":{"spec":{"dnsPolicy":"ClusterFirstWithHostNet"}}}}'
HaaS Logger mostra errori nel cluster di amministrazione principale
Versioni: 1.13.x
Sintomi:
Nel cluster di amministrazione principale, il deployment obs-system/log-remote-logger contiene più errori come i seguenti:
E0109 17:33:08.917876 1 manager.go:156] Failed to run logger haas: Failed to get log targets: failed to list harborinstances in the cluster: failed to get API group resources: unable to retrieve the complete list of server APIs: artifactregistry.gdc.goog/v1: the server could not find the requested resource
Soluzione: esegui l'upgrade alla versione 1.13.8 per correggere l'errore. In alternativa, modifica il deployment di obs-system/log-remote-logger nel seguente modo:
Negli argomenti del container remote-logger, aggiorna il flag --disabled-loggers in modo da includere santricity e HaaS:
YAML
args:
- --disabled-loggers=santricity,haas
Santricity Logger non funziona
Versioni: 1.13.x
Sintomi:
Nel cluster di amministrazione principale, il deployment obs-system/log-remote-logger contiene più errori come i seguenti:
E0109 17:33:10.931737 1 manager.go:183] Failed to fetch santricity audit logs for lb-aa-objs01: failed to get CA cert: failed to get ClusterIssuer internal-root-ca-issuer: no kind is registered for the type v1.ClusterIssuer in scheme "pkg/logging/manager.go:32"
Soluzione: esegui l'upgrade alla versione 1.13.8 per correggere l'errore.
I log della destinazione di logging vengono inviati al progetto errato
Versioni: 1.13.x
Sintomi: i log di DaemonSet obs-system/oplogs-forwarder mostrano avvisi simili ai seguenti:
oplogs-forwarder-2xrfw [2025/01/16 21:02:09] [ warn] [output:loki:log_output_loki_dbs_fleet_system_dbs_fleet] Tenant ID is overwritten platform-obs -> infra-obs
oplogs-forwarder-kxf8p [2025/01/16 21:05:23] [ warn] [output:loki:log_output_loki_workbench_system_nws_lt] Tenant ID is overwritten infra-obs -> platform-obs
Questi avvisi comportano l'instradamento dei log al progetto (ID tenant) errato. Questo problema deriva da un bug noto in Fluent Bit. Per maggiori informazioni, vedi il problema di Fluent Bit su GitHub.
Soluzione: esegui l'upgrade alla versione 1.13.8 per correggere l'errore.
I log di controllo dello spazio dei nomi della piattaforma non sono visibili all'amministratore della piattaforma
Versioni: 1.13.x
Sintomi: i log di controllo dello spazio dei nomi della piattaforma sono visibili all'operatore dell'infrastruttura (IO) anziché all'amministratore della piattaforma (PA).
Soluzione alternativa: aggiungi manualmente l'etichetta observability.gdc.goog/auditlog-destination=pa allo spazio dei nomi platform in tutti i cluster dell'organizzazione. Per implementare questa soluzione alternativa manuale, segui questi passaggi:
Imposta
KUBECONFIGsul cluster di destinazione.Aggiungi l'etichetta richiesta allo spazio dei nomi:
KUBECONFIG=${KUBECONFIG:?} kubectl label namespace platform observability.gdc.goog/auditlog-destination=pa --overwriteVerifica che l'etichetta sia stata aggiunta correttamente:
KUBECONFIG=${KUBECONFIG:?} kubectl label namespace platform --list
I pod non riescono a inizializzare i container
Versioni: 1.13.x
Sintomi: la creazione dei pod non riesce e viene visualizzato un errore simile al seguente:
Events:
│ Type Reason Age From Message │
│ ---- ------ ---- ---- ------- │
│ Warning FailedCreatePodSandBox 10m (x2080 over 7h40m) kubelet Failed to create pod sandbox: mkdir /var/log/pods/org-1_managed-asm-local-readiness-xq75d_9a3275d7-5f16-4d67-8f4a-38fe0993be4a: no space left on device │
Questi errori impediscono l'avvio dei pod su un nodo specifico. Il comportamento osservato deriva da un caso limite noto in cui il file di stato logrotate-daemon viene bloccato, impedendo al daemon di eseguire la rotazione dei file prevista. Per confermare questo errore, segui questi passaggi:
Imposta
KUBECONFIGsul cluster di destinazione.Identifica l'istanza
anthos-audit-logs-forwarder-xxxxpianificata sul nodo.KUBECONFIG=${KUBECONFIG:?} kubectl get po -n obs-system -o wide | grep anthos-audit-logs-forwarderRecupera i log dall'istanza
anthos-audit-logs-forwarder-xxxxpianificata sul nodo da verificare.KUBECONFIG=${KUBECONFIG:?} kubectl logs -n obs-system anthos-audit-logs-forwarder-xxxx -c logrotate-daemon | grep "state file /var/lib/logrotate/status is already locked"
Soluzione:
Per risolvere il problema, segui questi passaggi:
Esegui il recupero manuale dello spazio su disco nella directory
/var/logdel nodo.Imposta
KUBECONFIGsul cluster di destinazione.Identifica il nodo di destinazione nel cluster.
KUBECONFIG=${KUBECONFIG:?} kubectl get no -o wideConnettiti al nodo utilizzando SSH e libera manualmente spazio nella directory
/var/logsul nodo.logrotategestisce i file in queste directory./var/log/audit/*/*/*/audit.log /var/log/audit*/*/*.log /var/log/auditproxy-*/*.log /var/log/global-api-*/audit.log /var/log/ceph/ceph.audit.log /var/log/fanout/audit/*.log /var/log/fanout/audit/*/*.log /var/log/netflow/*.log /var/log/fanout/operational/*.log /var/log/fanout/operational/*/*.logControlla la presenza di file di log insolitamente grandi (dimensioni superiori a 100 MB) o di file più vecchi di un paio di giorni. Quando hai il file di destinazione, puoi troncare i log nel seguente modo:
truncate -s 1G <target_file>Identifica l'istanza
anthos-audit-logs-forwarder-xxxxpianificata sul nodo.KUBECONFIG=${KUBECONFIG:?} kubectl get po -n obs-system -o wide | grep anthos-audit-logs-forwarderRiavvia l'istanza
anthos-audit-logs-forwarder-xxxxpianificata sul nodo.KUBECONFIG=${KUBECONFIG:?} kubectl delete po -n obs-system anthos-audit-logs-forwarder-xxxx
Marketplace
Il pull dell'immagine Prisma Cloud non riesce
Versioni: 1.13.7
Sintomi: la creazione di un'istanza di servizio Prisma Cloud da Marketplace non va a buon fine. Il problema è causato da un tag immagine errato.
Soluzione:
Modifica il deployment
twistlock-consoleper modificare il tag dell'immagine:KUBECONFIG=${KUBECONFIG:?} kubectl edit deployment twistlock-console -n ${PROJECT:?}Trova la seguente riga:
image: HARBOR_IP/library/twistlock/console:console_33_01_137Sostituisci
console_33_01_137conconsole_33.01.137:image: HARBOR_IP/library/twistlock/console:console_33.01.137Verifica che il pod venga eseguito correttamente:
KUBECONFIG=${KUBECONFIG:?} kubectl get pods -n ${PROJECT:?}L'output potrebbe essere simile a questo esempio:
NAME READY STATUS RESTARTS AGE twistlock-console-58b578cbf4-5nvbk 1/1 Running 0 2m45s
Monitoraggio
Numero elevato di avvisi creati in ServiceNow
Versioni: 1.13.x
Sintomi:
Dopo aver configurato Monitoring per inviare avvisi a ServiceNow utilizzando le attività di routine MON-T0016 e MON-T1016, in ServiceNow viene creato automaticamente un numero elevato di incidenti.
Il problema presenta le seguenti caratteristiche:
- Tutti gli incidenti sono vuoti.
- Solo il cluster amministratore principale e l'organizzazione
gdchservicespossono inviare avvisi a ServiceNow.
Soluzione alternativa: esegui l'attività di manutenzione MON-T0018 subito dopo aver eseguito le attività di manutenzione MON-T0016 e MON-T1016.
Più avvisi duplicati creati in ServiceNow
Versioni: 1.13.x
Sintomi:
Dopo aver configurato Monitoring per inviare avvisi a ServiceNow utilizzando le attività ripetitive MON-T0016, MON-T1016 e MON-T0018, in ServiceNow vengono creati più avvisi duplicati.
Il problema presenta le seguenti caratteristiche:
- Per alcuni avvisi vengono creati più incidenti duplicati anche dopo l'applicazione dell'attività di routine MON-T0018.
Soluzione alternativa: esegui l'attività di manutenzione MON-T0019 subito dopo aver eseguito le attività di manutenzione MON-T0016, MON-T1016 e MON-T0018.
Impossibile visualizzare le metriche di Vertex AI
Versioni: 1.13.1
Sintomi: le metriche non vengono emesse dal pod dvs-frontend-server.
Soluzione alternativa: la versione 1.13.1 non supporta le metriche criptate per i servizi Vertex AI. Se il servizio Vertex AI non viene abilitato per più di un'ora, riavvia il pod controller mon-admin.
Errore di riconciliazione in mon-cortex
Versioni: 1.13.1, 1.13.9
Sintomi: il pod mon-cortex presenta un errore di riconciliazione. Visualizza lo stato
del pod mon-cortex:
kubectl get subcomponent mon-cortex -n gpu-org-1-system-cluster
L'output potrebbe essere simile al seguente:
NAME AGE STATUS
mon-cortex 15h ReconciliationError
Potrebbe essere registrato un messaggio come questo:
message: 'E0100 - deploy: failed to install chart: release mon-cortex-backend
failed, and has been uninstalled due to atomic being set: context deadline
exceeded'
Soluzione:
Controlla quale pod Cortex mostra un messaggio come questo:
Warning FailedMount 11s kubelet MountVolume.MountDevice failed for volume "pvc-0ad24fdc-52ec-4080-8ac0-5784989d1da3" : rpc error: code = Internal desc = rpc error: code = Internal desc = failed to stage volume: could not open LUKS device; could not open LUKS device; could not open LUKS device; exit status 1Elimina la PVC associata al pod e riavvialo.
Il pod metrics-server-exporter nel cluster di sistema è in crash loop
Versioni: 1.13.1
Sintomi: il pod metrics-server-exporter nel cluster di sistema è in crash
looping con OOMKilled, ma non sembra raggiungere il limite. Diagnostica
l'errore:
kubectl --kubeconfig $KUBECONFIG describe pod -n mon-system metrics-server-exporter-<id>
L'output potrebbe essere simile al seguente:
[...]
Containers:
[...]
otel-collector:
Container ID: containerd://3a1373de4880cde9e09aa9cacc109a8059ec29d9355aef1f03735fdcdcd45596
Image: gcr.io/private-cloud-staging/opentelemetry-collector:v0.93.0-gke.2
Image ID: gcr.io/private-cloud-staging/opentelemetry-collector@sha256:2b14f8fe936e725efca24dace1abcc26449d996b1480eab1b25d469a16aac221
Port: 3113/TCP
Host Port: 0/TCP
Command:
/otelcol
--config=/conf/otel-collector-config.yaml
--feature-gates=pkg.translator.prometheus.PermissiveLabelSanitization
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Thu, 20 Jun 2024 15:55:35 +0000
Finished: Thu, 20 Jun 2024 15:56:57 +0000
Ready: False
Restart Count: 570
Limits:
cpu: 200m
memory: 200Mi
Requests:
cpu: 100m
memory: 100Mi
Environment: <none>
Soluzione alternativa:riduci la quantità di dati pubblicati sull'endpoint delle metriche
eliminando il pod e riavviandolo. Il vecchio time-series memorizzato
viene cancellato, riducendo la memoria necessaria.
Ignorare i messaggi di errore di riconciliazione di ObservabilityPipeline
Versioni: 1.13
Sintomi:
L'oggetto ObservabilityPipeline mostra i log Reconciler error come i seguenti nel pod root-admin-controller:
{"msg":"Reconciler error","controller":"observabilitypipeline","ObservabilityPipeline":{"name":"default","namespace":"infra-obs"},"namespace":"infra-obs","name":"default","err":"unable to reconcile project level ObservabilityPipeline: 1 error occurred:\n\t* failed to get system cluster client to install per project overrides: root admin cluster has no system cluster\n\n"}
Soluzione:
Ignora i log che soddisfano tutte le seguenti condizioni:
"controller":"observabilitypipeline""namespace":"infra-obs""name":"default""err"contienefailed to get system cluster client to install per project overrides: root admin cluster has no system cluster
Se stai eseguendo il debug di un avviso a causa di un numero elevato di errori di riconciliazione, ignora questi log perché sono falsi negativi.
Il ConfigMap mon-prober-backend-prometheus-config viene reimpostato
Versioni: 1.13.0 e 1.13.1
Sintomi:
- L'avviso
MON-A0001è attivato. L'oggetto ConfigMap
mon-prober-backend-prometheus-configviene 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:
Per risolvere il problema, procedi nel seguente modo:
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.
Metti in pausa il componente secondario
mon-probersu tutti i cluster:kubectl --kubeconfig $KUBECONFIG annotate subcomponent mon-prober -n $TARGET_CLUSTER lcm.private.gdc.goog/paused=trueAd esempio:
kubectl --kubeconfig ~/root-admin-kubeconfig annotate subcomponent mon-prober -n my-org lcm.private.gdc.goog/paused=trueRiavvia il controller amministratore MON su ogni cluster di amministrazione:
kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n obs-system mon-admin-backend-controllerConfigMap Prober viene compilato man mano che ogni probe viene registrato.
Segui il runbook MON-R2009 per disattivare l'avviso
MON-A0001,Blackbox monitoring metrics pipeline down, perché questo avviso continuerà a essere attivato.
Componente gateway dello store Cortex OOMKilled crashloop
Versioni: 1.13.3
Sintomi: se visualizzi errori su Grafana durante il caricamento delle metriche o se le metriche
non vengono caricate, il pod cortex-store-gateway potrebbe essere in crash loop.
Per diagnosticare il pod cortex-store-gateway e verificare se è in crash loop,
controlla il suo stato:
kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG describe pod \
-l app=cortex-store-gateway -n mon-system
Sostituisci SYSTEM_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di sistema.
Se il pod è in crash loop, l'output è simile al seguente esempio:
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Soluzione: aumenta temporaneamente il limite di memoria cortex-store-gateway utilizzando un SubcomponentOverride. Per informazioni dettagliate sull'implementazione di un
SubComponentOverride, consulta il runbook MON-R2008.
Di seguito è riportato un esempio di SubcomponentOverride con un limite di memoria
specificato:
apiVersion: lcm.private.gdc.goog/v1
kind: SubcomponentOverride
metadata:
name: mon-cortex-memory-bump
namespace: org-1-system-cluster
spec:
subComponentRef: 'mon-cortex'
backend:
operableParameters:
storeGateway:
resourcesLimit:
memory: 16Gi
Lascia l'override in posizione finché tutti i podcortex-store-gateway non hanno uno stato Ready e assicurati che il componente secondario mon-cortex non sia in pausa:
Verifica che i pod
cortex-store-gatewayabbiano lo statoReady:kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG get statefulset \ -n mon-system cortex-store-gatewaySe tutti i pod hanno lo stato
Ready, l'output è simile al seguente esempio:NAME READY AGE cortex-store-gateway 3/3 70dLa colonna
READYdeve mostrare un valoreN/Nper tutti i pod per essere pronti. In caso contrario, mostra valori come1/3o2/3.Assicurati che il componente secondario
mon-cortexnon sia in pausa in una determinata organizzazione:kubectl --kubeconfig ORG_ADMIN_KUBECONFIG describe subcomponent \ -n SYSTEM_CLUSTER mon-cortex | grep pausedSostituisci quanto segue:
ORG_ADMIN_KUBECONFIG: il percorso del file kubeconfig dal cluster di amministrazione dell'organizzazione.SYSTEM_CLUSTER: il nome del cluster di sistema.
Se il sottocomponente è in pausa, l'output mostra la seguente riga:
lcm.private.gdc.goog/paused: trueIn caso contrario, l'output è vuoto.
Backoff del pull dell'immagine proxy delle metriche del control plane di Kube nel cluster utente
Versioni: 1.13.3
Sintomi: quando le metriche relative a kube-scheduler o
kube-controller-manager (ad esempio le metriche scheduler_pending_pods e
workqueue_depth) non sono visibili in Grafana, potrebbe esserci un problema di
pullback dell'immagine con il pod kube-control-plane-metrics-proxy.
Per diagnosticare il pod kube-control-plane-metrics-proxy e verificare se presenta un problema di backoff del pull delle immagini, controlla il suo stato:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe pod \
-l k8s-app=kube-control-plane-metrics-proxy -n obs-system
Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del
file kubeconfig del cluster utente.
Se il pod presenta un problema di backoff del pull dell'immagine, l'output è simile al seguente esempio:
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Soluzione alternativa: segui questi passaggi per risolvere il problema:
Estrai l'immagine
gcr.io/gke-release/asm/proxyv2:1.20.4-asm.0dal progettogpc-system-container-imagesHarbor. Per istruzioni e autorizzazioni necessarie per eseguire il pull di un'immagine, consulta Eseguire il pull di un'immagine con Docker.Esegui il push dell'immagine
gcr.io/gke-release/asm/proxyv2:1.20.4-asm.0nel progettolibraryHarbor. Per le istruzioni e le autorizzazioni necessarie per eseguire il push di un'immagine, consulta Eseguire il push di un'immagine.Il progetto
libraryviene utilizzato per il deployment degli artefatti nel cluster utente.
Un aumento del WAL fa sì che Prometheus utilizzi molta memoria
Versioni: 1.13.3
Sintomi: il nodo VM del control plane di sistema segnala gli eventi NodeHasInsufficientMemory e EvictionThresholdMet:
kubectl describe node NODE_NAME | grep Events -A100
L'output potrebbe essere simile al seguente esempio:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal NodeNotReady 12m (x8 over 10d) node-controller Node vm-e792c63a status is now: NodeNotReady
Normal NodeHasNoDiskPressure 12m (x9 over 24d) kubelet Node vm-e792c63a status is now: NodeHasNoDiskPressure
Normal NodeHasSufficientPID 12m (x9 over 24d) kubelet Node vm-e792c63a status is now: NodeHasSufficientPID
Normal NodeReady 12m (x9 over 24d) kubelet Node vm-e792c63a status is now: NodeReady
Normal NodeHasInsufficientMemory 12m (x34 over 13h) kubelet Node vm-e792c63a status is now: NodeHasInsufficientMemory
Warning EvictionThresholdMet 12m (x64 over 13h) kubelet Attempting to reclaim memory
Normal TridentServiceDiscovery 11m (x21 over 13h) csi.trident.netapp.io [iSCSI] detected on host.
Normal NodeHasSufficientMemory 6m52s (x31 over 24d) kubelet Node vm-e792c63a status is now: NodeHasSufficientMemory
Prometheus utilizza molta memoria a causa della crescita del WAL (write-ahead log), che influisce sulla memoria del nodo. L'aumento del WAL potrebbe verificarsi perché Cortex non è stato implementato, quindi questo problema potrebbe essere una conseguenza del mancato funzionamento di Cortex. L'istanza Prometheus perde la connettività a Cortex per un periodo di tempo prolungato, durante il quale memorizza i dati nel buffer in memoria e sul volume permanente (PV). Quando Prometheus viene terminato, carica tutti i dati nel WAL in memoria all'avvio.
Un'altra causa principale potrebbero essere problemi di connettività di rete (mesh di servizi, reti fisiche e superiori).
Soluzione alternativa: per ripristinare questo stato, l'azione consigliata è risolvere la causa principale e ripristinare il corretto funzionamento di Cortex o risolvere i problemi di connettività di rete. Poi, attendi che il WAL di Prometheus si esaurisca. Non perdi dati, ma se Cortex non era disponibile, il nodo non è disponibile per il periodo di tempo necessario per il ripristino di Cortex.
In alternativa, puoi fare lo scale down Prometheus STS a zero ed eliminare il PV. Questa azione riduce il tempo totale in cui il nodo non è disponibile, ma comporta la perdita di dati. Inoltre, finché Cortex rimane inattivo o riscontri problemi di connettività di rete, devi ripetere questa azione periodicamente. Finché esiste un problema di connessione tra Prometheus e Cortex, il PV si riempirà di nuovo.
Per fare lo scale down Prometheus STS a zero ed eliminare il PV:
Riduci le dimensioni del componente logmon-operator:
kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG scale deployment -n obs-system logmon-operator --replicas 0Sostituisci
ORG_SYSTEM_KUBECONFIGcon il percorso del file kubeconfig nel cluster di sistema dell'organizzazione.Ridimensiona il componente
anthos-prometheus-k8s:kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG scale statefulset -n obs-system anthos-prometheus-k8s --replicas 0Elimina la richiesta di volume permanente:
kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG delete pvc -n obs-system anthos-prometheus-k8s-data-anthos-prometheus-k8s-0Esegui il backup di
logmon-operator:kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG scale deployment -n obs-system logmon-operator --replicas 1Attendi che
anthos-prometheus-k8ssia pronto.
Bootstrap multizona
Ruoli del cluster mancanti
Versioni: 1.13.1
Sintomi:non esistono ruoli specifici per il bootstrapping multizona da utilizzare in Aggiungi ruoli richiesti.
Soluzione:utilizza il ruolo del cluster cluster-admin come specificato nelle istruzioni collegate. In questo modo, l'utente dispone di un accesso superiore a quello minimo richiesto per svolgere le attività successive.
Risorsa Bootstrap incompatibile
Versioni: 1.13.1
Sintomi: la risorsa Bootstrap creata nel passaggio 3 di Crea il file di bootstrap è incompatibile con la logica che la elabora.
Soluzione alternativa:modifica il file YAML generato come specificato nel passaggio 4.
La risorsa GlobalAPIZone non viene creata nell'API globale
Versioni: 1.13.1
Sintomi:il control plane non crea una risorsa GlobalAPIZone per la zona nell'API globale, pertanto i componenti che si basano su questa risorsa non funzionano correttamente.
Soluzione: crea la risorsa come indicato in Crea risorsa GlobalAPIZone.
Networking
Rete di nodi di archiviazione degli oggetti inattiva
Versioni: 1.13.1, 1.13.3, 1.13.4
Sintomi:
- Durante la fase di bootstrapping dell'object storage, la rete della griglia viene visualizzata come inattiva nell'interfaccia utente del programma di installazione del nodo di amministrazione OBJ.
- cables.csv e Cell CR mostrano che il valore MPN in cables.csv è
QSFP-100G-CU2.5Mper le connessioni tra i nodi di archiviazione degli oggetti objsadmin e TOR Switch.
Spiegazione
Nella versione 1.13, il campo MPN in cables.csv viene utilizzato per determinare la velocità impostata sullo switch Tor.
Se la velocità non è impostata su queste porte, la connettività dello switch Tor al nodo objsadmin
non andrà a buon fine. L'elenco utilizzato per mappare l'MPN alla velocità non teneva conto di un valore fornito dall'integratore di sistemi, causando l'errore del bootstrap dell'archiviazione di oggetti.
Nella maggior parte delle configurazioni 1.13, il fornitore ha utilizzato: QSFP-100G-CU2.5M.
Soluzione:
- Utilizza
kubectl get -A cell -oyamlnel cluster root-admin per trovare la connessione correlata all'appliance di archiviazione degli oggetti e allo switch TOR. - Modifica tutte le occorrenze di mpn in "QSFP-100G-CU3M" per objsadm -> torsw connect.
Ecco un esempio:
- endA: "ap-aa-torsw01:Eth1/10"
endB: "ap-aa-objsadm01:e3a"
cableType: "DAC"
mpn: "QSFP-100G-CU3M"
length: "2m"
color: "Black"
Nodo non raggiungibile
Versioni: 1.13.1, 1.13.3, 1.13.4
Sintomi:
- Durante la fase di bootstrapping della rete alcuni switch non sono raggiungibili.
- Durante la fase di installazione DHCP, alcuni server non sono raggiungibili tramite il loro indirizzo IP iLO.
Soluzione:
- Ricarica gli switch di gestione interessati. Per maggiori dettagli, consulta il runbook PNET-R0018.
PodCIDR non assegnato ai nodi anche se ClusterCIDRConfig è stato creato
Versioni: 1.13.1
Sintomi: un ClusterCIDRConfig è un oggetto obbligatorio per assegnare PodCIDRs.
Nonostante la creazione di ClusterCIDRConfig, PodCIDRs non è stato
assegnato. 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.
Controlla se l'oggetto
ClusterCIDRConfigè stato creato sul cluster:kubectl --kubeconfig=CLUSTER_KUBECONFIG get clustercidrconfigs -oyamlL'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: ""Esegui describe per uno degli oggetti nodo del cluster bloccato nella riconciliazione e verifica se è presente un evento
CIDRNotAvailablenell'oggetto nodo:kubectl --kubeconfig=CLUSTER_KUBECONFIG describe node NODE_NAMEGli 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:
Riavvia i pod
ipam-controller-manager:kubectl --kubeconfig=CLUSTER_KUBECONFIG -n kube-system rollout restart ds ipam-controller-managerDopo che i pod
ipam-controller-managersono in esecuzione, controlla sepodCIDRè assegnato ai nodi:kubectl --kubeconfig=CLUSTER_KUBECONFIG get nodes -oyaml | grep podCIDRL'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:
Deriva NTP
Versioni: 1.13.1
Sintomi: un nodo VM ha un'ora imprecisa o non sincronizzata dopo essere stato inattivo o in esecuzione per un po' di tempo.
Soluzione:
- Stabilisci una connessione SSH al nodo VM e modifica il file
/etc/chrony.conf. - Sostituisci la riga
makestep 1.0 3conmakestep 1.0 -1. Riavvia il servizio chronyd:
systemctl restart chronyd
Devi apportare questa modifica una sola volta a ogni VM. La modifica non verrà sovrascritta.
Per una soluzione rapida e immediata per modificare l'ora, stabilisci una connessione SSH
al nodo VM ed esegui chronyc -a makestep.
Log di controllo di SyncServer non analizzati
Versioni: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7
Sintomi: i log di controllo di SyncServer non vengono analizzati correttamente da
log-remote-logger. Alcuni log di controllo non saranno disponibili in Grafana e potresti
visualizzare messaggi di errore nel pod root-admin log-remote-logger, ad esempio:
Failed to fetch syncserver audit logs for syncserver-...
Soluzione alternativa: i log di controllo sono ancora disponibili su SyncServer. Segui
NTP-P0002 per
accedere all'interfaccia utente di SyncServer e visualizzare i log in Logs > Events.
Impossibile estrarre l'immagine dall'immagine dell'opzione
Versioni: 1.13.3
Sintomi: potresti visualizzare un messaggio simile a questo nell'oggetto SwitchImageHostRequest
quando esegui un'inversione RMA o quando esegui il bootstrapping del cluster root-admin:
failed to pull or extract image "192.0.2.0:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004
Se hai accesso a kubectl, utilizzalo per verificare se stai riscontrando questo problema:
kubectl --kubeconfig=<path/to/root-admin-kubeconfig> -n gpc-system get switchimagehostrequest -o yaml
L'output potrebbe essere simile al seguente esempio:
kind: SwitchImageHostRequest
metadata:
annotations:
lcm.private.gdc.goog/claim-by-force: "true"
meta.helm.sh/release-name: pnet-core-assets
meta.helm.sh/release-namespace: pnet-system
creationTimestamp: "2024-08-20T04:16:36Z"
generation: 1
labels:
app.kubernetes.io/managed-by: Helm
name: v1.13.0-pnet-aa505d9004
namespace: gpc-system
resourceVersion: "149295"
uid: f6c5b880-3fdb-4679-acd4-840b52998946
spec:
fromVersion: v1.13.0-pnet-aa505d9004
toVersion: v1.13.0-pnet-aa505d9004
status:
conditions:
- lastTransitionTime: "2024-08-20T05:10:17Z"
message: ""
observedGeneration: 1
reason: TFTPRunning
status: "True"
type: TFTPReady
- lastTransitionTime: "2024-08-20T04:16:36Z"
message: 'exception: failed to pull images with config images: [{10.249.48.5:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004
/shared/tftpboot/switch/images}]: failed to pull or extract image "10.249.48.5:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004":
failed to pull image from source "10.249.48.5:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004":
GET https://10.249.48.5:10443/v2/gdch-switch/os/manifests/v1.13.0-pnet-aa505d9004:
NOT_FOUND: artifact gdch-switch/os:v1.13.0-pnet-aa505d9004 not found'
observedGeneration: 1
reason: ReconcileBackoff
status: Unknown
type: Ready
Soluzione:
Crea manualmente un SwitchImageHostRequest con il tag immagine corretto:
- Accedi al server bootstrapper.
Utilizza
gdcloudper identificare la versione corretta dell'immagine di cambio:release/gdcloud artifacts tree release/oci/ | grep -i gdch-switchL'output potrebbe essere simile al seguente esempio:
│ │ │ │ └── gdch-switch/os:1.13.3-gdch.5385Da questo output, la versione corretta dell'immagine dell'interruttore è
1.13.3-gdch.5385.Modifica l'oggetto
SwitchImageHostRequestche segnala l'errore:kubectl --kubeconfig=<path/to/root-admin-kubeconfig> -n gpc-system edit switchimagehostrequest <SWITCH_IMAGE_HOST_REQUEST_NAME>Modifica o sostituisci i campi
name,fromVersionetoVersionin modo che corrispondano alla versione dell'immagine di commutazione prevista. In questo caso, è1.13.3-gdch.5385. Vedi l'outputdiffriportato di seguito, che illustra le modifiche da apportare all'oggettoSwitchImageHostRequest.kind: SwitchImageHostRequest metadata: - name: v1.13.0-pnet-aa505d9004 + name: 1.13.3-gdch.5385 namespace: gpc-system spec: - fromVersion: v1.13.0-pnet-aa505d9004 + fromVersion: 1.13.3-gdch.5385 - toVersion: v1.13.0-pnet-aa505d9004 + toVersion: 1.13.3-gdch.5385
La comunicazione dei pod StatefulSet non riesce
Versioni: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7, 1.13.8, 1.13.9, 1.13.10
Sintomi: problemi o interruzioni della connettività dovuti all'eliminazione degli oggetti Cilium Endpoint (CEP) non gestiti correttamente dopo il riavvio del pod StatefulSet.
Ciò potrebbe comportare l'identità dell'endpoint non gestito che causa l'erronea eliminazione del traffico legittimo da parte delle norme di rete. I pod interessati possono essere verificati controllando
l'assenza del relativo oggetto CEP:
kubectl get cep -A | grep [*POD_IP*]
Soluzione alternativa: riavvia i pod StatefulSet interessati per aggiornare il relativo UID e
aggiornare i metadati associati:
kubectl rollout restart statefulset [*STATEFULSET_NAME*] -n [*NAMESPACE*]
Problemi di connettività alle istanze DBS
Versioni: 1.13.0, 1.13.1
Sintomi: le istanze di Database Services (DBS) non sono accessibili e i client di database mostrano timeout di connessione.
Questo problema potrebbe essere rilevato tramite un altro componente di sistema che si basa su DBS. Ad esempio, la fatturazione potrebbe segnalare messaggi di errore come i seguenti:
DBSE0301: Healthcheck: DB cluster is not healthy. Cannot connect to DBdaemon
DBSE0005: DBDaemon Client Error. secure dbdaemon connection failed: context
deadline exceeded
Soluzione alternativa: l'errore è causato da un componente del sistema di rete che non è in grado di pianificare il cluster di servizi dell'organizzazione.
Imposta le seguenti variabili di ambiente:
export KUBECONFIG=KUBECONFIG_PATH export ORG_NAME=ORG_NAMESostituisci quanto segue:
KUBECONFIG_PATH: il percorso del file kubeconfig del cluster di amministrazione dell'organizzazione.ORG_NAME: il nome della tua organizzazione, ad esempioorg-1.
Aggiorna la configurazione del componente di rete per consentirne la pianificazione:
kubectl --kubeconfig=KUBECONFIG_PATH kubectl -n g-ORG_NAME-shared-service-cluster patch addonconfiguration ang-overrides --type='json' -p='[{"op": "replace", "path": "/spec/configs/1/patchContent", "value": "apiVersion: apps/v1\nkind: DaemonSet\nmetadata:\n name: ang-node\n namespace: kube-system\nspec:\n template:\n spec:\n containers:\n - name: angd\n - name: bgpd\n env:\n - name: DISABLE_RECEIVED_ROUTES\n value: \"true\"\n tolerations:\n - operator: \"Exists\"\n effect: \"NoSchedule\""}]'
La connettività di Networking viene ripristinata dopo alcuni minuti.
La mesh del cluster non è configurata con le informazioni sulla zona
Versioni: 1.13.5
Sintomi: una VM non può connettersi a un cluster di database nello stesso progetto. La connettività al bilanciatore del carico interno è interessata. Questo problema è
causato da un Clustermesh che non riesce a scambiare oggetti di servizio tra i cluster
a causa della mancanza di informazioni sulla zona nella configurazione del nome del cluster.
Soluzione alternativa: negli ambienti di cui è stato eseguito il bootstrap come multizona, esegui i seguenti passaggi manuali della soluzione alternativa per far funzionare il bilanciatore del carico interno:
Nel cluster di amministrazione dell'organizzazione, recupera il nome della zona:
ZONENAME="$(kubectl get controlplanes -A -o jsonpath="{.items[0].spec.zone}")" echo $ZONENAMEL'output potrebbe essere simile a questo esempio:
zone1Nel cluster di amministrazione dell'organizzazione, recupera l'ID sito della zona:
SITEID="$(kubectl -n mz-system get zones $ZONENAME -o jsonpath="{.spec.siteID}")" echo $SITEIDL'output potrebbe essere simile a questo esempio:
1Elenca tutti i cluster:
kubectl get clusters -AL'output potrebbe essere simile a questo esempio:
NAMESPACE NAME ABM VERSION DESIRED ABM VERSION CLUSTER STATE g-org-1-shared-service-cluster g-org-1-shared-service 1.30.0-gke.1592 1.30.0-gke.1592 Running org-1-system-cluster org-1-system 1.30.0-gke.1592 1.30.0-gke.1592 Running user-vm-1-cluster user-vm-1 1.16.11 1.16.11 Running user-vm-2-cluster user-vm-2 1.28.700-gke.150 1.28.700-gke.150 RunningPer ogni cluster, costruisci il
CILIUM_CLUSTERNAME:CLUSTER_NAME=CLUSTER_NAME CILIUM_CLUSTERNAME=$CLUSTERNAME-zone$SITEID echo $CILIUM_CLUSTERNAMEL'output potrebbe essere simile a questo esempio:
org-1-system-zone1Per ogni cluster, imposta gli altri parametri come segue. L'esempio seguente per org-1-system:
CLUSTER_NAMESPACE=org-1-system-cluster CLUSTER_VERSION=1.30.0-gke.1592Per ogni cluster, crea un oggetto
AddOnConfiguratione archivialo in un fileaddonconfig.yaml. Crea questo file per tutti i cluster esistenti e per tutti i nuovi cluster che creerai in futuro:In questa pagina, imposta le seguenti variabili per aggiornare l'esempio di codice:
CLUSTER_NAMESPACE=CLUSTER_NAMESPACE CLUSTER_VERSION=CLUSTER_VERSION CILIUM_CLUSTERNAME=CILIUM_CLUSTERNAMEapiVersion: baremetal.cluster.gke.io/v1alpha1 kind: AddOnConfiguration metadata: name: cilium-addon namespace: CLUSTER_NAMESPACE spec: anthosBareMetalVersions: - CLUSTER_VERSION configs: - name: cilium-config namespace: kube-system apiVersion: v1 kind: ConfigMap patchContent: | apiVersion: v1 kind: ConfigMap metadata: name: cilium-config namespace: kube-system data: cluster-name: CILIUM_CLUSTERNAMEApplica
addonconfig.yamlal cluster di amministrazione dell'organizzazione:kubectl apply -f addonconfig.yamlNei cluster di sistema, di servizio e utente, assicurati che
cluster-namesia aggiornato incilium-configsul cluster. L'aggiornamento potrebbe richiedere un po' di tempo, ma questo passaggio è necessario prima di riavviare il deployment diclustermesh-apiserver.kubectl get configmap -n kube-system cilium-config -o jsonpath="{.data.cluster-name}" && echoNei cluster di sistema, di servizio e utente, riavvia il deployment di
clustermesh-apiserver:kubectl rollout restart deployment -n kube-system clustermesh-apiserver
Vengono generati indirizzi IP EVPN errati
Versioni: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7
Sintomi: gli indirizzi IP di peering della sessione di interconnessione EVPN multizona (MZ) generati da Hardware Asset Management System (HAMS) non terminano con .65 o .66, il che è errato e impedisce l'instaurazione delle sessioni BGP EVPN MZ.
Soluzione:
Per risolvere manualmente il problema, segui questi passaggi:
Elenca tutte le risorse
InterconnectSession:kubectl get interconnectsession -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig | grep zoneevpnpeeringEsamina le risorse EVPN multizona
InterconnectSessiongenerate che hanno un valoreinterconnectTypediZonePeeringe unaddressFamilydiEVPN:apiVersion: system.private.gdc.goog/v1alpha1 kind: InterconnectSession metadata: annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep creationTimestamp: null name: interconnect-session-am-aa-blsw01-zoneevpnpeering-3 namespace: gpc-system labels: system.private.gdc.goog/ipv4-session-name-1: interconnect-session-am-aa-blsw01-zoneipv4peering-3 spec: interconnectLinkRef: name: interconnect-am-aa-blsw01-zoneevpnpeering-3 namespace: gpc-system interconnectType: ZonePeering peerIP: 192.168.203.67 md5HashKey: "" peerASN: 65402 addressFamily: EVPN status: {}Per ciascuna delle risorse
InterconnectSessionche corrispondono a questi parametri, applica la seguente correzione:- Controlla il nome della risorsa personalizzata della sessione di interconnessione.
- Se il nome termina con un numero dispari, aggiorna l'ultima parte dell'indirizzo IP peer a
65utilizzando il comando nel passaggio successivo. - Se il nome termina con un numero pari, aggiorna l'ultima parte dell'indirizzo IP peer a
66utilizzando il comando nel passaggio successivo.
Modifica la risorsa
InterconnectSessioncon l'indirizzo IP del peer errato:kubectl edit interconnectsession interconnect-session-zy-aa-blsw01-zoneevpnpeering-1 -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfigApplica questa correzione a tutte le risorse
InterconnectSessionche causano l'errore.
La dashboard del control plane di Networking superiore non mostra dati
Versioni: 1.13.7
Sintomi: le query Prometheus in TestUpperNetworkingMetrics non vanno a buon fine a causa
della mancanza di metriche nel cluster org-1-system. I pannelli di clustermesh nella
dashboard del control plane di Upper Networking per gli amministratori dell'organizzazione IO non mostrano dati. Il problema deriva da una mancata corrispondenza nell'etichetta source_cluster tra Cilium e il sistema di monitoraggio.
Soluzione alternativa: rimuovi il filtro source_cluster dal dashboard del control plane UNET per visualizzare i dati.
Errori fuorvianti visualizzati durante l'installazione di rete
Versioni: 1.13.1
Sintomi: durante l'installazione della rete, vengono visualizzati alcuni messaggi di avviso relativi al cablaggio. Ad esempio:
W0725 18:01:19.127111 39319 switch_port.go:59] Got error on getting port speed for la-ac-mgmtsw01:Eth1/46<>la-ac-base03:ilo: no speed associated with cable model: 31342 (CAT6 5ft Black)
W0725 18:01:19.127127 39319 switch_port.go:59] Got error on getting port speed for la-ac-mgmtsw01:Eth1/33<>la-ac-bm21:LOM1: no speed associated with cable model: 03982 (CAT6 4ft Black)
Questi messaggi di errore possono essere ignorati.
La creazione di un PNP di uscita che consente tutto il traffico nega il traffico imprevisto
Versioni:
Possono essere interessate tutte le versioni di Google Distributed Cloud (GDC) con air gap.
Sintomi: la policy di rete del progetto (PNP) allow-all-egress consente il traffico verso gli endpoint all'interno del progetto e gli endpoint esterni al di fuori del cluster, ma non consente il traffico verso gli endpoint di sistema. Questo problema può comportare
il blocco dell'accesso al sistema e ai servizi proprietari, ad esempio la risoluzione DNS e l'archiviazione di oggetti.
Il PNP allow-all-egress potrebbe avere il seguente aspetto:
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_1
name: allow-all-egress
spec:
policyType: Egress
subject:
subjectType: UserWorkload
egress:
- {}
Soluzione: elimina il allow-all-egress PNP. Per impostazione predefinita, una volta
disattivata la protezione dall'esfiltrazione di dati, il traffico è consentito verso gli endpoint di progetto ed esterni al di fuori degli endpoint di cluster e di sistema.
kubectl delete pnp [*ALLOW_ALL_EGRESS_PNP_NAME*] -n [*NAMESPACE*]
Archiviazione di oggetti
Impossibile eliminare l'organizzazione di archiviazione
Versioni: 1.13.1
Sintomi: l'eliminazione di un'organizzazione potrebbe non riuscire a causa di un problema che impedisce il completamento dell'eliminazione di SVM. Potresti visualizzare un avviso come questo:
Warning StorageOrganizationDeletion 49m (x97
over 23h) StorageOrganization Reconcile error for storage org
deletion: cannot delete storage organization resources, pre-checks failed:
subnet claim "poc2/poc2-admin-svm-mgmt-network-subnet" exists,
cannot continue before it is deleted
È possibile ignorare alcuni avvisi di upgrade dell'object storage
Versioni: 1.13.3
Sintomi: quando esegui l'upgrade dell'object storage, 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:
Controlla che ogni nodo abbia le credenziali SSH corrispondenti archiviate in un secret.
Controlla i nodi di amministrazione:
kubectl get objectstorageadminnodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; doneControlla 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; doneL'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 3d23hSe non viene trovato un secret, l'errore ha il seguente aspetto:
Error from server (NotFound): secrets "gpcstgeadm02-gce-gpcstgesite01-ssh-creds" not found
Se il comando non restituisce errori, puoi ignorare senza problemi gli errori segnalati dai riconciliatori.
ObjectStorageStorageNodeReconciler report maintenance.gdu.gdu_server_locked
Versioni: 1.13.3
Sintomi: mostra i dettagli di objectstoragestoragenode:
kubectl describe objectstoragestoragenode zv-aa-objs02
L'output potrebbe essere simile al seguente esempio:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ReconcileError 54m (x2 over 54m) ObjectStorageStorageNodeReconciler 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 alternativa: questo problema può essere ignorato. Il servizio GDU potrebbe bloccarsi temporaneamente quando riceve troppe richieste, ma si sbloccherà dopo alcuni minuti.
Il controllo dell'archiviazione degli oggetti dell'upgrade post-volo 1.12.x -> 1.13.x non va a buon fine
Versioni: 1.13.x
Sintomo: la CR ObjectStorageUpgrade non va a buon fine e viene visualizzato l'errore
Message: check "ObjectStorageUpgrade" of operable component "OBJ" failed with reason "BackoffLimitExceeded", please check logs in pods: [gpc-system/upgrade-managed-check-objectstorageupgrade]
Observed Generation: 2
Reason: PostflightCheckFailed
Pod gpc-system/upgrade-managed-check-objectstorageupgrade non riusciti con errore
Error: check "ObjectStorageUpgrade" preflight check failed: ObjectStorageSite gce-gpcstgesite01 not ready │
Usage: │
managed [flags] │
Flags: │
--component_name string preflight check name │
--current_version string current version of the Organization │
-h, --help help for managed │
--organization-upgrade-name string the name of current OrganizationUpgrade │
--target_version string target version of the Organization │
F1023 06:18:01.122723 1 main.go:80] check "ObjectStorageUpgrade" preflight check failed: ObjectStorageSite gce-gpcstgesite01 not ready │
goroutine 1 [running]:
Causa principale: L'upgrade del componente operativo Object Storage dalla versione 1.12.x alla 1.13.x non riesce se il cluster KIND di bootstrapping non è stato disattivato o eliminato. Anche se l'upgrade va a buon fine, i servizi di archiviazione di oggetti comuni, come la creazione di nuovi bucket o credenziali S3 tramite Kubernetes RBAC, potrebbero non riuscire a causa di errori di convalida del certificato TLS. Questo perché un pod di archiviazione di oggetti specifico all'interno del cluster KIND tenta continuamente di installare il certificato server TLS dell'endpoint di gestione StorageGRID, valido nella versione 1.12.x, ma che potrebbe non essere riconosciuto nella versione 1.13.x. Durante l'upgrade, StorageGRID installa un nuovo certificato del server TLS verificabile, ma il pod del cluster KIND lo sostituisce con il certificato precedente non valido, causando l'errore del certificato TLS.
Soluzione alternativa: Devono essere soddisfatti i seguenti requisiti:
- L'upgrade dell'archiviazione di oggetti dalla versione 1.12.x alla 1.13.x
- Il cluster di bootstrapping (il cluster KIND) esiste ancora
Segui questi passaggi:
- Acquisisci un
kubeconfigcon autorizzazione di visualizzazione e modifica della risorsaObjectStorageSitenel cluster di bootstrapping (il cluster KIND). Imposta un alias per
kubectlche si connette al cluster di bootstrapping (il cluster KIND):alias kubectlkind="kubectl --kubeconfig <Full path to the kubeconfig of the bootstrapping cluster>Recupera l'istanza della risorsa personalizzata
ObjectStorageSitedal cluster di bootstrap. Deve essere presente un'istanza di risorsaObjectStorageSite:SITENAME=$(kubectlkind get ObjectStorageSite -A -o jsonpath='{.items[0].metadata.name}')Aggiungi un'annotazione di pausa dell'archiviazione degli oggetti all'istanza della risorsa
ObjectStorageSite:kubectlkind annotate ObjectStorageSite "${SITENAME:?}" storagegrid.netapp.storage.private.gdc.goog/paused=trueVerifica che l'annotazione di pausa dell'object storage sia stata aggiunta all'istanza
ObjectStorageSite:kubectlkind get ObjectStorageSite "${SITENAME:?}" -o jsonpath='{.metadata.annotations}' | jqAcquisisci un
kubeconfigcon accesso in visualizzazione e autorizzazione di patch di stato alle risorseObjectStorageClusternel cluster amministratore root.Imposta un alias per kubectl che si connette al cluster di amministrazione principale:
alias kubectlrootadmin="kubectl --kubeconfig <Full path to the kubeconfig of the root admin >"Controlla se esiste un'istanza di risorsa
ObjectStorageClusternel cluster di amministrazione principale:kubectlrootadmin get ObjectStorageClusterSe non è presente un'istanza della risorsa
ObjectStorageCluster, la soluzione alternativa è stata completata. Potresti dover eseguire di nuovo la procedura di upgrade di Object Storage.Recupera l'URL dell'endpoint di gestione dallo stato della risorsa
ObjectStorageSitenel cluster di bootstrapping:MGMT_ENDPOINT=$(kubectlkind get ObjectStorageSite -o jsonpath='{.items[0].status.managementAPIEndpointURL}')Verifica se la variabile di ambiente
$MGMT_ENDPOINTè stata impostata. L'endpoint deve iniziare conhttps://:echo ${MGMT_ENDPOINT:?}Esegui i passaggi rimanenti solo quando è presente esattamente un'istanza della risorsa
ObjectStorageClusternel cluster di amministrazione principale. In caso contrario, esegui di nuovo la procedura di upgrade di Object Storage:kubectlrootadmin patch ObjectStorageCluster <the name of ObjectStorageCluster> --type=merge --subresource status --patch "status: {managementAPIEndpointURL: '${MGMT_ENDPOINT:?}'}"Riavvia il pod gpc-system/obj-infra-cluster-cm:
kubectlrootadmin rollout restart deployment -n gpc-system obj-infra-cluster-cm-backend-controllerVerifica se l'endpoint di gestione è stato aggiunto allo stato della risorsa
ObjectStorageCluster:kubectlrootadmin get ObjectStorageCluster -o jsonpath='{.items[0].status}' | jqRiavvia il controllo post-volo eliminando il job Kubernetes di controllo post-volo
gpc-system/upgrade-managed-check-objectstorageupgrade-<random suffix>. Il job verrà ricreato a breve.
Il nodo non è raggiungibile sulla rete di dati
Si tratta di un problema raro che può verificarsi se il pod anetd viene coinvolto in un ciclo di arresti anomali.
Una risorsa del kernel essenziale per la connettività dei nodi può bloccarsi in uno stato danneggiato.
Questa guida descrive i sintomi del problema e i passaggi da seguire per risolverlo.
Versioni:
Possono essere interessate tutte le versioni di Google Distributed Cloud (GDC) con air gap.
Sintomi:
Se si verifica questo problema, potresti notare i seguenti sintomi:
- I nodi sono bloccati nello stato
NotReady - La descrizione del nodo mostra il messaggio
kubelet:kubelet was found unhealthy; repair flag : true - L'accesso SSH al nodo non è possibile sulla rete di dati
Soluzione temporanea:
Utilizza le seguenti istruzioni per riparare ogni nodo non integro:
Ottieni l'indirizzo IP di gestione del nodo interessato:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get -n gpc-system servers/NODE_NAME -ojsonpath='{.spec.managementNetwork.ips[0]}'Ottieni l'accesso SSH al nodo interessato.
Connettiti al nodo utilizzando SSH e l'indirizzo IP di gestione del nodo.
Sul nodo, esegui il seguente comando e chiudi la connessione SSH:
tc filter del dev bond0 egressRiavvia il DaemonSet
anetdper il cluster con il nodo interessato:kubectl --kubeconfig AFFECTED_CLUSTER_KUBECONFIG rollout restart ds/anetd -n kube-systemIl certificato dell'endpoint del bilanciatore del carico StorageGRID è scaduto
Versioni: 1.13.10, 1.13.11, 1.13.12
Sintomi:il proxy di archiviazione di oggetti segnala 502 Bad Gateway.
Soluzione:segui OBJ T0003.
Sistema operativo
Pod bloccati nello stato init
Versioni: 1.13.1
Sintomi: il nodo segnala che è pronto, ma l'accesso SSH al nodo è lento e
e top -n 1 mostra più di 100 processi zombie.
Soluzione:
- Segui OS-P0001 per svuotare il server. Lo scaricamento potrebbe richiedere più di 20 minuti. Se lo scaricamento non riesce dopo un'ora, vai al passaggio successivo.
Riavvia il server stabilendo una connessione SSH al server ed emettendo il seguente comando:
systemctl rebootPer ripristinare completamente il server potrebbe essere necessario un secondo riavvio.
Verifica che l'accesso SSH non sia più lento e che il numero di processi zombie sia molto inferiore, preferibilmente inferiore a 30.
Rimuovi il server dal pool impostando
maintenancesufalsesul server.
bm-system-machine-preflight-check Il job Ansible per un nodo bare metal o VM non va a buon fine
Versioni: 1.13.1
Sintomi:il modulo del kernel nf_tables non viene caricato dopo il riavvio, causando
l'errore Either ip_tables or nf_tables kernel module must be loaded nei job Ansible del cluster. Questo problema
si verifica quando il nodo bare metal o VM viene riavviato prima del provisioning completo.
Il job Ansible potrebbe generare un errore come questo:
fatal: [172.20.128.23]: FAILED! => {"changed": false, "msg": "following are the error messages for each failed preflight check {'check_netw
orking_kernel_module_pass': 'Either ip_tables or nf_tables kernel module must be loaded. Use the command \"modprobe <ip_tables OR nf_tables
>\" to load the module.'}"}
Soluzione temporanea:
Stabilisci una connessione SSH al nodo ed esegui il seguente comando:
modprobe nf_tables
VM con spazio esaurito sul dispositivo
Versioni: 1.13.1, 1.13.3, 1.13.4, 1.13.5
Sintomi: quando la directory dei log /var/log è piena, Node potrebbe bloccarsi con lo stato NotReady e i pod potrebbero non avviarsi a causa dell'errore no space left on device. Per verificarlo, esegui questo comando sul nodo e controlla se l'utilizzo è intorno al 100%.
df -h /var/log
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rocky-rl--var_log 15G 15G 20K 100% /var/log
Soluzione:
Accedi al nodo in cui si verifica il problema ed elimina i vecchi archivi dei log per /var/log/messages.
find /var/log -name "messages*" -mtime +4 -deleteTi consigliamo inoltre di continuare ad applicare la seguente soluzione alternativa per evitare che si verifichi. La soluzione alternativa consiste nel creare un
AnsiblePlaybooke applicare la modifica tramite una risorsa personalizzataOSPolicyresponsabile della configurazione sicura del sistema operativo di destinazione (macchine BM+VM). Per ulteriori dettagli, consulta la procedura OS-P0005.Imposta le seguenti variabili di ambiente:
export KUBECONFIG=<the path to the kubeconfig file>Crea un playbook Ansible per la soluzione alternativa:
kubectl --kubeconfig=${KUBECONFIG:?must be set} apply -f - <<EOF apiVersion: system.private.gdc.goog/v1alpha1 kind: AnsiblePlaybook metadata: name: update-logrotate namespace: gpc-system spec: playbook: | - name: Set the default context for the /etc/kubernetes path to etc_t hosts: all gather_facts: no tasks: - name: Change log rotation for /var/log/messages block: - name: Check if /etc/logrotate.d/syslog exists check_mode: false ansible.builtin.stat: path: '/etc/logrotate.d/syslog' register: syslog_exists - name: Comment out /var/log/messages lines in syslog ansible.builtin.replace: path: '/etc/logrotate.d/syslog' regexp: '^/var/log/messages' replace: '# /var/log/messages' when: syslog_exists.stat.exists - name: Change logrotate config for /var/log/messages ansible.builtin.blockinfile: path: '/etc/logrotate.d/syslog' block: | /var/log/messages { daily rotate 4 missingok notifempty sharedscripts postrotate /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true endscript } when: syslog_exists.stat.exists EOFIdentifica gli inventari di destinazione a cui deve essere applicata la modifica. La destinazione può essere un singolo
InventoryMachineo unNodePool. Fai riferimento alla procedura OS-P0005 (2. Identifica l'inventario di destinazione per le configurazioni di runtime) per i dettagli.Il seguente esempio di
OSPolicyinclude due inventari di destinazione inspec.inventory. Puoi aggiungere altri inventari in base alle esigenze.kubectl --kubeconfig=${KUBECONFIG:?must be set} apply -f - <<EOF apiVersion: system.private.gdc.goog/v1alpha1 kind: OSPolicy metadata: name: manual-update-logrotate namespace: gpc-system spec: inventory: - apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool name: control-plane-node-pool namespace: org-1-system-cluster - apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool name: control-plane-node-pool namespace: user-vm-1-cluster policy: installPlaybook: name: update-logrotate EOFConvalida
Fai riferimento alla procedura OS-P0005 (convalida) per monitorare lo stato di esecuzione delle norme.
Pod bloccati nello stato ContainerCreating
Versioni: 1.13.3, 1.13.5, 1.13.6
Sintomi: un nodo viene visualizzato come integro, ma ha molti pod bloccati nello stato
ContainerCreating e non puoi stabilire una connessione SSH al
server.
Soluzione alternativa: riavvia il server e verifica di poter stabilire una connessione SSH al nodo quando viene ripristinato.
Impossibile accedere tramite SSH al nodo di cui è stato eseguito il provisioning
Versioni: 1.13.5
Sintomi: viene eseguito il provisioning di un nodo, ma il timeout SSH si verifica sia sugli IP di gestione che su quelli dei dati.
Soluzione: riavvia il nodo tramite iLO. Dopo l'avvio, accedi tramite SSH e disattiva
clamonacc con systemctl stop clamonacc; systemctl disable clamonacc.
I nodi Bare Metal non riescono ad avviarsi dall'immagine sistema operativo più recente perché l'avvio protetto non riconosce la firma del sistema operativo
Versioni: 1.13.12
Sintomi: dopo l'upgrade alla versione 1.13.12, se il nodo viene riavviato, il sistema operativo non riesce ad avviarsi con il nuovo kernel. La schermata della console iLO mostra un problema relativo all'avvio protetto:
../../grub-core/loader/i386/efi/linux.c:385:(hd0,gpt2)/vmlinuz-4.18.0-425.131.e.18.ciqfipscompliant.40.1.x86_64 has invalid signature,..:
../../grub-core/loader/i386/efi/linux.c:256: you need to load the kernel first.
Soluzione:
- Per qualsiasi nodo che non si avvia a causa di questo problema, accedi alla schermata GRUB tramite la console iLO e seleziona
Rocky Linux 4.18.0-425.131.e.18.ciqfipscompliant.38.1.x86_64come destinazione di avvio. Questa procedura fa sì che il nodo si avvii con il kernel precedente noto. Per tutti i server bare metal di cui è stato eseguito l'upgrade alla versione GDC 1.13.12, esegui i seguenti passaggi per evitare l'errore di avvio:
- Stabilisci una connessione SSH al server.
- Esegui i seguenti comandi sul server per rimuovere il kernel problematico:
dnf remove kernel-core-4.18.0-425.131.e.18.ciqfipscompliant.40.1.x86_64- Verifica che il kernel predefinito sia stato ripristinato correttamente a una versione funzionante:
grubby --default-kernel
Il risultato è /boot/vmlinuz-4.18.0-425.131.e.18.ciqfipscompliant.38.1.x86_64.
Infrastruttura della suite operativa (OI)
L'SSA non è necessaria per Hardware 3.0
La configurazione dell'adattatore RAID è diversa per Hardware 3.0. I server OIC hardware 3.0 utilizzano un'unità autocrittografata, pertanto l'avvio di Smart Storage Administration (SSA) non è più necessario. Sono necessari passaggi aggiuntivi per determinare gli identificatori del disco per server. Vedi Bootstrap del server OI.
Sicurezza perimetrale
Il cluster di sistema dell'organizzazione si blocca durante il bootstrap dell'organizzazione
Versioni: 1.13.1
Sintomi:durante l'avvio dell'organizzazione, il cluster di sistema dell'organizzazione potrebbe bloccarsi. I pod edr-sidecar-injector sono in stato In attesa. Quando provi a eliminare questi pod, potresti visualizzare un messaggio di errore come questo:
Delete failed with `Internal error occurred: failed calling webhook "validation.gatekeeper.sh": failed to call webhook: Post "https://gatekeeper-webhook-service.opa-system.svc:443/v1/"
Allo stesso tempo, altri pod in attesa potrebbero presentare messaggi di errore come questo:
Error creating: Internal error occurred: failed calling webhook "edr-sidecar-injector.gpc-system.internal": failed to call webhook: Post "https://edr-sidecar-injector.gpc-system.svc:443/mutate?timeout=10s": dial tcp 172.20.3.222:443: connect: connection refused
Il sistema richiede un intervento manuale per sbloccarsi.
Soluzione:
- Duplica
MutatingWebhookConfigurationCRedr-sidecar-injector-webhook-cfgsul cluster di sistema. - Duplica
ValidatingWebhookConfigurationCRgatekeeper-validating-webhook-configurationsul cluster di sistema. - Elimina sia la CR
edr-sidecar-injector-webhook-cfgsia la CRgatekeeper-validating-webhook-configurationdal cluster di sistema. - Attendi il ripristino dei pod
edr-sidecar-injectore digatekeeper-controller-manager. - Ripristina il CR webhook con il comando
kubectl apply.
I gruppi di indirizzi firewall PANW non vengono aggiornati con le modifiche alla rivendicazione CIDR
Versioni: 1.13.1
Sintomi: durante il bootstrap, OCIT cidr-claim si aggiorna con il valore corretto,
ma il firewall AddressGroups no. Una coppia di AddressGroups,
in particolare vsys1-root-ocit-network-cidr-group e ocvsys1-root-ocit-network-cidr-group,
utilizza blocchi di rete che non si sovrappongono a quelli effettivamente in uso in OIR. OIR non è
in grado di risolvere i record di zona GDC e le query vanno in timeout
senza una risposta.
Soluzione:
dopo le modifiche a cidr-claim, assicurati che AddressGroup venga aggiornato con l'ultima versione di
cidr-claim riavviando il deployment di fw-core-backend-controller nello spazio dei nomi
fw-system nel cluster root-admin.
Server fisici
Il bootstrap del server non riesce a causa di problemi POST sul server HPE
Versioni: 1.13.1
Sintomi:il bootstrap del server non va a buon fine quando un server non supera il processo di avvio POST. L'accesso a ILO e il controllo della console del server mostrano il seguente errore:
Symptom: An Invalid Opcode Exception has occurred indicating
that the processor tried to execute an invalid, undefined opcode,
or an instruction with invalid prefixes.
Causes: This issue is typically a software or firmware issue and
not indicative of a hardware problem
Causes: This issue is typically a software or firmware issue and
not indicative of a hardware problem.
ACTION : Reboot the server.
Soluzione temporanea:
Da iLO, fai clic sul pulsante di accensione e seleziona Cold Boot.
Server bloccati nello stato di provisioning
Versioni: 1.13.1, 1.13.3, 1.13.5
Sintomi:i server sono bloccati in uno stato di provisioning durante il bootstrap del server. Controlla lo stato dei server:
k get servers -A | grep -v availabl
L'output potrebbe essere simile al seguente:
NAMESPACE NAME AGE RACK MACHINE-CLASS MANAGEMENT-IP DATA-IP DATA-IP BMC-IP CLUSTER NODEPOOL STATE PROVISION-READY
gpc-system ag-aa-bm01 21h ag-aa o1-highmem1-40-gdc-metal 192.0.2.0 198.51.100.0 203.0.113.0 provisioning
gpc-system ag-ab-bm01 21h ag-ab o1-highmem1-40-gdc-metal 192.0.2.0 198.51.100.1 203.0.113.0 provisioned true
gpc-system ag-ac-bm01 21h ag-ac o1-highmem1-40-gdc-metal 192.0.2.0 198.51.100.2 203.0.113.0 provisioning
Soluzione:
Avvia dhcp manualmente con una configurazione scaricata dal cluster KIND. In questo esempio
/tmp/dhcp.confè la configurazione DHCP del cluster KIND:docker run -d -it --network host --name dnsmasq -v /tmp/dhcp.conf:/etc/dnsmasq.conf --cap-add=NET_ADMIN --restart always 198.51.100.255/gpc-system-container-images/private-cloud-staging/dnsmasq:VERSIONSostituisci
VERSIONcon la versione di rilascio come descritto nelle istruzioni di upgrade in Upgrade manuale del componente File per i cluster di amministratori root e dell'organizzazione, ad esempio1.13.1-gdch.525.Controlla la configurazione del BIOS sul server e verifica che
NetworkBootnon sia abilitato per le NIC del piano dati (denominate nel patternSlot{i}Nic{i}).Controlla il BIOS tramite la chiamata API:
curl -kv https://{bmcIP}/redfish/v1/Systems/1/bios -u $bmcUser:$bmcPasswordDove
$bmcUsere$bmcPasswordsono le password per gli ILO, che possono essere trovate nel file o nella directorycellcfgin un secret chiamatobmc-credentials-<server-name>, ad esempiobmc-credentials-ai-aa-bm01. Verifica che l'output di questo comando mostriSlot1Nic1: Disabled.Se uno di questi
Slot{i}Nic{i}haNetworkBoot, disabilitalo con l'API delle impostazioni del BIOS.curl -kv https://{bmcIP}/redfish/v1/Systems/1/bios/settings -u $bmcUser:$bmcPassword -X PATCH -d '{"Attributes": {"Slot{i}Nic{i}":"Disabled"}}' -H 'content-type: application/json'Sostituisci
Slot{i}Nic{i}con il nome dello slot che presenta il problema nel payload.Riavvia il server.
Il provisioning del server DL380a non riesce
Versioni: 1.13.3, 1.13.4, 1.13.5
Sintomi: il provisioning del server non riesce durante il job di crittografia per il modello HPE DL380a.
Lo stato di Server CR è bloccato su available durante il bootstrap del server:
# server name
export SERVER_NAME=
kubectl --kubeconfig "${KUBECONFIG:?must be set}" get servers ${SERVER_NAME} -n gpc-system
Soluzione temporanea:
Segui IAM-R0004 per generare
KUBECONFIGperroot-admin-cluster.Segui PLATAUTH-G0001 per generare la chiave SSH
root-id_rsaperCLUSTER_NS=root.Metti in pausa il server aggiungendo l'annotazione
server.system.private.gdc.goog/pausedalla risorsa personalizzata del server:kubectl --kubeconfig "${KUBECONFIG:?must be set}" annotate server ${SERVER_NAME:?} -n gpc-system --overwrite server.system.private.gdc.goog/paused=''Accedi al server dall'IP di gestione:
export MGMT_IP=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME:?} -n gpc-system -o=jsonpath='{.spec.managementNetwork.ips[0]}') ssh $MGMT_IP -i ~/.ssh/root-id_rsaAttiva la crittografia manualmente:
/opt/MegaRAID/storcli/storcli64 /call/eall/sall secureerase force /opt/MegaRAID/storcli/storcli64 /c0 delete securitykey /opt/MegaRAID/storcli/storcli64 /c0 set securitykey useekms jL'output dei comandi dovrebbe essere simile al seguente:
root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /call/eall/sall secureerase force CLI Version = 007.2417.0000.0000 Apr 21, 2023 Operating system = Linux 5.4.0-1072-fips Controller = 0 Status = Success Description = Drive Secure Erase Succeeded. root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /c0 delete securitykey CLI Version = 007.2417.0000.0000 Apr 21, 2023 Operating system = Linux 5.4.0-1072-fips Controller = 0 Status = Success Description = None Controller Properties : ===================== ------------------------ Ctrl Method Result ------------------------ 0 delete Key Success ------------------------ root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /c0 set securitykey useekms j { "Controllers":[ { "Command Status" : { "CLI Version" : "007.2417.0000.0000 Apr 21, 2023", "Operating system" : "Linux 5.4.0-1072-fips", "Controller" : 0, "Status" : "Success", "Description" : "None" }, "Response Data" : { "Controller Properties" : [ { "Ctrl" : 0, "Method" : "Set Security using EKMS", "Result" : "Please reboot the system for the changes to take effect" } ] } } ] }Se l'ultimo comando non va a buon fine o visualizzi errori come "Invalid BIOS EKM status" (Stato EKM del BIOS non valido), prova a riavviare il server e iLO, quindi ripeti questo passaggio.
root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /c0 set securitykey useekms j { "Controllers":[ { "Command Status" : { "CLI Version" : "007.2417.0000.0000 Apr 21, 2023", "Operating system" : "Linux 5.4.0-1072-fips", "Controller" : 0, "Status" : "Failure", "Description" : "None", "Detailed Status" : [ { "Ctrl" : 0, "Method" : "Set Security using EKMS", "Result" : "-", "ErrMsg" : "Invalid BIOS EKM status", "ErrCd" : 255 } ] } } ] }Se l'ultimo comando è andato a buon fine, riavvia il server come indicato.
Crea manualmente l'unità logica:
Dopo il riavvio del server, accedi di nuovo al server dall'IP di gestione ed elenca tutte le unità disponibili:
ssh $MGMT_IP -i ~/.ssh/root-id_rsa /opt/MegaRAID/storcli/storcli64 /c0 show jL'output dell'ultimo comando potrebbe essere simile a questo esempio:
{ "Controllers":[ { "Command Status" : { "CLI Version" : "007.2417.0000.0000 Apr 21, 2023", "Operating system" : "Linux 5.4.0-1072-fips", "Controller" : 0, "Status" : "Success", "Description" : "None" }, "Response Data" : { "Product Name" : "HPE MR416i-o Gen11", "Serial Number" : "******", "PCI Slot Number" : 17, "SAS Address" : "******", "PCI Address" : "00:12:00:00", "System Time" : "09/12/2024 23:32:48", "Mfg. Date" : "09/15/23", "Controller Time" : "09/12/2024 23:32:47", "FW Package Build" : "52.26.3-5379", "BIOS Version" : "7.26.00.0_0x071A0000", "FW Version" : "5.260.03-3985", "Driver Name" : "megaraid_sas", "Driver Version" : "07.713.01.00-rc1", "Current Personality" : "RAID-Mode ", "Vendor Id" : 4096, "Device Id" : 4322, "SubVendor Id" : 5520, "SubDevice Id" : 808, "Host Interface" : "PCI-E", "Device Interface" : "SAS-12G", "Bus Number" : 18, "Device Number" : 0, "Function Number" : 0, "Domain ID" : 0, "Security Protocol" : "SPDM-1.0.0", "Physical Drives" : 8, "Drive LIST" : [ { "EID:Slt" : "252:1", "DID" : 0, "State" : "UGood", "DG" : "-", "Size" : "1.60 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "MO001600PXVRU ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:2", "DID" : 1, "State" : "UGood", "DG" : "-", "Size" : "1.60 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "MO001600PXVRU ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:3", "DID" : 2, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:4", "DID" : 3, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:5", "DID" : 4, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:6", "DID" : 5, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:7", "DID" : 6, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:8", "DID" : 7, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" } ], "Enclosures" : 1, "Enclosure LIST" : [ { "EID" : 252, "State" : "OK", "Slots" : 8, "PD" : 8, "PS" : 0, "Fans" : 0, "TSs" : 0, "Alms" : 0, "SIM" : 0, "Port#" : "2I" } ] } } ] }Devi salvare i due ID
EID:SltconSizeuguale a1.60 TB, in questo caso:252:1,252:2Poi crea un'unità logica utilizzando gli ID
EID:Slt:/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid1 drives=252:1,252:2 SEDL'output dell'ultimo comando è simile a questo esempio:
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid1 drives=252:1,252:2 SED CLI Version = 007.2417.0000.0000 Apr 21, 2023 Operating system = Linux 5.4.0-1072-fips Controller = 0 Status = Success Description = Add LD Succeeded.Stato della crittografia del disco simulata nel report CR del server.
Modifica lo stato della richiesta di modifica del server:
kubectl edit-status --kubeconfig "${KUBECONFIG:?must be set}" server ${SERVER_NAME:?} -n gpc-systemAggiungi o modifica lo stato
DiskEncryptionEnabledsu true:- lastTransitionTime: "<time>" message: "" observedGeneration: 1 reason: DiskEncryptionJobSucceeded status: "True" type: DiskEncryptionEnabledElimina il job di crittografia del server, se presente:
kubectl --kubeconfig "${KUBECONFIG:?must be set}" delete job server-encrypt-and-create-logical-drive-${SERVER_NAME:?} -n gpc-systemRiattiva il server in modo che il provisioning riprenda:
kubectl --kubeconfig "${KUBECONFIG:?must be set}" annotate server ${SERVER_NAME:?} -n gpc-system --overwrite server.system.private.gdc.goog/paused-
L'eliminazione sicura non riesce senza una licenza
Versioni: 1.13.5
Sintomi: quando un server si blocca durante l'installazione, potresti visualizzare uno stato sul server CR simile al seguente:
- lastTransitionTime: "2024-09-10T20:28:33Z"
message: 'unable to trigger secure erase: unable to complete secure erase
for server "zx-ad-bm07": failed to post payload to /redfish/v1/Systems/1/Actions/Oem/Hpe/HpeComputerSystemExt.SecureSystemErase:
400: {"error":{"code":"iLO.0.10.ExtendedInfo","message":"See @Message.ExtendedInfo
for more information.","@Message.ExtendedInfo":[{"MessageId":"iLO.2.27.LicenseKeyRequired"}]}}'
reason: Succeeded
status: "False"
type: BMCConfigPreinstallSecureEraseTriggered
Soluzione alternativa: segui le istruzioni nel runbook SERV-R0014.
Sicurezza della piattaforma
BYO SubCA reconciler non verifica se i certificati hanno una chiave pubblica corrispondente
Versioni: 1.13.1
Sintomi: quando la modalità PKI BYO SubCA genera una nuova richiesta di firma del certificato
(CSR) mentre un certificato firmato in precedenza viene caricato nella SubCA, il
riconciliatore non controlla se la nuova CSR corrisponde al vecchio certificato firmato e
contrassegna la risorsa personalizzata (CR) cert-manager CertificateRequest come Ready.
Ciò si verifica durante il rinnovo o la rotazione manuale del certificato della SubCA. Il controller cert-manager
tenta di aggiornare lo stato di Certificate CR, il che attiva il
seguente messaggio di errore:
The certificate request has failed to complete and will be retried: Error signing certificate: error creating x509 │
│ certificate: x509: provided PrivateKey doesn't match parent's PublicKey
Soluzione temporanea:
Segui le istruzioni per caricare un nuovo certificato BYO SubCA firmato per la nuova CSR.
Il problema di cert-manager comporta l'emissione senza esito di PKI BYO con ACME
Versioni: 1.13.1
Sintomi:l'errore si verifica al primo rilascio o rinnovo dei certificati BYO con ACME (Automated Certificate Management Environment). Quando esegui il comando per controllare lo stato del certificato, visualizzi che il certificato è not ready:
kubectl -n istio-system get certificate.pki.security.gdc.goog/default-wildcard-cert
L'output è simile al seguente:
status:
conditions:
- lastTransitionTime: "2024-07-23T17:27:02Z"
message: 'reconciling Certificate status failed: cert-manager Certificate CR "default-wildcard-cert-pki-ct"/"pki-system" is not ready'
observedGeneration: 1
reason: ReconcileBackoff
status: "False"
type: Ready
Soluzione temporanea:
Riavvia il deployment di cert-manager nel cluster di amministrazione dell'organizzazione:
export KUBECONFIG=ORG_ADMIN_KUBECONFIG
kubectl rollout restart deployment/cert-manager -n cert-manager
Resource Manager
Lo stato del progetto non è disponibile nella console GDC
Versioni: 1.13.1+
Sintomi:la console GDC non mostra lo stato di un progetto.
I progetti che non si trovano nello stato Ready non possono supportare nuove risorse o
elaborare nuove modifiche alle risorse esistenti. A causa dell'impossibilità di
confermare lo stato del progetto, non è chiaro quando le risorse di un progetto possono essere
gestite, il che comporta errori quando si tentano nuove azioni del progetto.
Soluzione:consulta il runbook RM-R0100 per stampare lo stato del progetto utilizzando kubectl CLI.
Esegui l'upgrade
bm-system e altri job bloccati
Versioni: 1.13.1
Sintomi:bm-system e altri job che eseguono il playbook Ansible sono bloccati su gathering facts.
Soluzione alternativa:inserisci il nome del nodo bloccato ed esegui multipath -ll | grep failed e multipath -ll | grep #. Se il risultato non è vuoto,segui i runbook FILE R0020 e FILE R0021.
IP gestione non raggiungibile
Versioni: 1.13.1, 1.13.3, 1.13.4, 1.13.5
Sintomi: durante un upgrade l'IP di gestione di un server non è raggiungibile, in particolare dopo un cambio.
Con Rocky Linux, quando vengono aggiunte route statiche, l'IP di destinazione utilizzato per raggiungere le route statiche deve essere raggiungibile prima dell'aggiunta delle route statiche. Se lo switch si riavvia dopo un upgrade del sistema operativo, l'IP di gestione potrebbe essere temporaneamente irraggiungibile.
Soluzione alternativa: 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
Il numero di versione di storagecluster non viene visualizzato
Versioni: 1.13.3
Sintomi: dopo un upgrade,
il CR StorageCluster non mostra alcun valore per il campo di stato StorageVersion.
Controlla la versione:
kubectl --kubeconfig <var>ROOT_ADMIN_KUBECONFIG</var> get StorageCluster -n gpc-system
Segui i passaggi della soluzione alternativa se il campo della versione è vuoto.
Soluzione: riavvia il deployment di file-storage-backend-controller:
kubectl --kubeconfig <var>ROOT_ADMIN_KUBECONFIG</var> rollout restart deployment -n file-system file-storage-backend-controller
Il server Bare Metal è bloccato nello stato di provisioning
Versioni: 1.13.1
Sintomi:
Il server bare metal è bloccato nello stato "provisioning" per molto tempo durante la creazione di un'organizzazione.
Soluzione:
È possibile che la configurazione del BIOS del server sia stata modificata in modo che il server utilizzi la scheda di rete errata per l'avvio PXE.
Segui questi passaggi per disabilitare l'avvio di rete della NIC del piano dati.
- Accesso richiesto:
Imposta il nome del server bloccato.
export SERVER_NAME=Imposta l'IP e le credenziali del BMC del server.
export ip=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME:?} -n gpc-system -ojsonpath='{.spec.bmc.ip}') export BMC_CREDENTIALS_SECRET=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME:?} -n gpc-system -ojsonpath='{.spec.bmc.credentialsRef.name}') export user=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get secret ${BMC_CREDENTIALS_SECRET:?} -n gpc-system -ojsonpath='{.data.username}' | base64 -d) export pass=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get secret ${BMC_CREDENTIALS_SECRET:?} -n gpc-system -ojsonpath='{.data.password}' | base64 -d)Identifica lo slot PCIe della scheda di rete del piano dati sul server.
kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME} -n gpc-system -o jsonpath={.spec.serverHardware.portBond.nicPortNames}Ad esempio, l'output seguente indica che la scheda di rete è installata nello slot 3.
["s3p1","s3p2"]Imposta la variabile PCIEslot:
export DATA_NIC_SLOT=3Verifica che l'avvio di rete non sia disattivato.
curl -ks -u $user:$pass https://$ip/redfish/v1/systems/1/bios/settings | jq .Attributes | grep "Slot${DATA_NIC_SLOT}NicBoot1"Se il risultato è "NetworkBoot", devi disattivarlo esplicitamente.
Utilizza BMC per disattivare la funzione di avvio di rete sulla scheda di rete del piano dati.
Sostituisci "Slot3" nel seguente comando con il numero di slot effettivo.
curl -k -u "$user":"$pass" -H "Content-Type: application/json" https://$ip/redfish/v1/systems/1/bios/settings/ -X PUT --data '{"Attributes":{"Slot3NicBoot1":"Disabled"}}' | jqe poi riavvia la macchina.
curl -k -u "$user":"$pass" -H "Content-Type: application/json" https://$ip/redfish/v1/Systems/1/Actions/ComputerSystem.Reset/ -X POST -d '{"ResetType": "ForceRestart"}' | jqIl server impiega 10-15 minuti per riattivarsi e riprende automaticamente il processo di provisioning.
L'upgrade dell'object storage mostra un errore durante il controllo postflight o preflight
Versioni: 1.13.1
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:
Se l'errore si verifica durante i controlli post-volo e tutti gli altri controlli vengono completati senza errori, ignora i controlli post-volo. Quando il riavvio dell'upgrade, devi saltare anche i controlli preliminari utilizzando kubeconfig di amministrazione 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=okAd 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-postflight-check=ok && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=okSe 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=okAd 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.
Rollback degli upgrade di Helm
Versioni: 1.13.3
Sintomi: un problema di upgrade di Helm comporta una serie di rollback, senza riuscire a trovare un Certificate e un ServiceEntry. Potresti visualizzare un messaggio simile a questo:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
91 Thu Jul 18 13:26:42 2024 deployed iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Upgrade complete
9138 Fri Jul 19 22:21:56 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9139 Fri Jul 19 22:22:04 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9140 Fri Jul 19 22:22:16 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9141 Fri Jul 19 22:22:30 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9142 Fri Jul 19 22:22:35 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9143 Fri Jul 19 22:22:42 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9144 Fri Jul 19 22:22:48 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9145 Fri Jul 19 22:22:56 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9146 Fri Jul 19 22:23:04 2024 failed iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
Soluzione alternativa: segui i passaggi nel runbook OCLCM-R0122.
Upgrade del nodo o ABM bloccato perché il pod dhcp-tftp-core-server non è stato svuotato
Versioni: 1.13.3, 1.14.4, 1.14.5
Sintomi: l'upgrade del nodo potrebbe bloccarsi. Nello stato della macchina bare metal
il pod dhcp-tftp-core-server non viene svuotato. Potresti visualizzare un messaggio simile a questo:
bareMetalMachineDrainingStatus:
currentDrainingStage: SystemCriticalPriorityClass
podsYetToDrain:
- name: dhcp-tftp-core-server-7ffcfcbb97-6wlg7
namespace: dhcp-system
resourceVersion: "5005530"
uid: f77826ea-1d57-46ff-a699-f42faa36c1d2
Soluzione alternativa: elimina forzatamente il pod dhcp-tftp-core-server-* per continuare. Il comando
ha il seguente aspetto:
kubectl delete pod dhcp-tftp-core-server-7ffcfcbb97-6wlg7 -n dhcp-system --force
OrganizationUpgrade è bloccato nella fase di upgrade dei nodi
Versioni: 1.13.3
Sintomi: OrganizationUpgrade è bloccato nella fase di upgrade del nodo. Potresti visualizzare un messaggio simile a questo:
Last Transition Time: 2024-08-27T12:37:40Z
Message: observed the following reason: [JobRunning]
Observed Generation: 614
Reason: Unsuccessful
Status: Unknown
Type: service/Node
Soluzione:
Controlla la presenza di
upgradetaskrequestCR nel cluster radiceka get upgradetaskrequest -n gpc-system. Controlla se il nodo è ancora in stato di esecuzione. Assicurati che sia bloccato nell'attività per il servizio.spec: clusterType: service Last Transition Time: 024-08-27T12:37:40Z Message: job gpc-system/v1.13.0-os-aa505d9004-upg-task-org-1-os-node-upgra-czwwd is running Observed Generation: 1 Reason: JobRunning Status: Unknown Type: SucceededCrea manualmente
nodeupgradeCR per ogni rivendicazione del node pool:export KUBECONFIG=ORG_ADMIN_KUBECONFIG kubectl get nodepoolclaims -n g-org-1-shared-service-cluster NAME AGE control-plane-node-pool 34d dbs-billing-system-billing-dbcluster-n2-standard-4-gdc 34d shared-service-default-worker 34dCrea un
nodeupgradeCR per ogni rivendicazione del node pool. I dettagli dell'annotazioneupgrade.private.gdc.goog/target-release-versiondevono essere ottenuti dal nome CRMD del sistema operativo della destinazione:kubectl get crmd --kubeconfig ${ROOT_ADMIN_KUBECONFIG} | grep "os" os-1.13.1-gdch.525 35d os-v1.13.0-os-4175a6dce6 27d os-v1.13.0-os-aa505d9004 5d18hUtilizza la versione da qui nelle annotazioni
upgrade.private.gdc.goog/target-release-version:kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} get crmd os-v1.13.0-os-aa505d9004 -o json | jq -r '.spec.config.vmNodeImage' rocky-86-1.13-v20240731-1.13-r191Applica il seguente
yamlper ogni NodePoolClaim:apiVersion: upgrade.private.gdc.goog/v1alpha1 kind: NodeUpgrade metadata: annotations: upgrade.private.gdc.goog/target-release-version: VERSION name: NAME labels: addon.private.gdc.goog/cluster-type: service namespace: NAMESPACE spec: inFlightConf: maxConcurrentNodes: 1 nodePoolClaimRef: name: NAME namespace: NAMESPACE nodeType: Virtual software: osImage: name: NAME version: VERSIONUna volta completati gli upgrade dei nodi per i nodi del cluster di servizio, aggiorna lo stato della CR
UpgradeTaskRequestsu True, in modo che l'upgrade dell'organizzazione proceda alla fase successiva:kubectl patch upgradetaskrequest upg-task-org-1-os-node-upgrade-task-pckxn --type='json' -p='[{"op": "replace", "path": "/status/conditions/0/status", "value": "True"}]' --subresource=status -n gpc-system --kubeconfig /root/release/root-admin/root-admin-kubeconfigL'upgrade dell'organizzazione dovrebbe ora procedere alla fase successiva e lo stato del servizio o del nodo sarà completato:
Last Transition Time: 2024-08-27T22:44:09Z Message: observed the following reason: [JobRunning] Observed Generation: 614 Reason: Complete Status: True Type: service/Node
Il kernel non riesce a creare un container
Versioni: 1.13.3
Sintomi: il kernel non riesce ad allocare memoria cgroup, causando errori nella creazione di nuovi container.
Potresti visualizzare un messaggio simile a questo:
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
FrequentContainerdRestart False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentContainerdRestart containerd is functioning properly
KernelDeadlock False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 KernelHasNoDeadlock kernel has no deadlock
ReadonlyFilesystem False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 FilesystemIsNotReadOnly Filesystem is not read-only
ContainerRuntimeUnhealthy False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 10:52:30 +0000 ContainerRuntimeIsHealthy Container runtime on the node is functioning properly
FrequentUnregisterNetDevice False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentUnregisterNetDevice node is functioning properly
KubeletUnhealthy False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 KubeletIsHealthy kubelet on the node is functioning properly
FrequentKubeletRestart False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentKubeletRestart kubelet is functioning properly
FrequentDockerRestart False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentDockerRestart docker is functioning properly
MemoryPressure Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
DiskPressure Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
PIDPressure Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
Ready Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
[root@zv-aa-bm01 ~]# journalctl -u kubelet -f | grep cilium-agent
Aug 29 17:29:47 zv-aa-bm01 kubelet[48625]: E0829 17:29:47.941493 48625 pod_workers.go:1298]
"Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=anetd-pvmz4_kube-system(db55cbd2-36e3-4d20-8c6b-edbb5191232d)\"" pod="kube-system/anetd-pvmz4" podUID="db55cbd2-36e3-4d20-8c6b-edbb5191232d"
Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
e il nodo utilizza un numero molto elevato di cgroup:
# cat /proc/cgroups | grep memory
memory 12 380360 1
Soluzione:
Prova una delle seguenti soluzioni:
- Esegui
echo 3 > /proc/sys/vm/drop_cachessul nodo e riavvia kubelet. - Se il metodo precedente non funziona, prova a riavviare il nodo.
Errore di connettività intermittente al VIP del cluster esterno
Versioni: 1.13.3
Sintomi: errori di connessione intermittenti al VIP virtuale del cluster esterno, ad esempio il VIP del control plane, il VIP istio-gateway o il VIP Harbor, comportano un errore dial tcp :: connect: no route to host.
Per diagnosticare il problema:
- Connettiti al
cluster di amministrazione principale.
Questa soluzione alternativa presuppone che tu stia eseguendo il debug per gli indirizzi IP in un cluster di amministrazione principale. Se esegui il debug dei problemi di connettività con altri cluster Kubernetes
come i cluster di amministrazione dell'organizzazione o di sistema dell'organizzazione, modifica il valore di
KUBECONFIGcon il percorso kubeconfig del cluster corretto. Esistono due categorie note di indirizzi IP che possono essere interessati. Verifica se il Border Gateway Protocol (BGP) pubblicizza gli indirizzi IP agli switch top-of-rack (ToR):
Se l'IP è un indirizzo IP del control plane Kubernetes come
192.0.2.100, utilizza questo comando per ottenere le informazioni di configurazione:KUBECONFIG=KUBECONFIG kubectl cluster-info # Kubernetes control plane is running at https://192.0.2.100:443`Sostituisci
KUBECONFIGcon il percorso del file kubeconfig nel cluster di amministrazione principale.Per alcune configurazioni, la risorsa personalizzata
BGPAdvertisedRoutedefinisce quali route nell'indirizzo IP vengono pubblicizzate ad altre reti o sistemi utilizzando BGP. Se l'indirizzo IP viene pubblicizzato dalla risorsa personalizzataBGPAdvertisedRoute, utilizza questo comando per ottenere le informazioni di configurazione:TARGET_IP=TARGET_IP_ADDRESS KUBECONFIG=KUBECONFIG kubectl get BGPAdvertisedRoute -A --kubeconfig=$KUBECONFIG | grep $TARGET_IPSostituisci
TARGET_IP_ADDRESScon l'indirizzo IP che presenta problemi di connettività intermittenti.
Controlla lo stato delle risorse personalizzate
BGPSession. UnBGPSessionrappresenta una singola sessione di peering BGP stabilita tra il tuo cluster Kubernetes e un peer BGP esterno. Ispeziona i log dei podBGPAdvertisere verifica che tutte le risorseBGPSessionsi trovino nello statoEstablished:KUBECONFIG=KUBECONFIG kubectl get pods -l app=bgpadvertiser -n kube-system # Based on the name of pods, check their logs kubectl logs pod/bgpadvertiser-gpc-adhoc-6a265a03vm-worker-node0-zone1 -n kube-system --kubeconfig=$KUBECONFIG`L'output di un pod
BGPAdvertiserintegro contiene il seguente snippet:I0904 04:32:19.999906 1 main.go:217] BGP advertiser serving...\ time="2024-09-04T04:32:25Z" level=info msg="Peer Up" Key=10.200.0.1 State=BGP_FSM_OPENCONFIRM Topic=Peer\Verifica la stabilità della connessione. Crea ed esegui uno script per verificare se la connettività è intermittente o instabile:
Crea lo script:
#!/bin/bash TARGET=$1 CNT=0 for i in {1..100}; do output=$(curl --no-progress-meter -k https://$TARGET 2>&1) if echo "$output" | grep -q "No route to host"; then CNT=$((CNT+ 1)) echo "Attempt $i: $output" fi sleep 0.1 done echo "$CNT out of 100 runs hit No route to host error"Esegui lo script:
./script.sh TARGET_IP_ADDRESS:PORTSostituisci
PORTcon il numero di porta che presenta problemi.Se la connessione presenta problemi, visualizzerai un output simile al seguente:
Attempt 2: curl: (7) Failed to connect to 192.0.2.201 port 10443: No route to host Attempt 4: curl: (7) Failed to connect to 192.0.2.201 port 10443: No route to host Attempt 7: curl: (7) Failed to connect to 192.0.2.201 port 10443: No route to host`
L'output precedente conferma il problema. Controlla le route sugli switch TOR per verificare se la configurazione degli switch TOR è la causa del problema.
Supponendo che il traffico venga eliminato per un indirizzo IP di esempio
192.0.2.201e che venga pubblicizzato dalla risorsaBGPAdvertisedRoute, esamina gli hop nella risorsaBGPAdvertisedRouteper identificare i potenziali punti di errore:apiVersion: networking.gke.io/v1 kind: BGPAdvertisedRoute metadata: annotations: bgploadbalancer.networking.gke.io/servicename: istio-ingressgateway bgploadbalancer.networking.gke.io/servicens: istio-system creationTimestamp: "2024-08-20T19:03:02Z" generation: 150 name: default-istio-system-istio-ingressgateway-rj2fv namespace: kube-system ownerReferences: - apiVersion: networking.gke.io/v1 blockOwnerDeletion: true controller: true kind: BGPLoadBalancer name: default uid: f681f3e5-c66a-45d6-a3ac-9d7ae26f555f resourceVersion: "27133500" uid: 8ede0c81-3aba-40ce-a441-4aec334b41bd spec: bgpPeerNames: - 192.0.2.6-peer-10.0.1.1 - 192.0.2.5-peer-10.0.1.0 - 192.0.2.5-peer-10.0.1.1 - 192.0.2.6-peer-10.0.1.0 nextHops: - 192.0.2.2 - 192.0.2.3 - 192.0.2.4 prefix: 192.0.2.201/32Guarda gli indirizzi IP nel campo
nextHops. Per ogni indirizzo IP, trova il nome del server. Ad esempio:- 192.0.2.2 zt-aa-bm08 - 192.0.2.3 zt-aa-bm09 - 192.0.2.4 zt-ab-bm01Questo output mostra che gli hop successivi sono verso i server nel rack
aae nel rackab. Accedi agli switch TOR nei rackaaeabe confronta le route in entrambi i rack:show ip route 192.0.2.201 vrf root-external-vrfSe le route sono diverse tra gli switch TOR nei due rack, si verifica il problema che la soluzione alternativa mitiga. L'output per questo problema è simile al seguente:
zt-aa-torsw01# show ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 3/0, all-best *via 192.0.2.2, [20/0], 1w1d, bgp-65070, external, tag 64513 *via 192.0.2.3, [20/0], 1w1d, bgp-65070, external, tag 64513 *via 192.0.2.4, [20/0], 1w1d, bgp-65070, external, tag 64513 zt-aa-torsw02# sh ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 3/0, all-best *via 192.0.2.2, [20/0], 1w3d, bgp-65070, external, tag 64513 *via 192.0.2.3, [20/0], 1w3d, bgp-65070, external, tag 64513 *via 192.0.2.4, [20/0], 1w3d, bgp-65070, external, tag 64513 zt-ab-torsw01# show ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 2/0, all-best *via 10.249.88.2, [200/0], 1w1d, bgp-65070, internal, tag 64513 *via 192.0.2.3, [200/0], 1w1d, bgp-65070, internal, tag 64513 zt-ab-torsw02# sh ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 2/0, all-best *via 192.0.2.2, [200/0], 1w3d, bgp-65070, internal, tag 64513 *via 192.0.2.3, [200/0], 1w3d, bgp-65070, internal, tag 64513In questo output, le route nel rack
aasi trovano nello stato previsto e mostrano tre hop successivi elencati rispetto al prefisso. Tuttavia, nel rackab, il prefisso ha solo due hop successivi. Quando il traffico destinato al prefisso viene sottoposto ad hashing al rackabil nodo corrispondente all'hop successivo mancante non riceve mai il traffico e la rete riscontra il problema di connettività.
Segui la soluzione alternativa per mitigare il problema.
Soluzione:
Questa soluzione alternativa aiuta a risolvere i problemi di connettività intermittente a determinati indirizzi IP all'interno dei cluster Kubernetes.
Per risolvere questo problema, devi applicare diverse modifiche alla configurazione della sessione BGP tra gli switch di aggregazione. Gli switch di aggregazione (AGG) aggregano il traffico da più switch TOR. Segui questi passaggi per aggiornare tutte le configurazioni necessarie:
Un file di configurazione denominato
switchstaticconfigrappresenta le configurazioni statiche su un singolo switch. Scarica il fileswitchstaticconfigper entrambi gli switch AGG:export KUBECONFIG=KUBECONFIG kubectl get switchstaticconfig za-ab-aggsw01-static-config -n gpc-system -oyaml > /tmp/za-ab-aggsw01-static-config.yaml kubectl get switchstaticconfig za-ac-aggsw01-static-config -n gpc-system -oyaml > /tmp/za-ac-aggsw01-static-config.yamlOttieni il numero di sistema autonomo (ASN) dell'ambiente:
root@bootstrapper:/tmp# kubectl get ClusterBGPRouter --kubeconfig KUBECONFIG -A -o yaml | grep networkASN | head -1 networkASN: 65030Questo output mostra un valore ASN di
65030. Devi utilizzare il valore ASN restituito qui nei passaggi successivi.Un indirizzo IP di loopback su uno switch AGG funge da indirizzo stabile e sempre attivo per la gestione, il routing e la risoluzione dei problemi, anche se altre connessioni di rete non sono attive. Recupera gli indirizzi IP di loopback di ciascuno degli switch AGG:
root@bootstrapper:~# kubectl get --kubeconfig KUBECONFIG aggswitchinternal -n gpc-system -o jsonpath='{range.items[*]}{.metadata.name}{":\t"}{.spec.loopbackIPs}{"\n"}{end}'L'output è simile al seguente:
za-ab-aggsw01-internal: ["192.0.2.1"] za-ac-aggsw01-internal: ["192.0.2.2"]Aggiorna
staticswitchconfigper l'interruttoreza-ab-aggsw01AGG. Aggiungi questo snippet alla sezioneconfig:spec: config: | route-map onlydefault permit 10 match ip address prefix default router bgp ASN neighbor LOOPBACK_ADDRESS address-family l2vpn evpn route-map onlydefault in ... key chain OSPF_AUTH_KEYCHAIN_0 key 1Sostituisci quanto segue:
ASN: il valore ASN del passaggio precedente. In questo esempio, questo valore è65030.LOOPBACK_ADDRESS: Questo è l'indirizzo IP di loopback dello switch AGGza-ac-aggsw01. In questo esempio, il valore è192.0.2.2.
Applica lo stesso aggiornamento all'altro interruttore AGG,
za-ac-aggsw01. Devi fornire l'indirizzo di loopback corretto. L'indirizzo IP di loopback è diverso per ogni switch:za-ab-aggsw01-internal: ["192.0.2.1"] za-ac-aggsw01-internal: ["192.0.2.2"]Crea ed esegui lo stesso script utilizzato per diagnosticare il problema in questo passaggio per verificare che la correzione sia riuscita. L'output non mostra messaggi di errore.
Durante l'upgrade viene visualizzato l'errore Incorrect version of Trident
Versioni: 1.13.3, 1.13.4, 1.13.5
Sintomi: quando esegui l'upgrade da versioni precedenti alla 1.13.3, ontap mostra l'errore Incorrect version of Trident. Potresti visualizzare un messaggio simile a questo:
Status:
Conditions:
Last Transition Time: 2024-08-27T15:19:07Z
Message: Incorrect version of Trident. Wanted v23.10.0-gke.6, got v23.10.0-gke5
Observed Generation: 1
Reason: QualificationFailed
Status: False
Type: AllComplete
Events:
Soluzione:
Aggiorna
releasemetadatadella versione a cui stai eseguendo l'upgrade:export KUBECONFIG=<point to ROOT Admin Kubeconfig> To get the list of all releasemetadata: `kubectl get releasemetadata`L'output potrebbe essere simile al seguente:
NAME AGE 1.12.2-gdch.785 24d 1.12.4-gdch.96 13d 1.13.3-gdch.5548 11hScegli la versione a cui eseguire l'upgrade, come indicato nell'esempio seguente:
kubectl get releasemetadata 1.13.3-gdch.5548 -o yaml > releasemetadata.yamlAggiorna tridentVersion nella sezione fileBlockStorage di .yaml alla versione menzionata nell'errore. Se il messaggio di errore era simile a questo:
Message: Incorrect version of Trident. Wanted v23.10.0-gke.6, got v23.10.0-gke.5Modifica
tridentVersioninv23.10.0-gke.5inreleasemetadata.yaml.Ad esempio, se il valore originale era:
infraComponents: fileBlockStorage: ONTAPVersion: 9.14.1P1 harvestVersion: v22.08.0-gke.7 tridentVersion: v23.10.0-gke.6,Modificalo con il seguente valore:
infraComponents: fileBlockStorage: ONTAPVersion: 9.14.1P1 harvestVersion: v22.08.0-gke.7 tridentVersion: v23.10.0-gke.5.Applica le modifiche:
kubectl apply -f releasemetadata.yamlApplica di nuovo l'upgrade dello spazio di archiviazione di
ontap.
Impossibile pianificare i pod
Versioni: 1.13.3. 1.13.4, 1.13.5
Sintomi: durante il provisioning del cluster utente, la pianificazione di alcuni pod non va a buon fine. Potresti visualizzare un messaggio simile a questo:
0/6 nodes are available: 1 Insufficient cpu. preemption: 0/6 nodes are available: 6 No preemption victims found for incoming pod
Soluzione:
Aumenta le dimensioni del pool di nodi del control plane del cluster utente:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG patch addresspoolclaim/control-plane-node-pool -n ${CLUSTER_NAME}-cluster --type=json -p="[{'op': 'replace', 'path': '/spec/size', 'value': 5}]"
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG patch nodepoolclaim/control-plane-node-pool -n ${CLUSTER_NAME}-cluster --type=json -p="[{'op': 'replace', 'path': '/spec/nodeCount', 'value': 5}]"
L'upgrade non riesce nel sottocomponente iac-zoneselection-global
Versioni: 1.13.1
Sintomi: durante un upgrade alla versione 1.13.3, si verifica un errore nel sottocomponente iac-zoneselection-global. Potresti visualizzare un messaggio simile a questo:
== Subcomponents with failures in root org ===
Sub-Component: iac-zoneselection-global - Reconciliation error: E0100 - deploy: failed to install chart: release iac-zoneselection-global-backend failed, and has been uninstalled due to atomic being set: 1 error occurred:
* ZoneSelection.location.mz.global.private.gdc.goog "iac" is invalid: spec.resultObjectName: Required value
Events: Type Reason Age From Message
---- ------ ---- ---- -------
Warning ReconciliationError 119s (x521 over 20h) Subcomponent E0100 - deploy: failed to install chart: release iac-zoneselection-global-backend failed, and has been uninstalled due to atomic being set: 1 error occurred:
* ZoneSelection.location.mz.global.private.gdc.goog "iac" is invalid: spec.resultObjectName: Required value
Soluzione:
L'upgrade alla versione 1.13.3 corregge l'errore.
Upgrade check jobs has deadline exceeded
Versioni: 1.12.x, 1.13.x
Sintomi:durante l'upgrade dell'organizzazione, il controllo dell'upgrade mostra lo stato False con il motivo DeadlineExceeded. Potresti visualizzare un messaggio simile a questo:
Preflight Check:
Conditions:
Last Transition Time: 2024-10-29T18:57:47Z
Message: the result has status: False, reason: PreflightCheckFailed, and err: [check "OPAUpgrade" of operable component "OPA" failed with reason "DeadlineExceeded", no existing pods found, check "Arti
actAvailability" of operable component "AR" failed with reason "DeadlineExceeded", no existing pods found, check "PackageValidation" of operable component "AR" failed with reason "DeadlineExceeded", no existing pods foun
d, check "IAMUpgrade" of operable component "IAM" failed with reason "DeadlineExceeded", no existing pods found, check "NodeHealth" of operable component "OS" failed with reason "DeadlineExceeded", no existing pods found
, check "DNSHealth" of operable component "DNS" failed with reason "DeadlineExceeded", no existing pods found, check "AdminClusterCheck" of operable component "UPORC" failed with reason "DeadlineExceeded", no existing po
ds found[]
Observed Generation: 3
Reason: PreflightCheckFailed
Status: False
Type: Succeeded
Start Time: 2024-10-29T17:57:47Z
Soluzione:
- Elimina i job di controllo dell'upgrade non riuscito corrispondenti ai controlli dell'upgrade non riuscito.
- Attendi che vengano ricreati i job di controllo dell'upgrade.
- Esamina i log dei job ricreati e risolvi i problemi.
Il componente aggiuntivo meta-monitoring non funziona perché la posizione di strongswan si trova in una directory di runtime diversa
Versioni: 1.12.x, 1.13.x
Sintomi: durante l'upgrade alla versione 1.13.4 o 1.13.5, il componente aggiuntivo meta-monitoring non funziona:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIGget addons -A | grep meta-monitoring
org-1-system-cluster meta-monitoring false false 1.12.4-gdch.96
Controlla il componente aggiuntivo:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG get -n org-1-system-cluster addon meta-monitoring -o yaml
Il messaggio della condizione potrebbe avere il seguente aspetto:
status:
conditions:
- lastTransitionTime: "2024-11-19T02:57:30Z"
message: 'Error occurred during addon installation: failed to rollback chart:
create: failed to create: Internal error occurred: failed calling webhook "validation.gatekeeper.sh":
failed to call webhook: Post "https://gatekeeper-webhook-service.opa-system.svc:443/v1/admit?timeout=3s":
context deadline exceeded'
observedGeneration: 2
reason: InstallationError
status: "False"
type: Deployed
Soluzione:
Assicurati che le sessioni BGP nel cluster di sistema dell'organizzazione non vadano a buon fine, ad esempio:
kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG get bgpsessions -A NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT 10.252.122.10-peer-10.0.1.32-vm-7351eebe 64513 65030 10.252.122.10 10.0.1.32 10.252.122.10-peer-10.0.1.33-vm-7351eebe 64513 65030 10.252.122.10 10.0.1.33 10.252.122.11-peer-10.0.1.32-vm-7351eebe 64513 65030 10.252.122.11 10.0.1.32 10.252.122.11-peer-10.0.1.33-vm-7351eebe 64513 65030 10.252.122.11 10.0.1.33 172.20.128.3-peer-10.0.1.48-za-aa-bm02-hltg2 64513 65030 172.20.128.3 10.0.1.48 172.20.128.3-peer-10.0.1.49-za-aa-bm02-hqblq 64513 65030 172.20.128.3 10.0.1.49Assicurati che i pod
ang-nodesiano bloccati suContainerCreating, ad esempio:kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG get pods -n kube-system -l app=ang-node NAME READY STATUS RESTARTS AGE ang-node-5c6c8 0/3 ContainerCreating 0 2d21h ang-node-6skkl 0/3 ContainerCreating 0 2d14h ang-node-7d7dj 0/3 ContainerCreating 0 2d20h ang-node-9l4xc 0/3 ContainerCreating 0 2d17hViene visualizzato il seguente errore:
Warning FailedMount 112s (x2056 over 2d21h) kubelet MountVolume.SetUp failed for volume "vici" : hostPath type check failed: /var/run/strongswan is not a directoryApplica la seguente modifica a
ang-overridesAddonConfiguration nel cluster di amministrazione dell'organizzazione:kubectl --kubeconfig ORG_ADMIN_KUBECONFIG edit addonconfiguration ang-overrides -n org-1-system-clusterModifica quanto segue:
volumes: - hostPath: path: /var/run/strongswan type: Directory name: vicia quanto segue:
volumes: - hostPath: path: /var/run type: Directory name: viciDopo circa un minuto, verifica che i pod
ang-nodesi trovino ora nello statoRunning:NAME READY STATUS RESTARTS AGE ang-node-7hj5q 3/3 Running 0 15s ang-node-xps2m 3/3 Running 0 34s ang-node-krx8p 3/3 Running 0 34s ang-node-cbm1a 3/3 Running 0 34sAssicurati che le sessioni BGP nel cluster di sistema dell'organizzazione siano ora in esecuzione.
Il componente aggiuntivo
meta-monitoringpasserà alla fase successiva.
L'upgrade dell'organizzazione principale è bloccato a causa dell'errore del job di firma
Versioni: 1.13.3, 1.13.4
Sintomi: durante l'upgrade dalla versione 1.13.3 alla 1.13.4, potresti visualizzare un messaggio come questo:
Message: [the result has status: False, reason: PreflightCheckFailed, and err: check "PackageValidation" of operable component "AR" failed with reason "DeadlineExceeded", no existing pods found, the result has status: Unknown, reason: UpgradeCheckJobsInProgress
Soluzione:
Disattiva il controllo preflight:
kubectl annotate -n gpc-system organization root upgrade.private.gdc.goog/skip-preflight-check=okElimina il job
artifact-signature-verification-***non riuscito.Attendi il completamento dell'upgrade della radice.
(Facoltativo) Attiva il controllo pre-volo se l'ambiente è stato aggiornato alla versione 1.13.4 o successive.
Una volta che il controller raggiunge la versione 1.13.4, gli upgrade non dovrebbero presentare questo problema.
L'upgrade dell'organizzazione tenant non riesce nella fase di controllo preflight con ErrImagePull
Versioni: 1.13.3
Sintomi: l'upgrade dell'organizzazione tenant non riesce nella fase di controllo preflight con ErrImagePull per il pod di convalida del pacchetto. Potresti visualizzare un messaggio simile a questo:
export KUBECONFIG=ORG_ADMIN_KUBECONFIG
kubectl get po -n package-validation-system | grep artifact-signature-verification
I pod mostrano un errore ImagePullBackOff:
kubectl describe po -n package-validation-system POD_NAME
Viene visualizzato un errore pull immagine, ad esempio il seguente:
Name: artifact-signature-verification-20240823224755-4ppkt
Namespace: package-validation-system
Priority: 0
Service Account: package-validation
Node: ak-ab-base02/203.0.113.250
Start Time: Fri, 23 Aug 2024 22:47:55 +0000
Labels: batch.kubernetes.io/controller-uid=bf81d5eb-d597-464e-a907-67c1c8a11c11
batch.kubernetes.io/job-name=artifact-signature-verification-20240823224755
controller-uid=bf81d5eb-d597-464e-a907-67c1c8a11c11
job-name=artifact-signature-verification-20240823224755
Annotations: <none>
Status: Pending
IP: 203.0.113.255
IPs:
IP: 203.0.113.255
Controlled By: Job/artifact-signature-verification-20240823224755
Containers:
artifact-signature-verification:
Container ID:
Image: gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
...
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 10m default-scheduler Successfully assigned package-validation-system/artifact-signature-verification-20240823224755-4ppkt to ak-ab-base02
Normal Pulling 7m25s (x4 over 9m22s) kubelet Pulling image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004"
Warning Failed 7m14s (x4 over 9m12s) kubelet Failed to pull image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004": failed to pull and unpack image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004": failed to resolve reference "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004": unexpected status from HEAD request to https://203.0.113.255/v2/private-cloud-staging/signature-verifier/manifests/v1.13.0-uporc-aa505d9004?ns=gcr.io: 401 Unauthorized
Warning Failed 7m14s (x4 over 9m12s) kubelet Error: ErrImagePull
Warning Failed 7m3s (x6 over 9m11s) kubelet Error: ImagePullBackOff
Normal BackOff 4m11s (x17 over 9m11s) kubelet Back-off pulling image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004"
Soluzione:
Salta i controlli preliminari:
kubectl annotate -n gpc-system organization ORG_NAME \
upgrade.private.gdc.goog/skip-preflight-check=ok
Impossibile trovare serviceaccount durante l'upgrade dell'organizzazione principale
Versioni: 1.13.8, 1.13.9
Sintomi: durante l'upgrade alla versione 1.13.8, il deployment di addon per i controlli dell'accesso basato sui ruoli non riesce se sono stati eseguiti upgrade precedenti e se esistono già componenti aggiuntivi. I sintomi possono trovarsi in una delle seguenti fasi:
- controlli pre-volo o post-volo
- qualsiasi fase che preveda un'attività di upgrade e il messaggio indica che il job è in esecuzione anche se l'attività è bloccata. Il messaggio
status.conditionsindica che il job è in esecuzione da molto tempo, il che indica la presenza di un problema.
Per verificare se si è verificato un errore di controllo preliminare dell'upgrade, controlla lo stato dell'oggetto OrganizationUpgrade corrispondente per l'organizzazione che esegue l'upgrade:
kubectl get -n gpc-system organizationupgrade ORG_NAME -o yaml
Se il job non riesce a superare il controllo preliminare, potrebbe essere visualizzato un errore come questo o un messaggio
UpgradeCheckRBACDeploymentInProgress:- lastTransitionTime: "2024-09-27T00:28:21Z" message: "" observedGeneration: 2 reason: Unknown status: "False" type: PreflightCheckSe il job non va a buon fine nella fase AnthosBareMetal (ABM) in cui è in esecuzione il job dell'attività, viene visualizzato il seguente output:
- Last Transition Time: 2024-09-26T19:55:13Z message: observed the following reason: [JobRunning] observedGeneration: 3 reason: Unsuccessful status: Unknown type: root-admin/AnthosBareMetalSe l'errore si verifica nei controlli, la
upgradecheckrequestCR non va a buon fine:kubectl get upgradecheckrequests -n gpc-system --kubeconfig /root/release/root-admin/root-admin-kubeconfigL'output potrebbe essere simile a questo esempio:
NAME AGE upgrade-check-root-postflight-xc7p8 6h32mSe l'errore si verifica nelle attività,
upgradetaskrequestsCR non va a buon fine:kubectl get upgradetaskrequests -n gpc-system --kubeconfig /root/release/root-admin/root-admin-kubeconfigL'output potrebbe essere simile a questo esempio:
NAME AGE upg-task-org-1-mz-mz-location-upgrade-5n6wp 2d19hSe l'errore indica un errore RBAC durante la ricerca di un account di servizio, verifica se è stato implementato un componente aggiuntivo precedente:
Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedCreate 38s (x11 over 5m41s) job-controller Error creating: pods "v1.13.0-mz-2837f80328-upg-task-root-mz-mz-location-jkv69-" is forbidden: error looking up service account gpc-system/upgrade-task-mz-sa-v1.13.0-mz-2837f80328: serviceaccount "upgrade-task-mz-sa-v1.13.0-mz-2837f80328" not found
Soluzione temporanea:
Controlla se è stato implementato un componente aggiuntivo precedente:
Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedCreate 4m30s (x101 over 99m) job-controller Error creating: pods "v1.13.0-os-2837f80328-upg-task-root-os-node-upgrad-fdblm-" is forbidden: error looking up service account gpc-system/upgrade-task-os-sa-v1.13.0-os-2837f80328: serviceaccount "upgrade-task-os-sa-v1.13.0-os-2837f80328" not foundcount gpc-system/upgrade-task-mz-sa-v1.13.0-mz-2837f80328: serviceaccount "upgrade-task-mz-sa-v1.13.0-mz-2837f80328" not foundRecupera i componenti aggiuntivi precedenti esistenti per lo stesso componente,
upgrade-task-mzper l'attività:kubectl get addons -n gpc-system | grep upgrade-task upgrade-task-mz-lsqzc true true v1.13.0-mz-7cf810d7a5Elimina questo componente aggiuntivo:
kubectl delete addon -n gpc-system upgrade-task-mz-lsqzc upgrade-task-os-px5wj addon.addon.private.gdc.goog "upgrade-task-mz-lsqzc" deletedDopo aver eliminato il componente aggiuntivo, elimina anche il
upgradetaskrequesto ilupgradecheckrequestcorrispondente. Verrà ricreato.kubectl delete upgradetaskrequest -n gpc-system upgrade-task-mz-lsqzcContinua a monitorare il nuovo
upgradetaskrequest,upgradecheckrequesto il job corrispondente direttamente.
L'upgrade non riesce su shared-service-cluster upgrade
Versioni: 1.13.3
Sintomi: l'upgrade di Anthos Bare Metal è bloccato con una o più macchine bare metal. Tutte le altre macchine bare metal sono state aggiornate correttamente o l'upgrade non è ancora iniziato. Una macchina bare metal è in modalità di manutenzione, ma mostra comunque la versione precedente sia per i campi ABM VERSION corrente che DESIRED ABM VERSION.
Segui Anthos bare metal per ottenere lo stato e i dettagli di baremetalmachine per il cluster:
kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
Output previsto:
NAME CLUSTER READY INSTANCEID MACHINE ABM VERSION DESIRED ABM VERSION
192.0.2.0 g-org-1-shared-service true baremetal://192.0.2.0 192.0.2.0 1.29.300-gke.185 1.29.300-gke.185
192.0.2.18 g-org-1-shared-service true baremetal://192.0.2.18 192.0.2.18 1.29.300-gke.185 1.29.300-gke.185
192.0.2.19 g-org-1-shared-service true baremetal://192.0.2.19 192.0.2.19 1.29.300-gke.185 1.29.300-gke.185
192.0.2.10 g-org-1-shared-service true baremetal://192.0.2.10 192.0.2.10 1.29.300-gke.185 1.29.300-gke.185
192.0.2.22 g-org-1-shared-service true baremetal://192.0.2.22 192.0.2.22 1.29.300-gke.185 1.29.300-gke.185
192.0.2.9 g-org-1-shared-service true baremetal://192.0.2.9 192.0.2.9 1.29.0-gke.1449 1.29.0-gke.1449
kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG} ${MACHINE_IP} -o json | jq '.status.underMaintenance'
Output previsto:
true
Soluzione temporanea:
Esci dalla modalità di manutenzione della macchina di inventario:
export InventoryMachineName=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get inventorymachines -A -o json | jq '.items[] | select(.spec.address=="${MACHINE_IP}") | .metadata.name') kubectl --kubeconfig "${ADMIN_KUBECONFIG:?}" patch inventorymachine/${InventoryMachineName:?} --type=merge -p '{"spec": {"maintenance": false}}'Attendi che la macchina dell'inventario esca dalla modalità di manutenzione. L'operazione potrebbe richiedere fino a 10 minuti.
kubectl --kubeconfig "${ADMIN_KUBECONFIG:?}" wait inventorymachine/${InventoryMachineName} --for=jsonpath=.status.maintenance=true --timeout=600sMonitora le macchine bare metal per verificare che la macchina visualizzi l'aggiornamento della versione ABM selezionata.
kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
Installazione del componente aggiuntivo system-dashboards non riuscita
Versioni: 1.13.5
Sintomi: l'upgrade dalla versione 1.12.4 alla 1.13.5 non riesce durante l'upgrade del componente aggiuntivo per
il componente aggiuntivo system-dashboards:
│ Status: │
│ Conditions: │
│ Last Transition Time: 2024-10-22T00:34:54Z │
│ Message: Error occurred during addon installation: failed to rollback chart: no ConfigMap with the name "cluster-etcd-platform-obs" found │
│ Observed Generation: 2 │
│ Reason: InstallationError │
│ Status: False
Soluzione alternativa:segui i passaggi nel runbook OCLCM-R0122.
NodeUpgradeTask CR è bloccato alla condizione NodeOSInPlaceUpgradePostProcessingCompleted
Versioni: 1.13.5
Sintomi: durante l'upgrade alla versione 1.13.5, NodeUpgradeTask CR è bloccato alla condizione NodeOSInPlaceUpgradePostProcessingCompleted.
Controlla se il job os-artifact-collector corrispondente è stato completato. Se il job è bloccato per molte ore, viene visualizzato il seguente messaggio:
root@gpc-adhoc-7e017e71vm-bootstrapper-zone1:~# kag logs os-artifact-collector-bm-45942837-p8hrk-z56gh
I1020 22:06:11.844634 1 main.go:30] BuildDate: 2024-10-19T16:54:08Z
I1020 22:06:11.844695 1 main.go:31] Version: 0.0.0-gdch.1.v3f2043
Soluzione temporanea:
- Elimina il job o il pod per forzare il nuovo tentativo.
La distribuzione delle immagini non riesce durante un upgrade
Versioni: 1.13.5
Sintomi: la distribuzione delle immagini non riesce durante un upgrade dalla versione 1.12.4 alla 1.13.x:
Error: error uploading the VM image to object storage: failed to upload to object storage: BadRequest: Bad Request
status code: 400, request id: , host id:
F1018 02:04:46.191627 1 main.go:88] VM Image Distributor quit: error uploading the VM image to object storage: failed to upload to object storage: BadRequest: Bad Request
status code: 400, request id: , host id:
goroutine 1 [running]:
Controlla i pod obj-proxy in gpc-system dell'organizzazione per verificare che la verifica del certificato non sia riuscita:
E1021 19:10:31.710076 1 token_source.go:185] Unable to rotate token: failed to initialize aisClient: failed to initialise AIS client: failed to obtain login config from the provided path "https://console.org-1.zone1.google.gdch.test/.well-known/login-config" with error: unable to parse centralized login config file: unsuccessful get request to config URL (https://console.org-1.zone1.google.gdch.test/.well-known/login-config) with error: Get "https://console.org-1.zone1.google.gdch.test/.well-known/login-config": tls: failed to verify certificate: x509: certificate signed by unknown authority
Soluzione temporanea:
Riavvia il pod obj-proxy utilizzando
KUBECONFIGdell'organizzazione su cui si verifica l'errore:export KUBECONFIG=<ORG_KUBECONFIG> kubectl delete pods -n gpc-system -l name=obj-proxy-managerControlla i log di obj-proxy:
kubectl get pods -n gpc-system | grep obj-proxyL'output previsto è il seguente:
obj-proxy-gdgzp 1/1 Running 0 5d1h obj-proxy-nhnsm 1/1 Running 0 5d1h obj-proxy-wrxlq 1/1 Running 0 5d1hControlla i log dei pod disponibili, ad esempio:
kubectl logs obj-proxy-gdgzp -n gpc-systemI job di distribuzione delle immagini devono essere completati dopo l'applicazione della soluzione alternativa.
Il nodo non funziona durante l'upgrade del cluster utente
Versioni: 1.13.3
Sintomi: un job in esecuzione su un nodo non riesce durante l'upgrade del cluster utente e viene visualizzato un messaggio di errore simile al seguente:
Reason: mkdir: cannot create directory '/root/.ansible/tmp/ansible-tmp-1727810181.4584012-29-114086005628321': No space left on device
Accedi al nodo e controlla se la partizione è piena:
df -h /L'output potrebbe essere simile a questo esempio:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/rocky-rl--root 31G 31G 120K 100% /Controlla se
/etc/kubernetes/tmpsta utilizzando una grande quantità di spazio:du -s /etc/kubernetes/tmp. Questo problema si verifica quando Kubernetes esegue più backup del solito.
Soluzione temporanea:
Cancella tutti i backup su
rm -f /etc/kubernetes/tmp/*:df -h /L'output potrebbe essere simile a questo esempio:
Filesystem Size Used Avail Use% Mounted on /dev/m
Ricreazione e errore dell'upgrade dell'amministratore root per i controlli preflight
Versioni: 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7, 1.13.8, 1.13.9
Sintomo: l'upgrade dell'organizzazione principale non va a buon fine per il controllo preflight, ad esempio:
│ Preflight Check: │
│ Conditions: │
│ Last Transition Time: 2024-10-28T14:17:31Z │
│ Message: [the result has status: False, reason: PreflightCheckFailed, and err: check "ASMStable" of operable component "ASM" failed with reason "BackoffLi │
│ mitExceeded", please check logs in pods: [gpc-system/upgrade-managed-check-asmstable-4dw66-cld74, gpc-system/upgrade-managed-check-asmstable-4dw66-k8xk5, gpc-system/upgrade-m │
│ anaged-check-asmstable-4dw66-wtc6q, gpc-system/upgrade-managed-check-asmstable-4dw66-l9b6v, gpc-system/upgrade-managed-check-asmstable-4dw66-nf62h, gpc-system/upgrade-managed │
│ -check-asmstable-4dw66-6m7p2, gpc-system/upgrade-managed-check-asmstable-4dw66-4mqmb], the result has status: Unknown, reason: UpgradeCheckJobsInProgress, and err: upgrade ch │
│ eck jobs in progress for Operable Components: haas,bil] │
│ Observed Generation: 2 │
│ Reason: PreflightCheckFailed │
│ Status: False │
│ Type: Succeeded │
│ Start Time: 2024-10-28T14:46:42Z
Il cluster root-admin e kubeapiserver per root-admin sono stati aggiornati alla versione ABM scelta.
Esempio:
export KUBECONFIG=<path to root admin kubeconfig>
kubectl describe kubeapiserver root-admin -n root
kubectl get cluster root-admin -n root
Output di esempio per kubectl describe kubeapiserver root-admin -n root:
Name: root-admin
Namespace: root
Labels: lcm.private.gdc.goog/cluster-type=root-admin
lcm.private.gdc.goog/cluster-version=1.29.600-gke.108
lcm.private.gdc.goog/component-version=v1.13.0-oclcm-f4c190e0f2
Output di esempio per kubectl get cluster root-admin -n root:
NAME ABM VERSION DESIRED ABM VERSION CLUSTER STATE
root-admin 1.29.600-gke.108 1.29.600-gke.108 Running
Soluzione temporanea
Applica l'omissione del controllo preliminare per continuare l'upgrade:
export KUBECONFIG=<path to root admin kubeconfig>
kubectl delete organizationupgrade root -n gpc-system && kubectl annotate -n gpc-system organization root upgrade.private.gdc.goog/skip-preflight-check=ok
kubectl delete organizationupgrade root -n gpc-system
Gli spazi dei nomi platform-obs-obs-system o platform-obs rimangono bloccati nello stato di terminazione
Versioni: 1.13.5
Sintomi: il deployment dei componenti aggiuntivi non riesce durante l'upgrade o il bootstrap e viene visualizzato un messaggio di errore simile a questo:
export KUBECONFIG=ROOT_ADMIN
kubectl get addon -n org-1 system-alerts system-dashboards
Viene visualizzato il seguente output:
NAME DEPLOYED READY VERSION
system-alerts
system-dashboards false false 1.12.4-gdch.96
Se gli stati DEPLOYED o READY mostrano false o sono vuoti, controlla gli addon corrispondenti per l'errore, ad esempio:
export KUBECONFIG=ROOT_ADMIN
kubectl describe addon -n org-1 system-alerts
Viene visualizzato il seguente output:
...
... unable to create new content in namespace platform-obs-obs-system because it is being terminated
...
Il componente aggiuntivo è bloccato perché tenta di creare contenuti negli spazi dei nomi in fase di eliminazione. Questo blocco persiste perché anche l'eliminazione dello spazio dei nomi è bloccata.
Soluzione temporanea:
Prima di iniziare un upgrade, annota i progetti per evitare l'eliminazione:
export KUBECONFIG=ORG_ADMIN kubectl annotate project -n gpc-system platform-obs helm.sh/resource-policy="keep"Viene visualizzato il seguente output:
project.resourcemanager.gdc.goog/platform-obs annotated kubectl annotate project -n gpc-system platform-obs-obs-system helm.sh/resource-policy="keep" project.resourcemanager.gdc.goog/platform-obs-obs-system annotatedSe l'ambiente presenta già i sintomi descritti in precedenza, segui la seguente soluzione alternativa:
L'eliminazione dello spazio dei nomi è bloccata a causa di risorse con finalizzatori. Per procedere con l'eliminazione, rimuovi i finalizzatori utilizzando lo script fornito:
export KUBECONFIG=ORG_ADMIN function rm_finalizer() { export TYPE=$1 export NS=$2 RESOURCES=$(kubectl get $TYPE -n $NS --no-headers -o custom-columns=":metadata.name") for rc in $RESOURCES; do kubectl patch $TYPE $rc -n $NS \ --type json \ --patch '{"metadata":{"finalizers":[]}}' --type=merge done } rm_finalizer "monitoringrule" "platform-obs-obs-system" rm_finalizer "monitoringrule" "platform-obs" rm_finalizer "loggingrule" "platform-obs" ``` Note: Use a bash terminal (default on bootstrappers) to run the script.Attendi l'eliminazione della risorsa. Dopo aver eseguito lo script, elimina le risorse e gli spazi dei nomi di terminazione. Potresti dover eseguire di nuovo lo script se lo spazio dei nomi è ancora bloccato nello stato di terminazione. Una volta terminato, lo spazio dei nomi verrà ricreato automaticamente. Verifica che gli spazi dei nomi siano ricreati e nello stato ATTIVO:
export KUBECONFIG=ORG_ADMIN kubectl get namespace platform-obs platform-obs-obs-systemViene visualizzato il seguente output:
NAME STATUS AGE platform-obs Active 45s platform-obs-obs-system Active 49sCon gli spazi dei nomi attivi, i componenti aggiuntivi bloccati dovrebbero essere sottoposti a deployment entro pochi minuti. Verifica che gli stati DEPLOYED e READY siano ora impostati su true:
export KUBECONFIG=ROOT_ADMIN kubectl get addon -n org-1 system-alerts system-dashboardsViene visualizzato il seguente output:
NAME DEPLOYED READY VERSION system-alerts true true 1.14.0-gdch.143998 system-dashboards true true 1.14.0-gdch.143998
Cicli di arresto anomalo di UPORC nel cluster KIND durante il bootstrap
Versioni: 1.13.x
Sintomi: il deployment uporc-root-backend-controller nello spazio dei nomi
uporc-system si blocca in loop nel cluster KIND.
Soluzione temporanea:
Controlla se gli oggetti
ComponentGroupReleaseMetadataeReleaseMetadatacorrispondono:export KUBECONFIG=KIND kubectl get componentgroupreleasemetadata kubectl get releasemetadataSe gli oggetti corrispondono, non è necessaria alcuna soluzione alternativa.
Se gli oggetti non corrispondono, contatta il team UPORC per ricevere assistenza, in quanto potrebbe trattarsi di altri problemi sottostanti.
Impossibile eseguire l'upgrade del nodo
Versioni: 1.13.6
Sintomi: l'upgrade del nodo non è riuscito alle ore NodeOSInPlaceUpgradeCompleted.
- Controlla i log dei job ospolicy
os-upgrade. - Se il log include un errore che suggerisce che il file di configurazione è danneggiato,
inserisci la macchina del nodo e controlla manualmente il contenuto del file per verificare se è
danneggiato. L'errore nel log potrebbe menzionare il
codice di errore
configparser.DuplicateOptionErrore il file/etc/yum.repos.d/gdch.repo.
Soluzione: solo se hai confermato che il file è danneggiato, elimina manualmente
il file /etc/yum.repos.d/gdch.repo danneggiato sul nodo danneggiato.
Il job Ansible per l'upgrade rigenera automaticamente il file nell'ambito del playbook Ansible.
### NodeUpgradeTask CR è bloccato alla condizione NodeOSInPlaceUpgradePostProcessingCompleted
Versioni: 1.13.5
Sintomi: durante l'upgrade alla versione 1.13.5, NodeUpgradeTask CR è bloccato alla condizione NodeOSInPlaceUpgradePostProcessingCompleted.
Controlla se il job os-artifact-collector corrispondente è stato completato. Se il job è bloccato per molte ore, viene visualizzato il seguente messaggio:
root@gpc-adhoc-7e017e71vm-bootstrapper-zone1:~# kag logs os-artifact-collector-bm-45942837-p8hrk-z56gh
I1020 22:06:11.844634 1 main.go:30] BuildDate: 2024-10-19T16:54:08Z
I1020 22:06:11.844695 1 main.go:31] Version: 0.0.0-gdch.1.v3f2043
Soluzione temporanea:
- Elimina il job o il pod per forzare il nuovo tentativo.
NodeUpgradeTask CR è bloccato alla condizione NodeBIOSFirmwareUpgradeCompleted
Versioni: 1.13.5
Sintomi: durante l'upgrade alla versione 1.13.5, NodeUpgradeTask CR è bloccato alla condizione NodeBIOSFirmwareUpgradeCompleted.
Controlla se la condizione NodeBIOSFirmwareUpgradeCompleted corrispondente è bloccata e viene visualizzata la seguente condizione:
{
"lastTransitionTime": "2024-12-03T04:03:37Z",
"message": "",
"observedGeneration": 1,
"reason": "InProgress",
"status": "False",
"type": "NodeBIOSFirmwareUpgradeCompleted"
}
Soluzione temporanea:
- Nel CR
NodeUpgrade, modifica manualmente"U30 v3.20 (05/29/2024)"in"U30 v3.20 (05/27/2024)".
L'upgrade del cluster è bloccato perché un nodo non riesce a entrare in modalità di manutenzione
Versioni: 1.13.5, 1.13.6, 1.13.7
Sintomi: l'upgrade del cluster (cluster di amministrazione dell'organizzazione, di sistema o utente) è bloccato perché un nodo non riesce a entrare in modalità di manutenzione.
Il cluster mostra MaintenanceMode impostato su true, ma Status è bloccato su false durante l'esecuzione di:
kubectl get baremetalmachines -A -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,MaintenanceMode:.spec.maintenanceMode,Status:.status.underMaintenace
Viene visualizzato il seguente output:
NAMESPACE NAME MaintenanceMode Status
user-vm-1-cluster 10.8.4.22 true false
user-vm-1-cluster 10.8.4.23 false false
user-vm-1-cluster 10.8.4.24 false false
user-vm-1-cluster 172.20.128.13 false false
user-vm-1-cluster 172.20.128.14 false false
user-vm-1-cluster 172.20.128.15 false false
Soluzione temporanea:
Imposta KUBECONFIG sul file kubeconfig del cluster contenente il nodo da svuotare. Il cluster può essere il cluster utente o un cluster di servizi condivisi.
for VM in $(kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints --no-headers | grep "baremetal.cluster.gke.io/maintenance" | awk '{print $1}'); do
for i in {1..50}; do
kubectl delete po -n kube-system $(kubectl get po -A -o wide | grep ang | grep -e $VM| awk '{print $2}');
done
done
Timeout persistente durante il root iniziale organizationupgrade
Versioni: 1.13.3
Sintomi: se l'annotazione per ignorare il periodo di manutenzione è presente durante l'upgrade di un'organizzazione, la CR organizationupgrade viene patchata ripetutamente, reimpostando lo stato di avanzamento.
Soluzione:
Metti in pausa il sottocomponente rm-org e fare lo scale down le repliche rm-org-backend-controller.
Se l'alias non è dichiarato, esegui:
alias ka="kubectl --kubeconfig=/root/release/root-admin/root-admin-kubeconfig"Metti in pausa il sottocomponente e fare lo scale down del deployment per
rm-org:kubectl --kubeconfigROOT_ADMIN_KUBECONFIG annotate subcomponent -n root rm-org lcm.private.gdc.goog/paused=true kubectl --kubeconfigROOT_ADMIN_KUBECONFIG scale deploy -n gpc-system rm-org-backend-controller --replicas=0Al termine dell'upgrade del cluster, ridimensiona il deployment:
kubectl --kubeconfigROOT_ADMIN_KUBECONFIG scale deploy -n gpc-system rm-org-backend-controller --replicas=1
La riconciliazione del sottocomponente obj-syslog-server non riesce nell'organizzazione principale
Versioni: 1.13.3, 1.13.4, 1.13.5, 1.13.6
Sintomi:durante l'upgrade alla versione 1.13.x, il sottocomponente obj-syslog-server risulta essere nello stato ReconciliationError:
root obj-syslog-server ReconciliationError
con una condizione simile a:
Sub-Component: obj-syslog-server - Reconciliation error: E0100 - deploy: failed to install chart: release obj-syslog-server-backend failed, and has been uninstalled due to atomic being set: context deadline exceeded
Last Transition Time: 2024-09-17T21:49:25Z
Message: E0100 - deploy: failed to install chart: release obj-syslog-server-backend failed, and has been uninstalled due to atomic being set: context deadline exceeded
Observed Generation: 1
ReconciliationError
Status:True
Type: Reconciling
Last Transition Time: 2024-09-17T21:49:23Z
Message: E0100 - deploy: failed to install chart: release obj-syslog-server-backend failed, and has been uninstalled due to atomic being set: context deadline exceeded
Observed Generation: 1
Reason: DeployError
Status: False
Type: Deployed
Potresti notare che il pod syslog-server-abcdefg-wxyz si trova nello stato CrashLoopBackOff con il seguente errore:
containerID: containerd://65d460176a1dcae412af698fa02fa5ffb0c5f0ef9bf0d0e2111ef88845630827
exitCode: 128
finishedAt: "2024-09-18T19:14:45Z"
message: 'failed to create containerd task: failed to create shim task: OCI
runtime create failed: runc create failed: unable to start container process:
error during container init: error mounting "/var/lib/kubelet/pods/637cf395-e597-446d-9949-1371cca88970/volume-subpaths/observability-ca/syslog-server/2"
to rootfs at "/etc/ssl/certs/obs-ca-cert.pem": mount /var/lib/kubelet/pods/637cf395-e597-446d-9949-1371cca88970/volume-subpaths/observability-ca/syslog-server/2:/etc/ssl/certs/obs-ca-cert.pem
(via /proc/self/fd/6), flags: 0x5001: not a directory: unknown'
reason: StartError
startedAt: "1970-01-01T00:00:00Z"
Soluzione temporanea:
Per riportare il sottocomponente a uno stato integro, rimuovi l'volumeMounts non necessario.
Modifica il deployment attuale:
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfigkubectl edit deployments syslog-server -n istio-systemRimuovi i
volumeMountsche non sono necessari inspec.containers.volumeMounts. Rimuovi i seguenti percorsi di montaggio:- mountPath: /etc/ssl/certs/obs-ca-cert.pem name: observability-ca readOnly: true1. subPath: ca.crt - mountPath: /etc/ssl/certs/obj-ca-cert.pem name: obj-ca readOnly: true subPath: ca.crtApplica le modifiche e il sottocomponente tornerà a
ReconciliationCompleteddopo l'applicazione delle modifiche.
Upgrade di ABM o dei nodi bloccato su maintenanceMode false
Versioni: 1.13.4
Sintomi: il nodo è bloccato all'upgrade del cluster AnthosBaremetal e non entra in modalità di manutenzione.
Controlla baremetalmachine su un nodo del cluster di servizio, ad esempio:
kubectl get baremetalmachine -n g-org-1-shared-service-cluster 192.0.2.0 -o json | jq .spec.maintenanceMode
false
Soluzione:
Riavvia anthos-cluster-operator per propagare BMM.MaintenanceMode:
kubectl get baremetalmachine -n g-org-1-shared-service-cluster 192.0.2.0 -o json | jq .spec.maintenanceMode
true
L'upgrade non riesce per il componente aggiuntivo atat-webhooks per l'organizzazione tenant
Versioni: 1.13.5
Sintomi: l'upgrade del componente aggiuntivo atat-webhooks non viene recuperato:
org-1 atat-webhooks false false 1.13.4-gdch.5582
Potresti visualizzare un messaggio simile a questo:
Status: │
│ Conditions: │
│ Last Transition Time: 2024-10-30T17:57:06Z │
│ Message: Error occurred during addon installation: failed to generate parameters for AddOn[atat-webhooks]: failed to generate runtime parameters: parameter job not ready yet │
│ Observed Generation: 4 │
│ Reason: InstallationError │
│ Status: False │
│ Type: Deployed │
│ Last Transition Time: 2024-10-30T17:56:36Z │
│ Message: Reconciliation error
Controlla i pod per atat-webhooks-parameters-*****:
kubectl logs -n org-1 atat-webhooks-parameters-***** --kubeconfig ROOT_ADMIN_KUBECONFIG
Potresti visualizzare un errore simile al seguente:
E1030 22:04:33.242244 7 main.go:39] failed to generate parameter for AddOn [atat-webhooks], error: ATAT0003: Organization.resourcemanager.private.gdc.goog "org-1" is invalid: metadata.labels[atat.config.google.com/task-order-number]: Invalid value: "TO1234": The current date 2024-10-30 is not within the valid range of this TaskOrder: 2024-06-30 - 2024-10-30.
Soluzione:
Crea una copia del portfolio attuale:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIGkubectl get portfolios -n atat-system portfolio-org-1 -oyaml > portfolio-org-1Aggiorna
portfolio-org-1 Pop End Datea una data futura:kubectl delete portfolios -n atat-system portfolio-org-1Se questo comando smette di rispondere, elimina la condizione
.Metadata.Finalizersdal portafoglio attivo prima di eliminare il portafoglio. La condizione potrebbe avere questo aspetto:│ portfolio.finalizers.atat.config.google.comApplica di nuovo il file YAML copiato:
kubectl apply -f portfolio-org-1Controlla di nuovo le date per assicurarti che sia i portafogli sia il configmap siano aggiornati.
Se il job non viene recuperato, elimina il job
atat-webhooks-parametersnon riuscito e verrà recuperato. Attendi il completamento:kubectl delete jobs -n org-1 atat-webhooks-parameters
Il controllo post-volo o dell'upgrade non riesce a causa di errori DeadlineExceeded o BackoffLimitExceeded.
Versioni: 1.13.8
Sintomi:
Durante l'upgrade dalla versione 1.13.7 alla 1.13.8, i controlli post-volo sono ancora in stato di attesa e mostrano errori DeadlineExceeded o BackoffLimitExceeded.
Message:postflight check result: pending, [NodeHealth (OS) HarborClusterHealth (AR)] still running
Observed Generation: 3
Reason: ReconcileBackoff
Status: Unknown
Type: ManagedCheckSucceeded
Last Transition Time: 2025-02-13T02:11:41Z
Message: observed the following failure reasons: [ReconcileBackoff UpgradeCheckJobsInProgress]
Soluzione:
Identifica il punto in cui i job non riescono:
Controlla se i job non riescono a essere eseguiti durante i controlli preflight o postflight:
kubectl get jobs -A -l "upgrade.private.gdc.goog/use" -o json | jq '.items[] | select(.status.conditions | any(.reason == "BackoffLimitExceeded" or .reason == "DeadlineExceeded")) | {name: .metadata.name, namespace: .metadata.namespace, status: .status.conditions[].type, reason: .status.conditions[].reason}'Controlla se i job non riescono durante l'upgrade:
kubectl get jobs -A -l "upgrade.private.gdc.goog/upgrade-check-owner" -o json | jq '.items[] | select(.status.conditions | any(.reason == "BackoffLimitExceeded" or .reason == "DeadlineExceeded")) | {name: .metadata.name, namespace: .metadata.namespace, status: .status.conditions[].type, reason: .status.conditions[].reason}'Elimina i job:
kubectl delete jobs -n gpc-system CHECK_NAME
I controlli di upgrade includono risultati non pertinenti al livello di controllo
Versioni: 1.13.x
Sintomi:
I controlli di upgrade dell'organizzazione potrebbero non riuscire a causa di risultati inclusi in modo errato da altri livelli. Ad esempio, i controlli dell'organizzazione principale potrebbero mostrare i risultati dell'organizzazione tenant, mentre i controlli dell'organizzazione tenant potrebbero mostrare i risultati del cluster di utenti.
Log di errore di esempio per i controlli dell'organizzazione root:
kubectl logs -n gpc-system upgrade-check-postflight-haas-n2rk2-zv9rr --kubeconfig /root/release/root-admin/root-admin-kubeconfig
... {org-1 admin } failure ...
Soluzione:
Salta completamente i controlli preflight o postflight con:
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
Postflight:
kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-postflight-check=ok
Vertex AI
Le API preaddestrate mostrano lo stato Enabling nell'interfaccia utente
Versioni: 1.13.1
Sintomi: MonitoringTarget mostra lo stato Not Ready durante la creazione dei cluster utente, facendo sì che le API preaddestrate mostrino continuamente lo stato Enabling nell'interfaccia utente.
Soluzione:
- Apri il menu del browser Chrome (icona con tre puntini).
- Fai clic su Altri strumenti > Strumenti per sviluppatori per aprire la console.
- Fai clic sulla scheda Rete nella console.
- Trova le richieste
ai-service-status. - Fai clic sulla scheda Risposta in una richiesta
ai-service-statusper visualizzare i contenuti della richiesta. - Verifica che tutto sia pronto, ad eccezione dei componenti
MonitoringTargeteLoggingTarget.
La funzione API preaddestrata streaming_recognize di Speech-to-Text non funziona
Versioni: 1.13.3
Sintomi: quando si chiama la funzione API preaddestrata streaming_recognize di Speech-to-Text, un problema con la libreria client causa un messaggio di errore 400 simile al seguente:
google.api_core.exceptions.InvalidArgument: 400 The header 'x-goog-user-project' should be set
Soluzione alternativa: utilizza il seguente script Python per consentire il funzionamento della funzione streaming_recognize:
import base64
from google.cloud import speech_v1p1beta1
from google.cloud.speech_v1p1beta1.services.speech import client
import google.auth
from google.auth.transport import requests
import requests as reqs
from google.api_core.client_options import ClientOptions
import os
audience= "https://ENDPOINT:443"
api_endpoint="ENDPOINT:443"
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"
os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "CERT_NAME"
def get_client(creds):
opts = ClientOptions(api_endpoint=api_endpoint)
return client.SpeechClient(credentials=creds, client_options=opts)
def main():
creds = None
try:
creds, project_id = google.auth.default()
creds = creds.with_gdch_audience(audience)
sesh = reqs.Session()
sesh.verify = False
req = requests.Request(session=sesh)
creds.refresh(req)
except Exception as e:
print("Caught exception" + str(e))
raise e
return creds
def speech_func(creds):
tc = get_client(creds)
content="[ENCODED CONTENT STRING HERE]"
audio = speech_v1p1beta1.RecognitionAudio()
audio.content = base64.standard_b64decode(content)
config = speech_v1p1beta1.StreamingRecognitionConfig()
config.config.encoding= speech_v1p1beta1.RecognitionConfig.AudioEncoding.LINEAR16
config.config.sample_rate_hertz=16000
config.config.language_code="en-US"
config.config.audio_channel_count=1
request_config = speech_v1p1beta1.StreamingRecognizeRequest(
streaming_config = config,
)
request_audio = speech_v1p1beta1.StreamingRecognizeRequest(
audio_content = audio.content
)
requests = [request_config, request_audio]
def request_generator():
for request in requests:
yield request
metadata = (("x-goog-user-project", "projects/vtx-pretrained"),)
resp = tc.streaming_recognize(requests=request_generator(), metadata=metadata)
for response in resp:
print(response)
if __name__=="__main__":
creds = main()
speech_func(creds)
Sostituisci quanto segue:
ENDPOINT: l'endpoint Speech-to-Text. Per saperne di più, visualizza gli stati e gli endpoint dei servizi.APPLICATION_DEFAULT_CREDENTIALS_FILENAME: il nome del file JSON contenente le chiavi dell'account di servizio che hai creato nel progetto, ad esempiomy-service-key.json.CERT_NAME: il nome del file del certificato dell'autorità di certificazione (CA), ad esempioorg-1-trust-bundle-ca.cert. Per saperne di più, vedi Generare il file del certificato CA del bundle di attendibilità in un ambiente di sviluppo.
Lo script Python introduce le seguenti differenze tra le funzioni streaming_recognize e recognize per consentire il funzionamento della soluzione alternativa per streaming_recognize:
- Riga 4: un'ulteriore istruzione
importrispetto allo scriptrecognize(from google.cloud.speech_v1p1beta1.services.speech import client). - Riga 18: il cliente viene restituito da
client.SpeechClient()anziché daspeech_v1p1beta1.SpeechClient().
L'inizializzazione del pod e del servizio frontend di traduzione non riesce
Versioni: 1.11.x, 1.12.x, 1.13.x
Sintomi: durante gli upgrade, il cluster Translation DB viene ricreato, il che causa l'obsolescenza e la mancata sincronizzazione del secret secret-store del cluster di sistema ODS. Per questo motivo, l'inizializzazione del pod e del servizio frontend di traduzione non va a buon fine.
Soluzione:
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.
Il polling dello stato del job non è supportato per l'API batchTranslateDocument
Versioni: 1.13.3
Sintomi: Vertex AI non supporta le operazioni GET e LIST nelle API del servizio di traduzione. La chiamata all'API Translation BatchTranslateDocument restituisce un'operazione a lunga esecuzione simile al seguente esempio:
{
"name": "projects/PROJECT_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.translation.v3.BatchTranslateDocumentMetadata",
"state": "RUNNING"
}
}
Questo problema è dovuto a una limitazione dell'APIP (autorizzazione) che impedisce di chiamare direttamente l'endpoint. Gli endpoint non supportano il polling dello stato del job e non puoi eseguire operazioni GET sull'operazione a lunga esecuzione a causa della limitazione APIP.
Soluzione alternativa: in qualità di operatore dell'applicazione (AO), controlla regolarmente lo stato del job nella cartella s3_destination e cerca un file di output del job appena creato. Se la cartella contiene il file di output, il job è stato completato correttamente.
Le richieste batchTranslateDocument potrebbero causare problemi di prestazioni
Versioni: 1.13.3
Sintomi: il servizio di traduzione di documenti batch legge uno o più file di input utente#39;utente e scrive i file di output temporanei di elaborazione e traduzione in StorageGRID. Viene creato un nuovo client curl per ogni azione di lettura/scrittura perché il riutilizzo del client non va a buon fine.
I client S3 curl nel file binario sono a utilizzo singolo, il che significa che ogni client può eseguire una sola azione di lettura/scrittura sui bucket StorageGRID. Pertanto, viene creato un nuovo client curl ogni volta che viene stabilita la comunicazione con il client StorageGRID dal server batchTranslateDocument per leggere e scrivere file nei bucket.
Tuttavia, questa soluzione non è ottimale per i clienti curl. Potrebbe causare i seguenti problemi:
- Degrado delle prestazioni: aumento della latenza e riduzione del throughput
- Esaurimento delle risorse: overhead di memoria e CPU ed esaurimento dei socket
- Sovraccarico del server: limitazione di frequenza o limitazione
La console GDC mostra uno stato incoerente dopo l'abilitazione delle API preaddestrate
Versioni: 1.13.3
Sintomi: quando abiliti per la prima volta le API preaddestrate, la console GDC potrebbe mostrare uno stato incoerente dopo alcuni minuti per il servizio abilitato. La console GDC riporta lo stato di Enabling a Disabled e mostra di nuovo il pulsante Attiva nell'interfaccia utente anche se il servizio è in fase di attivazione.
Soluzione alternativa: lo stato diventa coerente dopo alcuni minuti e il servizio riflette lo stato corretto.
Per verificare lo stato del servizio, apri la scheda Rete nella console del browser e controlla lo stato della richiesta ai-service-status. Il payload deve mostrare che l'operatore L2 è abilitato.
Le richieste di traduzione con più di 250 caratteri causano l'arresto anomalo dei pod translation-prediction-server
Versioni: 1.13.3
Sintomi: quando invii richieste di traduzione con circa 250 caratteri o più (incluse le richieste di traduzione di documenti), i pod translation-prediction-0 o translation-prediction-1 potrebbero arrestarsi in modo anomalo, richiedendo il ricaricamento del modello. Il ricaricamento del modello avviene automaticamente e questo processo può richiedere circa 30 minuti.
Questo problema è dovuto a una limitazione dei contenitori di traduzione.
Soluzione alternativa: dividi le richieste di traduzione in modo che non superino i 250 caratteri. Un intervallo compreso tra 200 e 250 caratteri è sicuro per tutte le lingue. Se una richiesta lunga causa l'arresto anomalo dei pod, non è necessaria alcuna altra azione per risolvere il problema.
GPUAllocation per il cluster di servizi condivisi non è configurato correttamente
Versioni: 1.13.3
Sintomi: i workload Vertex AI non possono essere pianificati a causa della mancanza di risorse GPU sufficienti. Ad esempio, se non riesci a visualizzare o attivare gli endpoint di servizio Vertex AI, il problema potrebbe essere causato dalla mancanza di risorse GPU sufficienti.
Questo problema di assegnazione delle risorse può essere causato da alcune risorse GPUAllocation situate all'interno del cluster di servizi condivisi a cui manca la seguente annotazione:
processed: "true"
Soluzione:
Segui IAM-R0004 per generare il file kubeconfig per
g-ORG_NAME-shared-service-cluster.Elenca tutte le allocazioni di GPU nel cluster di servizi che non hanno l'annotazione
processed: "true":kubectl get gpuallocations -A -n vm-system \ --kubeconfig SERVICE_CLUSTER_KUBECONFIG \ -o json | jq \ '.items[] | select(.metadata.annotations.processed == null ) | .metadata.name'L'output è simile al seguente:
zi-ad-bm08Apri la risorsa
GPUAllocationnon allocata in un editor:kubectl edit gpuallocation -n vm-system NODE_NAMEModifica l'allocazione delle GPU in base al numero totale di allocazioni delle GPU presenti nel cluster di servizio:
Se è presente una sola risorsa personalizzata di allocazione GPU, aggiungi l'annotazione
processed: "true"e modifica la relativa specifica in modo che sia simile alla seguente:annotations: processed: "true" spec: mig: allowNodeReboot: true count: 4 profiles: - mixed-5 - uniform-3g.40gb - uniform-3g.40gb - uniform-7g.80gb node: $node_name // unchanged pod: 0 vm: 0Se sono presenti due risorse personalizzate di allocazione GPU, individua quella senza l'annotazione
processed: "true", aggiungila e modifica la relativa specifica in modo che sia simile alla seguente:processed: "true"annotations: processed: "true" spec: mig: allowNodeReboot: true count: 2 profiles: - mixed-5 - uniform-3g.40gb node: $node_name // unchanged pod: 0 vm: 0Se sono presenti quattro risorse personalizzate di allocazione GPU, individua quella senza l'annotazione
processed: "true", aggiungila e modifica la relativa specifica in modo che sia simile alla seguente:processed: "true"annotations: processed: "true" spec: mig: allowNodeReboot: true count: 1 profiles: - mixed-5 node: $node_name // unchanged pod: 0 vm: 0
Salva le modifiche alla risorsa personalizzata
GPUAllocatione verifica che il relativo stato di allocazione sia aggiornato atrue:kubectl get gpuallocations -A --kubeconfig SERVICE_CLUSTER_KUBECONFIGL'output è simile al seguente:
NAMESPACE NAME ALLOCATED DEVICEMODEL vm-system zi-ad-bm08 true H100L 94GB vm-system zi-ad-bm09 true H100L 94GB
Durante l'upgrade dalla versione 1.9.x alla 1.13.3, il controller OCLCM mostra errori
Versioni: 1.13.3
Sintomi: durante l'upgrade dalla versione 1.9.x alla 1.13.3, il controller Operable Component Lifecycle Management (OCLCM) per i sottocomponenti di Vertex AI potrebbe mostrare errori. Questo problema è causato da un errore nel job del componente aggiuntivo ai_platform. Gli errori che ricevi durante l'upgrade indicano che OCLCM non può trasferire la proprietà di questi componenti di Vertex AI.
Di seguito sono riportati i componenti di Vertex AI interessati nel cluster di amministrazione dell'organizzazione:
| Nome | Spazio dei nomi |
|---|---|
aip-l1operator-deployment |
ai-system |
aip-l2operator-deployment |
ai-system |
aip-web-plugin-frontend |
ai-system |
aip-web-plugin-backend |
ai-system |
aip-l1operator-sa |
ai-system |
aip-l2operator-sa |
ai-system |
aip-web-plugin-sa |
ai-system |
aip-l1operator-role |
N/D |
aip-l2operator-role |
N/D |
aip-web-plugin-role |
N/D |
aip-l1operator-rolebinding |
N/D |
aip-l2operator-rolebinding |
N/D |
aip-web-plugin-rolebinding |
N/D |
aip-l1operator-log |
ai-system |
aip-l2operator-log |
ai-system |
aip-web-plugin-frontend-log |
ai-system |
aip-web-plugin-backend-log |
ai-system |
log-rule-aipl-a004 |
platform-obs |
mon-rule-aipl-a0001 |
platform-obs |
mon-rule-aipl-a0003 |
platform-obs |
aip-l1operator-mon |
ai-system |
aip-l1operator-mon-cm |
ai-system |
aip-l2operator-mon |
ai-system |
aip-l2operator-mon-cm |
ai-system |
aip-l1operator-webhook-svc |
ai-system |
aip-web-plugin-frontend-svc |
ai-system |
aip-web-plugin-backend-svc |
ai-system |
aip-web-plugin-frontend-virtualsvc |
ai-system |
aip-web-plugin-backend-virtualsvc |
ai-system |
aip-l1operator-selfsigned-issuer |
ai-system |
aip-l1operator-serving-cert |
ai-system |
aip-l1operator-validating-webhook |
ai-system |
aip-l1operator-mutating-webhook |
ai-system |
Soluzione alternativa: per risolvere il problema, devi rimuovere manualmente i componenti Vertex AI interessati dal cluster amministrativo dell'organizzazione. Poi, la nuova versione di Vertex AI basata su OCLCM li reinstalla.
Rimuovi manualmente i componenti Vertex AI interessati nel cluster di amministrazione dell'organizzazione:
kubectl --kubeconfig=ORG_ADMIN_CLUSTER_KUBECONFIG delete deployment -n NAMESPACE COMPONENT_NAME
Sostituisci quanto segue:
ORG_ADMIN_CLUSTER_KUBECONFIG: il percorso del file kubeconfig nel cluster di amministrazione dell'organizzazione.NAMESPACE: lo spazio dei nomi del componente Vertex AI che vuoi rimuovere. Se il componente non ha uno spazio dei nomi, rimuovi-n NAMESPACEdal comando.COMPONENT_NAME: il nome del componente Vertex AI che vuoi rimuovere.
Il seguente esempio mostra come rimuovere il componente aip-l1operator-deployment esistente nello spazio dei nomi ai-system sul cluster di amministrazione dell'organizzazione:
kubectl --kubeconfig=ORG-ADMIN-CLUSTER-KUBECONFIG delete deployment -n ai-system aip-l1operator-deployment
Le richieste di traduzione potrebbero generare il codice di errore RESOURCE_EXHAUSTED
Versioni: 1.13.3
Sintomi: dopo aver inviato una richiesta di traduzione, ottieni il codice di errore RESOURCE_EXHAUSTED nel messaggio di risposta. Questo errore si verifica quando superi un limite di frequenza del sistema. Una risorsa è stata esaurita, ad esempio una quota per utente, il numero massimo di query al secondo o l'intero file system è esaurito.
Soluzione alternativa: chiedi all'operatore dell'infrastruttura di riavviare gli shard di backend del servizio di traduzione. Dopodiché, invia di nuovo le richieste di traduzione con intervalli più lunghi tra una richiesta e l'altra o inviando richieste più brevi.
batchTranslateDocument requests return error 503
Versioni: 1.13.3
Sintomi: dopo aver inviato una richiesta batchTranslateDocument, ottieni il codice di errore 503 "Batch Document translation is not implemented" nel messaggio di risposta. Questo errore si verifica perché il metodo BatchTranslateDocument richiede il servizio Aspose, che viene implementato solo quando il parametro operabile enableRAG è impostato su true nel cluster.
Soluzione alternativa: chiedi all'operatore dell'infrastruttura di impostare il parametro operabile enableRAG su true nel cluster di amministrazione dell'organizzazione seguendo questi passaggi:
Crea una risorsa personalizzata
SubcomponentOverridein un file YAML denominatovai-translation.yamlcon il parametro operabileenableRAGimpostato sutrue:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: "vai-translation" namespace: ORG_ADMIN_NAMESPACE spec: subComponentRef: "vai-translation" backend: operableParameters: enableRAG: trueSostituisci
ORG_ADMIN_NAMESPACEcon lo spazio dei nomi del cluster di amministrazione dell'organizzazione.Applica la risorsa personalizzata
SubcomponentOverrideal cluster di amministrazione dell'organizzazione:kubectl --kubeconfig ORG_ADMIN_KUBECONFIG apply -f vai-translation.yamlSostituisci
ORG_ADMIN_KUBECONFIGcon il percorso del file kubeconfig nel cluster di amministrazione dell'organizzazione.
Servizi preaddestrati di Vertex AI non disponibili
Versioni: 1.13.7, 1.13.9
Sintomi: i servizi Vertex AI OCR e Translation non vengono avviati a causa di problemi di pianificazione di Kubernetes. Nei log potrebbe essere visualizzato un avviso come questo:
Warning FailedScheduling 105s (x40 over 3h18m) default-scheduler 0/9 nodes are available: 1 Insufficient nvidia.com/mig-3g.40gb-NVIDIA_A100_80GB_PCIE, 1 node(s) had untolerated taint {serviceenvironment.private.gdc.goog/dbs-billing-
system-billing-dbcluster: }, 1 node(s) had untolerated taint {serviceenvironment.private.gdc.goog/dbs-g-vai-ocr-sie-g-vai-ocr-sie: }, 1 node(s) had untolerated taint {serviceenvironment.private.gdc.goog/dbs-g-vai-translation-sie-g-v-1gvg:
}, 3 Insufficient cpu, 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/9 nodes are available: 3 No preemption victims found for incoming pod, 6 Preemption is not helpful for scheduling.
Soluzione alternativa: aggiungi altri nodi di lavoro al pool predefinito ed elimina i pod sui nodi GPU in modo che i workload AI possano essere pianificati.
Macchine virtuali
L'importazione di immagini BYO non riesce per le immagini qcow2 e raw
Versioni: 1.13.1, 1.13.3
Sintomi:quando le immagini VM locali vengono importate utilizzando l'interfaccia a riga di comando gdcloud compute images import, lo stato dell'importazione è bloccato su WaitingForTranslationVM o ImportJobNotCreated. Questo perché
il disco temporaneo creato per la traduzione o l'importazione utilizza le stesse dimensioni dell'immagine qcow2/raw, ma LUKS aggiunge
un overhead di alcuni MiB che causa l'errore del 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 l'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.
Trova il
VirtualMachineImageImport:kubectl get virtualmachineimageimport $IMPORT_NAME -n $PROJECT -o yamlSe l'oggetto non è presente, attiva di nuovo il comando
gdcloud compute images import .... Quando l'output della console passa daUploading image to ..aImage import has started for ..., premi Ctrl+C in modo che l'immagine locale venga caricata nell'object storage eVirtualMachineImageImportvenga conservato come riferimento per crearne uno nuovo.Crea un nuovo
VirtualMachineImageImportcon unminimumDiskSizepiù 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
Il provisioning di un disco da un'immagine non va a buon fine
Versioni: 1.13.1, 1.13.3
Sintomi: quando viene eseguito il provisioning di un disco da un'immagine personalizzata, minimumDiskSize
potrebbe essere troppo vicino alla dimensione virtuale, causando l'errore del provisioning del disco.
Il disco VM è in stato di attesa, ma non viene mai sottoposto al provisioning.
Soluzione alternativa: crea manualmente un nuovo disco con un spec.minimumDiskSize più grande.
Il plug-in del dispositivo NVIDIA DaemonSet non funziona quando un cluster ha GPU
Versioni: 1.13.3
Sintomi: il plug-in del dispositivo NVIDIA DaemonSet non funziona e viene visualizzato il messaggio driver rpc error sui nodi del cluster con GPU:
kubectl --kubeconfig KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-system
Sostituisci KUBECONFIG con il percorso del file kubeconfig nel cluster.
Ottieni un output simile al seguente esempio:
Warning Failed 23m (x4 over 25m) kubelet Error: failed to create containerd task: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: driver rpc error: timed out: unknown
Questo problema causa la mancata disponibilità delle GPU per le macchine virtuali (VM) e i pod. Le implicazioni si basano sui seguenti tipi di cluster:
- Cluster di sistema: la risorsa personalizzata
GPUAllocationnon viene creata per quel nodo bare metal e le GPU in quel nodo non sono configurate in modalità VM per l'utilizzo da parte del servizio e del cluster utente. Per risolvere il problema, consulta la soluzione alternativa per il cluster di sistema. - Cluster di servizi o utente: la risorsa personalizzata
GPUAllocationnon viene creata per il nodo VM e le GPU in quel nodo non sono utilizzabili dai pod sul cluster. Per risolvere il problema, consulta la soluzione alternativa per il servizio o il cluster di utenti.
Soluzione alternativa per il cluster di sistema:
Per risolvere il problema nel cluster di sistema, segui questi passaggi:
Imposta la variabile di ambiente
KUBECONFIGcon il percorso del file kubeconfig nel cluster di sistema. Per maggiori dettagli, consulta il runbook IAM-R0004.Identifica il nodo che presenta il problema:
kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-system | grep -i Node:L'output deve stampare il nome del nodo e l'indirizzo IP del nodo Kubernetes.
Se sono presenti più nodi, esegui i passaggi su tutti. In questo caso, l'output è simile al seguente esempio:
Node: yy-ab-bm04/172.20.128.26Imposta la variabile di ambiente
NODE_NAMEcon il nome del nodo, ad esempio:export NODE_NAME=yy-ab-bm04Stabilisci una connessione SSH con il nodo. Per maggiori dettagli, consulta il runbook PLATAUTH-G0001.
Verifica che il nodo abbia GPU:
nvidia-smi -LL'output deve stampare le GPU nel nodo come nell'esempio seguente:
GPU 0: NVIDIA H100 NVL (UUID: GPU-0f6179a7-71a8-c654-44f0-1542bddf2574) GPU 1: NVIDIA H100 NVL (UUID: GPU-4debf794-d8a5-74a2-e521-0c763288ea79) GPU 2: NVIDIA H100 NVL (UUID: GPU-5827b65a-3841-d877-fc17-881a2b71d416) GPU 3: NVIDIA H100 NVL (UUID: GPU-31448904-9ae2-c95a-1986-a56cce004f49)Attiva la modalità di persistenza sulle GPU:
nvidia-smi -pm 1Questa azione garantisce che i driver NVIDIA vengano sempre caricati in modo che il plug-in del dispositivo non scada.
L'output deve essere simile all'esempio seguente:
Enabled persistence mode for GPU 00000000:4E:00.0. Enabled persistence mode for GPU 00000000:62:00.0. Enabled persistence mode for GPU 00000000:C9:00.0. Enabled persistence mode for GPU 00000000:DE:00.0. All done.Esci dalla sessione SSH:
exitVerifica che il plug-in del dispositivo sia in esecuzione eseguendo una query su
DaemonSet:kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-systemVerifica che la risorsa personalizzata
GPUAllocationsia creata e configurata in modalità VM:kubectl --kubeconfig $KUEBCONFIG get gpuallocation -n vm-system $NODE_NAME -o yamlL'output deve essere simile all'esempio seguente:
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: annotations: processed: "true" creationTimestamp: "2024-08-21T07:03:18Z" generation: 2 name: yy-ab-bm04 namespace: vm-system resourceVersion: "12179728" uid: b840cb53-5b0b-45bf-ab26-66db98fd64a4 spec: node: yy-ab-bm04 pod: 0 vm: 4 status: allocated: true conditions: - lastTransitionTime: "2024-08-21T07:05:49Z" message: "" observedGeneration: 2 reason: AllocationFulfilled status: "True" type: AllocationStatus - lastTransitionTime: "2024-08-21T07:03:53Z" message: "" observedGeneration: 2 reason: DeviceStateUpdated status: "True" type: DeviceStateUpdated consumption: pod: 0/0 vm: 4/4 deviceModel: H100L 94GB
Soluzione alternativa per il servizio o il cluster utente:
Per risolvere il problema nel servizio o nel cluster, segui questi passaggi:
Imposta la variabile di ambiente
KUBECONFIGcon il percorso del file kubeconfig nel servizio o nel cluster utente. Per maggiori dettagli, consulta il runbook IAM-R0004.Identifica il nodo che presenta il problema:
kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-system | grep -i Node:L'output deve stampare il nome del nodo e l'indirizzo IP del nodo Kubernetes.
Se sono presenti più nodi, esegui i passaggi su tutti. In questo caso, l'output è simile al seguente esempio:
Node: vm-948fa7f4/172.20.128.21Imposta la variabile di ambiente
NODE_NAMEcon il nome del nodo, ad esempio:export NODE_NAME=vm-948fa7f4Stabilisci una connessione SSH con il nodo. Per maggiori dettagli, consulta il runbook PLATAUTH-G0001.
Verifica che il nodo abbia GPU:
nvidia-smi -LL'output deve stampare le GPU nel nodo come nell'esempio seguente:
GPU 0: NVIDIA H100 NVL (UUID: GPU-0f6179a7-71a8-c654-44f0-1542bddf2574) GPU 1: NVIDIA H100 NVL (UUID: GPU-4debf794-d8a5-74a2-e521-0c763288ea79)Attiva la modalità di persistenza sulle GPU:
nvidia-smi -pm 1Questa azione garantisce che i driver NVIDIA vengano sempre caricati in modo che il plug-in del dispositivo non scada.
L'output deve essere simile all'esempio seguente:
Enabled persistence mode for GPU 00000000:05:00.0. Enabled persistence mode for GPU 00000000:06:00.0. All done.Esci dalla sessione SSH:
exitVerifica che il plug-in del dispositivo sia in esecuzione eseguendo una query su
DaemonSet:kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-systemVerifica che la risorsa personalizzata
GPUAllocationsia creata e configurata in modalità VM:kubectl --kubeconfig $KUBECONFIG get gpuallocation -n vm-system $NODE_NAME -o yamlL'output deve essere simile all'esempio seguente:
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: annotations: processed: "true" creationTimestamp: "2024-08-21T07:03:18Z" generation: 2 name: vm-948fa7f4 namespace: vm-system resourceVersion: "12179728" uid: b840cb53-5b0b-45bf-ab26-66db98fd64a4 spec: node: vm-948fa7f4 pod: 2 vm: 0 status: allocated: true conditions: - lastTransitionTime: "2024-08-21T07:05:49Z" message: "" observedGeneration: 2 reason: AllocationFulfilled status: "True" type: AllocationStatus - lastTransitionTime: "2024-08-21T07:03:53Z" message: "" observedGeneration: 2 reason: DeviceStateUpdated status: "True" type: DeviceStateUpdated consumption: pod: 0/2 vm: 0/0 deviceModel: H100L 94GB
VM del cluster di sistema non pronta
Versioni: 1.13.3
Sintomi: la VM del cluster di sistema non è pronta. Potresti visualizzare un messaggio simile a questo:
│ Conditions: │
│ Type Status LastHeartbeatTime LastTransitionTime Reason │
│ Message │
│ ---- ------ ----------------- ------------------ ------ │
│ ------- │
│ KubeletUnhealthy False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:37 +0000 KubeletIsHealthy │
│ kubelet on the node is functioning properly │
│ KernelDeadlock False Tue, 20 Aug 2024 02:10:42 +0000 Sun, 30 Jun 2024 16:53:33 +0000 KernelHasNoDeadlock │
│ kernel has no deadlock │
│ ReadonlyFilesystem False Tue, 20 Aug 2024 02:10:42 +0000 Sun, 30 Jun 2024 16:53:33 +0000 FilesystemIsNotReadOnly │
│ Filesystem is not read-only │
│ FrequentUnregisterNetDevice False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:40 +0000 NoFrequentUnregisterNetDevice │
│ node is functioning properly │
│ ContainerRuntimeUnhealthy False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:39 +0000 ContainerRuntimeIsHealthy │
│ Container runtime on the node is functioning properly │
│ FrequentKubeletRestart False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:41 +0000 NoFrequentKubeletRestart │
│ kubelet is functioning properly │
│ FrequentDockerRestart False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:40 +0000 NoFrequentDockerRestart │
│ docker is functioning properly │
│ FrequentContainerdRestart False Tue, 20 Aug 2024 02:10:42 +0000 Thu, 15 Aug 2024 01:44:23 +0000 NoFrequentContainerdRestart │
│ containerd is functioning properly │
│ MemoryPressure Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status. │
│ DiskPressure Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status. │
│ PIDPressure Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status. │
│ Ready Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status.
Soluzione:
- Trova
VirtualMachineInstanceed eliminalo. - Riavvia una nuova VM.
Spazio di lavoro temporaneo dei report sul volume di dati non trovato
Versioni: 1.13.3, 1.13.4
Sintomi: durante la creazione di un disco VM, il volume di dati viene segnalato come riuscito:
gdch-vm-infra gdc-vm-disk-vm-ce34b8ea-disk Succeeded 100.0% 1 18h
Tuttavia, un pod di importazione, ad esempio importer-gdc-vm-disk-vm-ce34b8ea-disk, va in crash
in loop con un messaggio come questo:
E0823 16:14:15.920008 1 data-processor.go:251] scratch space required and none found
E0823 16:14:15.920017 1 importer.go:185] scratch space required and none found
Soluzione: elimina il pod dell'importatore dopo aver verificato che lo stato del volume di dati
sia Succeeded.
Le VM nei progetti con nomi superiori a 45 caratteri rimangono in stato arrestato
Versioni: 1.13.5
Sintomi: quando crei una VM, questa rimane nello stato Stopped se il nome del progetto contiene più di 45 caratteri.
Soluzione alternativa: crea un progetto con un nome non superiore a 45 caratteri.
Allocazione GPU mancante nel cluster di servizio
Versioni: 1.13.5
Sintomi: GPUAllocation non è presente nel cluster di servizi condivisi di
gpu-org. Quando ottieni le allocazioni della GPU, potresti visualizzare un messaggio:
KUBECONFIG=/root/release/user/gpu-org-shared-service-kubeconfig kubectl get gpuallocations -A
L'output ha il seguente aspetto:
No resources found
Soluzione:
Aggiungi un taint al nodo GPU:
taints: - effect: NoExecute key: vmm.gdc.goog/gpu-node value: a3-highgpu-4gRimuovi il taint per consentire la pianificazione del pod virt-launcher della VM.
Impossibile pianificare la VM worker del cluster di servizi condivisi
Versioni: 1.13.6
Sintomi: una VM worker Kubernetes non è stata pianificata a causa di risorse CPU insufficienti sul nodo designato, nonostante le GPU disponibili. Potresti visualizzare un evento come questo:
Warning FailedScheduling 33m (x29 over 92m) default-scheduler 0/9 nodes are available: 1 Insufficient memory, 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 5 Insufficient cpu, 5 Insufficient nvidia.com/gpu-vm-H100L_94GB. preemption: 0/
9 nodes are available: 3 Preemption is not helpful for scheduling, 6 No preemption victims found for incoming pod.
Soluzione:
- Arresta manualmente le VM non GPU per liberare risorse CPU.
- Dopo la pianificazione della VM in attesa, avvia le VM non GPU.