Risoluzione dei problemi

Questa pagina include i passaggi per la risoluzione dei problemi relativi ad alcuni errori e problemi comuni.

Istanza NON RIUSCITA

Lo stato FAILED indica che i dati dell'istanza sono stati persi e che l'istanza deve essere eliminata.

Le istanze Parallelstore in stato FAILED continuano a essere fatturate finché non vengono eliminate.

Per recuperare lo stato di un'istanza, segui le istruzioni riportate in Gestire le istanze: recuperare un'istanza.

Per eliminare un'istanza, leggi Gestire le istanze: eliminare un'istanza.

Timeout durante il montaggio di dfuse o i test di rete

Se, durante il montaggio dell'istanza Parallelstore, il comando dfuse -m va in timeout; o se i comandi di test di rete come self_test o daos health net-test vanno in timeout, il problema potrebbe essere dovuto a un problema di connettività di rete.

Per verificare la connettività ai server Parallelstore, esegui

self_test --use-daos-agent-env -r 1

Se il test segnala un problema di connessione, i due possibili motivi sono:

L'agente DAOS potrebbe aver selezionato l'interfaccia di rete errata durante la configurazione

Potrebbe essere necessario escludere le interfacce di rete che non sono in grado di raggiungere gli IP nell'elenco access_points.

  1. Esegui ifconfig per elencare le interfacce di rete disponibili. Un output di esempio potrebbe mostrare diverse interfacce di rete come eth0, docker0, ens8, lo e così via.

  2. Arresta daos_agent.

  3. Modifica /etc/daos/daos_agent.yml per escludere le interfacce di rete indesiderate. Rimuovi il commento dalla riga exclude_fabric_ifaces e aggiorna i valori. Le voci che includi sono specifiche per la tua situazione. Ad esempio:

    exclude_fabric_ifaces: ["docker0", "ens8", "lo"]
    
  4. Riavvia daos_agent.

L'indirizzo IP dell'istanza o del client è in conflitto con gli indirizzi IP interni

Le istanze e i client Parallelstore non possono utilizzare un indirizzo IP dell'intervallo di subnet 172.17.0.0/16. Per ulteriori informazioni, consulta la sezione Problemi noti.

ENOSPC quando c'è capacità inutilizzata nell'istanza

Se la tua istanza utilizza lo striping minimo o bilanciato (impostazione predefinita), potresti riscontrare errori ENOSPC anche se i file esistenti non utilizzano tutta la capacità dell'istanza. Ciò si verifica probabilmente durante la scrittura di file di grandi dimensioni, in genere superiori a 8 GiB, o durante l'importazione di questi file da Cloud Storage.

Utilizza la suddivisione massima dei file per ridurre la probabilità di questi errori.

Risoluzione dei problemi di Google Kubernetes Engine

La sezione seguente elenca alcuni problemi comuni e i passaggi per risolverli.

Transport endpoint is not connected nei pod del carico di lavoro

Questo errore è dovuto alla chiusura di dfuse. Nella maggior parte dei casi, dfuse è stato terminato per esaurimento della memoria. Utilizza le annotazioni del pod gke-parallelstore/[cpu-limit|memory-limit] per allocare più risorse al container collaterale Parallelstore. Puoi impostare gke-parallelstore/memory-limit: "0" per rimuovere la limitazione della memoria sidecar se non sai quanta memoria vuoi allocare. Tieni presente che questa operazione funziona solo con i cluster standard; con i cluster Autopilot non puoi utilizzare il valore 0 per annullare l'impostazione dei limiti e delle richieste di risorse del container sidecar. Devi impostare esplicitamente un limite di risorse più elevato per il container sidecar.

Dopo aver modificato le annotazioni, devi riavviare il pod del carico di lavoro. L'aggiunta di annotazioni a un carico di lavoro in esecuzione non modifica dinamicamente l'allocazione delle risorse.

Avvisi relativi agli eventi dei pod

Se i pod del workload non possono essere avviati, controlla gli eventi del pod:

kubectl describe pod POD_NAME -n NAMESPACE

Le seguenti soluzioni riguardano errori comuni.

