Risoluzione dei problemi di archiviazione

Questo documento fornisce indicazioni per la risoluzione dei problemi di archiviazione.

Il volume non riesce a collegarsi

Questo problema può verificarsi se un disco virtuale è collegato alla macchina virtuale errata, potrebbe essere dovuto al Problema n. 32727 in Kubernetes 1.12.

L'output di gkectl diagnose cluster ha il seguente aspetto:

Checking cluster object...PASS
Checking machine objects...PASS
Checking control plane pods...PASS
Checking gke-connect pods...PASS
Checking kube-system pods...PASS
Checking gke-system pods...PASS
Checking storage...FAIL
    PersistentVolume pvc-776459c3-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-776459c3-d350-11e9-9db8-e297f465bc84.vmdk" IS attached to machine "gsl-test-user-9b46dbf9b-9wdj7" but IS NOT listed in the Node.Status
1 storage errors

Uno o più pod sono bloccati nello stato ContainerCreating con avvisi come questo:

Events:
  Type     Reason              Age               From                     Message
  ----     ------              ----              ----                     -------
  Warning  FailedAttachVolume  6s (x6 over 31s)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-776459c3-d350-11e9-9db8-e297f465bc84" : Failed to add disk 'scsi0:6'.

Per risolvere il problema:

Se un disco virtuale è collegato alla macchina virtuale sbagliata, potrebbe essere necessario scollegarlo manualmente:

  1. Svuota il nodo. Vedi Svuotare correttamente un nodo. Ti consigliamo di includere i flag --ignore-daemonsets e --delete-local-data nel comando kubectl dump.

  2. Spegni la VM.

  3. Modifica la configurazione hardware della VM in vCenter per rimuovere il volume.

  4. Accendi la VM.

  5. Ignora il nodo

Volume perso

Questo problema può verificarsi se un disco virtuale è stato eliminato definitivamente. Questo può accadere se un operatore elimina manualmente un disco virtuale o la macchina virtuale a cui è collegato. Se vedi un errore "non trovato" relativo al file VMDK, è probabile che il disco virtuale sia stato eliminato definitivamente.

L'output di gkectl diagnose cluster ha il seguente aspetto:

Checking cluster object...PASS
Checking machine objects...PASS
Checking control plane pods...PASS
Checking gke-connect pods...PASS
Checking kube-system pods...PASS
Checking gke-system pods...PASS
Checking storage...FAIL
    PersistentVolume pvc-52161704-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk" IS NOT found
1 storage errors

Uno o più pod sono bloccati nello stato ContainerCreating:

Events:
  Type     Reason              Age                   From                                    Message
  ----     ------              ----                  ----                                    -------
  Warning  FailedAttachVolume  71s (x28 over 42m)    attachdetach-controller                 AttachVolume.Attach failed for volume "pvc-52161704-d350-11e9-9db8-e297f465bc84" : File []/vmfs/volumes/43416d29-03095e58/kubevols/
  kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk was not found

Per evitare che questo problema si verifichi, gestisci le tue macchine virtuali come descritto in Ridimensionamento di un cluster utente e Upgrade dei cluster.

Per risolvere il problema, potrebbe essere necessario eseguire la pulizia manuale di risorse Kubernetes correlate:

  1. Elimina la PVC che ha fatto riferimento al PV eseguendo kubectl delete pvc [PVC_NAME].

  2. Elimina il pod che ha fatto riferimento alla PVC eseguendo kubectl delete pod [POD_NAME].

  3. Ripeti il passaggio 2. Sì, davvero. Consulta Problema di Kubernetes 74374.

Il volume di CSI vSphere non riesce a disconnettersi

Questo problema si verifica se il privilegio CNS > Searchable non è stato concesso all'utente vSphere.

Se trovi dei pod bloccati nella fase ContainerCreating con avvisi FailedAttachVolume, la causa potrebbe essere la disconnessione non riuscita su un nodo diverso.

Per verificare la presenza di errori di scollegamento CSI:

kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message

L'output è simile al seguente:

NAME                                                                   DETACH_ERROR
csi-0e80d9be14dc09a49e1997cc17fc69dd8ce58254bd48d0d8e26a554d930a91e5   rpc error: code = Internal desc = QueryVolume failed for volumeID: "57549b5d-0ad3-48a9-aeca-42e64a773469". ServerFaultCode: NoPermission
csi-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192d   
csi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c   
csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8   

Per risolvere il problema, aggiungi il privilegio CNS > Searchable al tuo account utente vcenter. L'operazione di scollegamento tenta automaticamente di nuovo fino a che l'operazione non riesce.

Driver CSI vSphere non supportato sull'host ESXi

Questo problema si verifica quando un host ESXi nel cluster vSphere esegue una versione inferiore a ESXi 6.7U3.

L'output di gkectl check-config include questo avviso:

The vSphere CSI driver is not supported on current ESXi host versions.
CSI requires ESXi 6.7U3 or above. See logs for ESXi version details.

