Ce document fournit des conseils de dépannage pour les problèmes de stockage.
Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.Impossible d'associer un volume
Ce problème peut survenir si un disque virtuel est associé à la mauvaise machine virtuelle et peut être dû au problème n° 32727 dans Kubernetes 1.12.
Le résultat de la commande gkectl diagnose cluster
ressemble à l'exemple suivant:
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
Dans cet exemple, un ou plusieurs pods sont bloqués à l'état ContainerCreating
et affichent des avertissements semblables à l'exemple de résultat suivant:
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'.
Si un disque virtuel est associé à la mauvaise machine virtuelle, vous pouvez le dissocier manuellement en procédant comme suit:
Drainez un nœud. Vous pouvez éventuellement inclure les options
--ignore-daemonsets
et--delete-local-data
dans votre commande kubectl drain.Modifiez la configuration matérielle de la VM dans vCenter pour supprimer le volume.
Le volume est perdu
Ce problème peut se produire si un disque virtuel a été définitivement supprimé. Cette situation peut se produire si un opérateur supprime manuellement un disque virtuel ou la VM à laquelle le disque est associé.
Si une erreur "introuvable" s'affiche concernant votre fichier VMDK, il est probable que le disque virtuel ait été définitivement supprimé.
Le résultat de la commande gkectl diagnose cluster
se présente comme suit:
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
Un ou plusieurs pods sont bloqués à l'état ContainerCreating
, comme illustré dans l'exemple de résultat suivant:
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
Pour éviter que ce problème ne se produise, gérez vos machines virtuelles, comme décrit dans les pages Redimensionner un cluster utilisateur et Mettre à niveau les clusters.
Pour résoudre ce problème, vous pouvez nettoyer manuellement les ressources Kubernetes associées:
Supprimez le PVC associé au PV en exécutant la commande
kubectl delete pvc [PVC_NAME]
.Supprimez le pod associé au PVC en exécutant la commande
kubectl delete pod [POD_NAME]
.Répétez l'étape 2 en raison du problème Kubernetes n° 74374.
Échec de la dissociation du volume CSI vSphere
Ce problème se produit si le privilège CNS > Searchable
n'a pas été accordé à l'utilisateur vSphere.
Si vous constatez que des pods sont bloqués dans la phase ContainerCreating
avec des avertissements FailedAttachVolume
, cela peut être dû à un échec de dissociation sur un autre nœud.
Pour vérifier les erreurs de dissociation de CSI, exécutez la commande suivante:
kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message
Le résultat ressemble à celui de l'exemple ci-dessous.
NAME DETACH_ERROR
csi-0e80d9be14dc09a49e1997cc17fc69dd8ce58254bd48d0d8e26a554d930a91e5 rpc error: code = Internal desc = QueryVolume failed for volumeID: "57549b5d-0ad3-48a9-aeca-42e64a773469". ServerFaultCode: NoPermission
csi-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192d <none>
csi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c <none>
csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8 <none>
Pour résoudre ce problème, ajoutez le droit CNS > Searchable
à votre compte utilisateur vCenter.
L'opération de dissociation fait automatiquement l'objet de plusieurs tentatives jusqu'à ce qu'elle aboutisse.
Le pilote CSI vSphere n'est pas compatible avec l'hôte ESXi
Ce problème se produit lorsqu'un hôte ESXi du cluster vSphere exécute une version antérieure à ESXi 6.7U3.
Le résultat de gkectl check-config
inclut l'avertissement suivant:
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.
Pour résoudre ce problème, mettez à niveau vos hôtes ESXi vers la version 6.7U3 ou ultérieure.
Échec de la création du volume CSI avec l'erreur NotSupported
Ce problème se produit lorsqu'un hôte ESXi du cluster vSphere exécute une version antérieure à ESXi 6.7U3.
Le résultat de kubectl describe pvc
inclut l'erreur suivante:
Failed to provision volume with StorageClass <standard-rwo>: rpc error:
code = Internal desc = Failed to create volume. Error: CnsFault error:
CNS: Failed to create disk.:Fault cause: vmodl.fault.NotSupported
Pour résoudre ce problème, mettez à niveau vos hôtes ESXi vers la version 6.7U3 ou ultérieure.
Échec de l'association du volume CSI vSphere
Ce problème connu de Kubernetes dans le pilote CSI vSphere Open Source se produit lorsqu'un nœud est arrêté, supprimé ou défaillant.
Le résultat de la commande kubectl describe pod
se présente comme suit :
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
Pour résoudre ce problème, procédez comme suit :
Notez le nom du PersistentVolumeClaim (PVC) dans le résultat précédent et recherchez les VolumeAttachments associés au PVC:
kubectl get volumeattachments | grep pvc-xxxxx
L'exemple de résultat suivant affiche les noms des VolumeAttachments:
csi-yyyyy csi.vsphere.vmware.com pvc-xxxxx node-zzzzz ...
Décrivez les VolumeAttachments:
kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"
Notez le code temporel de suppression, comme dans l'exemple de résultat suivant:
Deletion Timestamp: 2021-03-10T22:14:58Z
Attendez l'heure spécifiée par l'horodatage de suppression, puis forcez la suppression de l'objet VolumeAttachments. Pour ce faire, modifiez l'objet VolumeAttachments et supprimez le finaliseur.
kubectl edit volumeattachment csi-yyyyy
Supprimez le finaliseur:
[...] Finalizers: external-attacher/csi-vsphere-vmware-com
vSphere CSI VolumeSnapshot n'est pas prêt en raison de la version
Ce problème se produit lorsque la version de vCenter Server ou de l'hôte ESXi est antérieure à la version 7.0, mise à jour 3.
Le résultat de kubectl describe volumesnapshot
inclut des erreurs semblables à l'exemple suivant:
rpc error: code = Unimplemented desc = VC version does not support snapshot operations.
Pour résoudre ce problème, mettez à niveau vCenter Server et les hôtes ESXi vers la version 7.0 Update 3 ou une version ultérieure.
vSphere CSI VolumeSnapshot n'est pas prêt, nombre maximal d'instantanés par volume
Ce problème se produit lorsque le nombre d'instantanés par volume atteint la valeur maximale du pilote de stockage de conteneurs vSphere. La valeur par défaut est trois.
Le résultat de kubectl describe volumesnapshot
inclut les erreurs comme dans l'exemple suivant:
rpc error: code = FailedPrecondition desc = the number of snapshots on the source volume 5394aac1-bc0a-44e2-a519-1a46b187af7b reaches the configured maximum (3)
Pour résoudre ce problème, procédez comme suit afin de mettre à jour le nombre maximal d'instantanés par volume:
Obtenez le nom du secret qui fournit la configuration vSphere au contrôleur CSI vSphere:
kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> get deployment vsphere-csi-controller \ --namespace <var class="edit">USER_CLUSTER_NAME</var> \ --output json \ | jq -r '.spec.template.spec.volumes[] \ | select(.name=="vsphere-secret") .secret.secretName'
Remplacez les éléments suivants :
- ADMIN_KUBECONFIG : chemin d'accès au fichier kubeconfig du cluster d'administrateur
- USER_CLUSTER_NAME : nom de votre cluster d'utilisateur
Obtenez la valeur de
data.config
à partir du secret, décodez-le en base64 et enregistrez-le dans un fichier nomméconfig.txt
:kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> get secret <var class="edit">SECRET_NAME</var> \ --namespace <var class="edit">USER_CLUSTER_NAME </var> \ --output json | jq -r '.data["config"]' | base64 -d > config.txt
Remplacez SECRET_NAME par le nom du secret obtenu à l'étape précédente.
Ouvrez
config.txt
pour y apporter des modifications :Modifiez ou ajoutez le champ
global-max-snapshots-per-block-volume
dans la section[Snapshot]
, comme dans l'exemple suivant:[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
Supprimez et recréez le secret:
kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> delete secret <var class="edit">SECRET_NAME</var> \ --namespace <var class="edit">USER_CLUSTER_NAME</var> kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> create secret generic <var class="edit">SECRET_NAME</var> \ --namespace <var class="edit">USER_CLUSTER_NAME</var> \ --from-file=config
Redémarrez le déploiement
vsphere-csi-controller
:kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> rollout restart deployment vsphere-csi-controller \ --namespace <var class="edit">USER_CLUSTER_NAME</var>