Problemi di attivazione del driver CSI

Di seguito sono riportati gli errori comuni di attivazione del driver CSI:

MountVolume.MountDevice failed for volume "volume" : kubernetes.io/csi:
attacher.MountDevice failed to create newCsiDriverClient:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
MountVolume.SetUp failed for volume "volume" : kubernetes.io/csi:
mounter.SetUpAt failed to get CSI client:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers

Questi avvisi indicano che il driver CSI non è attivato o non è in esecuzione.

Se il cluster è stato appena scalato, aggiornato o sottoposto a upgrade, questo avviso è normale e dovrebbe essere temporaneo. Affinché i pod del driver CSI siano funzionali dopo le operazioni del cluster, sono necessari alcuni minuti.

In caso contrario, verifica che il driver CSI sia abilitato sul cluster. Per i dettagli, consulta Abilitare il driver CSI. Se il CSI è abilitato, ogni nodo mostra un pod denominato parallelstore-csi-node-id in esecuzione.

Errori AttachVolume.Attach

Dopo la pianificazione del pod su un nodo, il volume verrà collegato al nodo e il pod di montaggio verrà creato se utilizzi il montaggio del nodo.

Questo avviene sul controller e coinvolge il passaggio AttachVolume di attachdetach-controller.

Codice di errore Avviso di evento pod Soluzione
InvalidArgument
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = InvalidArgument desc = an error occurred while preparing mount options: invalid mount options
I flag di montaggio non validi vengono passati a PersistentVolume o StorageClass. Per ulteriori dettagli, consulta le opzioni di montaggio dfuse supportate.
NotFound
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = NotFound desc = failed to get instance "instance"
L'istanza Parallelstore non esiste. Verifica che l'attributo volumeHandle di PersistentVolume abbia il formato corretto.

Errori MountVolume.MountDevice

Una volta collegato a un nodo, il volume verrà preparato per il nodo.

Ciò avviene sul nodo e comporta il passaggio MountVolume.MountDevice da kubelet.

Codice di errore Avviso di evento pod Soluzione
FailedPrecondition
  • MountVolume.MountDevice failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod "pod" expected to exist but was not found
Questo errore è in genere causato dall'eliminazione manuale del pod di montaggio. Elimina tutti i carichi di lavoro che utilizzano la PVC e esegui nuovamente il deployment. Verrà creato un nuovo pod di montaggio.
DeadlineExceeded
  • MountVolume.MountDevice failed for volume "volume": rpc error: code = DeadlineExceeded desc = context deadline exceeded
Si è verificato un problema durante la connessione all'istanza Parallelstore. Verifica che la tua rete VPC e i tuoi punti di accesso siano configurati correttamente.

Errori MountVolume.SetUp

Una volta eseguito lo staging del volume sul nodo, il volume verrà montato e fornito al container sul pod. Ciò avviene sul nodo e comporta il passaggio MountVolume.SetUp in kubelet.

Supporto per pod

Codice di errore Avviso di evento pod Soluzione
ResourceExhausted
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container failed with error: signal: killed
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container terminated due to OOMKilled, exit code: 137
Il processo dfuse è terminato, il che è solitamente causato da una condizione di esaurimento della memoria (OOM). Valuta la possibilità di aumentare il limite di memoria del container sidecar utilizzando l'annotazione gke-parallelstore/memory-limit.

Se non sai quanta memoria vuoi allocare al sidecar parallelstore, ti consigliamo di impostare gke-parallelstore/memory-limit: "0" per eliminare la limitazione di memoria imposta da Parallelstore.

Interrotta
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
L'operazione di montaggio del volume è stata interrotta a causa della limitazione di frequenza o di operazioni esistenti. Questo avviso è normale e dovrebbe essere temporaneo.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = Se hai fornito argomenti non validi in StorageClass o PersistentVolume, il log degli errori indica i campi con gli argomenti non validi. Per il provisioning dinamico, controlla la classe di archiviazione. Per il provisioning statico, controlla il volume permanente.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = can not find the sidecar container in Pod spec Il contenitore sidecar Parallelstore non è stato inserito. Verifica che l'annotazione gke-parallelstore/volumes: "true" del pod sia impostata correttamente.

