Questo documento fornisce indicazioni per la risoluzione dei problemi di archiviazione.
Impossibile collegare il volume
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:
Svuota il nodo. Consulta Svuotamento sicuro di un nodo. Potresti voler includere i flag
--ignore-daemonsets
e--delete-local-data
nel comando kubectl sink. .Modifica la configurazione hardware della VM in vCenter per rimuovere il volume.
Il volume è stato perso
Questo problema può verificarsi se un disco virtuale è stato eliminato definitivamente. Ciò può accadere se un operatore elimina manualmente un disco virtuale o la macchina virtuale a cui è collegato. Se visualizzi 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 macchine virtuali come descritto in Ridimensionamento di un cluster utente e Upgrade dei cluster.
Per risolvere questo problema, potresti dover pulire manualmente le risorse Kubernetes correlate:
Elimina la richiesta di volume permanente che fa riferimento all'oggetto PV eseguendo
kubectl delete pvc [PVC_NAME]
.Elimina il pod che faceva riferimento alla PVC eseguendo
kubectl delete pod [POD_NAME]
.Ripeti il passaggio 2. Sì, davvero. Vedi Problema di Kubernetes 74374.
Impossibile scollegare il volume CSI vSphere
Questo problema si verifica se non è stato concesso il privilegio CNS > Searchable
all'utente vSphere.
Se trovi pod bloccati nella fase ContainerCreating
con avvisi FailedAttachVolume
, ciò potrebbe essere dovuto a uno scollegamento non riuscito 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-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192dcsi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8
Per risolvere il problema, aggiungi il privilegio CNS > Searchable
al tuo
account utente vcenter.
L'operazione di scollegamento viene riprovata automaticamente finché l'operazione non va a buon fine.
Driver CSI vSphere non supportato su host ESXi
Questo problema si verifica quando un host ESXi nel cluster vSphere esegue una versione precedente 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 il problema, esegui l'upgrade degli host ESXi alla versione 6.7U3 o successiva.
La creazione del volume CSI non riesce e restituisce NotSupported
errore
Questo problema si verifica quando un host ESXi nel cluster vSphere esegue una versione precedente 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 il problema, esegui l'upgrade degli host ESXi alla versione 6.7U3 o successiva.
Impossibile collegare il volume CSI vSphere
Questo problema noto nel driver CSI open source vSphere si verifica quando un nodo viene arrestato, eliminato o non funziona.
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:
Prendi nota del 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 ...
Descrivere gli oggetti 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
Attendi fino al tempo specificato nel timestamp di eliminazione, quindi forza l'eliminazione del 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
VolumeSnapshot CSI di vSphere non pronto a causa della versione
Questo problema si verifica quando la versione dell'host vCenter Server o ESXi è precedente alla 7.0 Update 3.
L'output di kubectl describe volumesnapshot
include errori come questi:
rpc error: code = Unimplemented desc = VC version does not support snapshot operations.
Per risolvere il problema, esegui l'upgrade di vCenter Server e degli host ESXi alla versione 7.0, aggiornamento 3 o successivo.
vSphere CSI VolumeSnapshot non pronto, numero massimo di snapshot per volume
Questo problema si verifica quando il numero di snapshot per volume raggiunge il valore massimo per il driver vSphere Container Storage. Il valore predefinito è tre.
L'output di kubectl describe volumesnapshot
include i seguenti errori:
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, svolgi i passaggi che seguono per aggiornare il numero massimo di snapshot per volume:
Ottieni il nome del secret che fornisce la configurazione vSphere al controller CSI vSphere:
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 cluster utente
Ottieni il valore di
data.config
dal secret, lo decodifica in base64 e salvalo in un file denominatoconfig.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.
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
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
Riavvia il deployment
vsphere-csi-controller
:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG rollout restart deployment vsphere-csi-controller \ --namespace USER_CLUSTER_NAME