Per risolvere questo problema, esegui l'upgrade degli host ESXi alla versione 6.7U3 o successive.

Creazione del volume CSI non riuscita con NotSupported errore

Questo problema si verifica quando un host ESXi nel cluster vSphere esegue una versione inferiore a ESXi 6.7U3.

L'output di kubectl describe pvc include questo errore:

Failed to provision volume with StorageClass : rpc error:
code = Internal desc = Failed to create volume. Error: CnsFault error:
CNS: Failed to create disk.:Fault cause: vmodl.fault.NotSupported

Per risolvere questo problema, esegui l'upgrade degli host ESXi alla versione 6.7U3 o successive.

Impossibile collegare il volume CSI vSphere

Questo problema noto nel driver open source CSI di vSphere si verifica quando un nodo viene arrestato, eliminato o in errore.

L'output di kubectl describe pod ha il seguente aspetto:

Events:
 Type    Reason                 From                     Message
 ----    ------             ... ----                     -------
 Warning FailedAttachVolume ... attachdetach-controller  Multi-Attach error for volume
                                                         "pvc-xxxxx"
                                                         Volume is already exclusively attached to one
                                                         node and can't be attached to another

Per risolvere il problema:

  1. Annota il nome dell'oggetto PersistentVolumeClaim (PVC) nell'output precedente e trova gli oggetti VolumeAttachments associati alla PVC. Ad esempio:

    kubectl get volumeattachments | grep pvc-xxxxx
    

    L'output mostra i nomi dei VolumeAttachments. Ad esempio:

    csi-yyyyy   csi.vsphere.vmware.com   pvc-xxxxx   node-zzzzz ...
    
  2. Descrivi i VolumeAttachments. Ad esempio:

    kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"
    

    Prendi nota del timestamp di eliminazione nell'output:

    Deletion Timestamp:   2021-03-10T22:14:58Z
    
  3. Attendi il tempo specificato dal timestamp di eliminazione, quindi forza l'eliminazione di VolumeAttachment. Per farlo, modifica l'oggetto VolumeAttachment ed elimina il finalizzatore. Ad esempio:

    kubectl edit volumeattachment csi-yyyyy
     Finalizers:
      external-attacher/csi-vsphere-vmware-com
    

vSphere CSI VolumeSnapshot non pronto a causa della versione

Questo problema si verifica quando la versione di vCenter Server o l'host ESXi è precedente alla versione 7.0 Update 3.

L'output di kubectl describe volumesnapshot include errori come questo:

rpc error: code = Unimplemented desc = VC version does not support snapshot operations.

Per risolvere questo problema, esegui l'upgrade di vCenter Server e degli host ESXi alla versione 7.0 Aggiorna 3 o successive.

SnapShot CSI vSphere non pronto, snapshot massimi per volume

Questo problema si verifica quando il numero di snapshot per volume raggiunge il valore massimo per il driver di archiviazione dei container vSphere. Il valore predefinito è tre.

L'output di kubectl describe volumesnapshot include errori come questo:

rpc error: code = FailedPrecondition desc = the number of snapshots on the source volume 5394aac1-bc0a-44e2-a519-1a46b187af7b reaches the configured maximum (3)

Per risolvere il problema, segui questi passaggi per aggiornare il numero massimo di snapshot per volume:

  1. Ottieni il nome del secret che fornisce la configurazione vSphere al controller vSphere CSI:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get deployment vsphere-csi-controller \
       --namespace USER_CLUSTER_NAME \
       --output json \
       | jq -r '.spec.template.spec.volumes[] \
       | select(.name=="vsphere-secret") .secret.secretName'
    

    Sostituisci quanto segue:

    • ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione
    • USER_CLUSTER_NAME: il nome del tuo cluster utente
  2. Recupera il valore di data.config dal secret, base64 decodificalo e salvalo in un file denominato config.txt:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret SECRET_NAME \
       --namespace USER_CLUSTER_NAME  \
       --output json | jq -r '.data["config"]' | base64 -d > config.txt
    

    Sostituisci SECRET_NAME con il nome del secret del passaggio precedente.

  3. Apri config.txt per la modifica:

    Modifica o aggiungi il campo global-max-snapshots-per-block-volume nella sezione [Snapshot]. Ad esempio:

    [Global]
    cluster-id = "my-user-cluster"
    insecure-flag = "0"
    user = "my-account.local"
    password = "fxqSD@SZTUIsG"
    [VirtualCenter "my-vCenter"]
    port = "443"
    datacenters = "my-datacenter1"
    [Snapshot]
    global-max-snapshots-per-block-volume = 4
    
  4. Elimina e ricrea il secret:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete secret SECRET_NAME \
       --namespace USER_CLUSTER_NAME
    
    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG create secret generic SECRET_NAME \
       --namespace USER_CLUSTER_NAME \
       --from-file=config
    
  5. Riavvia il deployment vsphere-csi-controller:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG rollout restart deployment vsphere-csi-controller \
       --namespace USER_CLUSTER_NAME