Montaggio del nodo

Codice di errore Avviso di evento pod Soluzione
Interrotta
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
L'operazione di montaggio del volume è stata interrotta a causa del limite di frequenza o di operazioni esistenti. Questo avviso è normale e dovrebbe essere temporaneo.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = Se hai fornito argomenti non validi in StorageClass o nel volume permanente, il log degli errori indicherà i campi con gli argomenti non validi. Per il provisioning dinamico, controlla la classe di archiviazione. Per il provisioning statico, controlla il volume permanente.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod expected to exist but was not found Il pod di montaggio di Parallelstore non esiste. Se il pod di montaggio è stato eliminato per errore, ricrea tutti i carichi di lavoro per richiedere la ricreazione.
DeadlineExceeded MountVolume.SetUp failed for volume "volume" : rpc error: code = DeadlineExceeded desc = timeout waiting for mounter pod gRPC server to become available Il server gRPC del pod di montaggio non è stato avviato. Controlla i log del pod mounter per individuare eventuali errori.

Risoluzione dei problemi relativi alle reti VPC

Autorizzazione negata per aggiungere il peering per il servizio servicenetworking.googleapis.com

ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have 
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.

Questo errore significa che non disponi dell'autorizzazione IAM servicenetworking.services.addPeering sul tuo account utente.

Consulta la sezione Controllo dell'accesso con IAM per istruzioni su come aggiungere uno dei seguenti ruoli al tuo account:

  • roles/compute.networkAdmin o
  • roles/servicenetworking.networksAdmin

Impossibile modificare gli intervalli allocati in CreateConnection

ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection.

Questo errore viene restituito quando hai già creato un peering VPC su questa rete con intervalli IP diversi. Esistono due possibili soluzioni:

Sostituisci gli intervalli IP esistenti:

gcloud services vpc-peerings update \
  --network=NETWORK_NAME \
  --ranges=IP_RANGE_NAME \
  --service=servicenetworking.googleapis.com \
  --force

In alternativa, aggiungi il nuovo intervallo IP alla connessione esistente:

  1. Recupera l'elenco degli intervalli IP esistenti per il peering:

    EXISTING_RANGES=$(
      gcloud services vpc-peerings list \
        --network=NETWORK_NAME \
        --service=servicenetworking.googleapis.com \
        --format="value(reservedPeeringRanges.list())"
    )
    
  2. Quindi, aggiungi il nuovo intervallo al peering:

    gcloud services vpc-peerings update \
      --network=NETWORK_NAME \
      --ranges=$EXISTING_RANGES,IP_RANGE_NAME \
      --service=servicenetworking.googleapis.com
    

Intervallo di indirizzi IP esaurito

La creazione dell'istanza potrebbe non riuscire con il seguente errore di intervallo esaurito:

ERROR: (gcloud.alpha.Parallelstore.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted

Se visualizzi questo messaggio di errore, segui la guida VPC per ricreare l'intervallo IP o estendere l'intervallo IP esistente.

Se stai ricreando un'istanza Parallelstore, devi ricreare l'intervallo IP anziché estenderlo.

Manutenzione bloccata a causa di un budget per l'interruzione dei pod restrittivo

La console Google Cloud potrebbe visualizzare il seguente messaggio di errore che indica che la manutenzione non può procedere perché è configurato un budget di interruzione dei pod (PDB) per consentire zero eliminazioni di pod:

GKE can't perform maintenance because the Pod Disruption Budget allows for 0 Pods evictions.

Se visualizzi questo messaggio di errore, identifica il pod problematico completando i seguenti passaggi:

  1. Fai clic sul messaggio di errore per aprire il pannello con le informazioni sull'errore.

  2. Controlla la sezione Budget di interruzione dei pod (PDB) non permissivi per trovare il nome del pod.

  3. Se il pod è parallelstorecsi-mount, puoi ignorare questo errore perché non impedirà la manutenzione. Per qualsiasi altro pod, esamina il PDB.