Dokumen ini memberikan panduan pemecahan masalah untuk masalah penyimpanan.
Volume gagal dipasang
Masalah ini dapat terjadi jika disk virtual terpasang ke mesin virtual yang salah, hal ini mungkin disebabkan oleh Masalah #32727 di Kubernetes 1.12.
Output gkectl diagnose cluster
akan terlihat seperti ini:
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
Satu atau beberapa Pod tetap dalam status ContainerCreating
dengan peringatan seperti
ini:
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'.
Untuk menyelesaikan masalah ini:
Jika disk virtual terpasang ke mesin virtual yang salah, Anda mungkin perlu melepaskannya secara manual:
Pindahkan node. Lihat Mengosongkan node dengan aman. Anda mungkin ingin menyertakan flag
--ignore-daemonsets
dan--delete-local-data
dalam perintah kubectl drain.Edit konfigurasi hardware VM di vCenter untuk menghapus volume.
Volume hilang
Masalah ini dapat terjadi jika disk virtual dihapus secara permanen. Hal ini dapat terjadi jika operator menghapus disk virtual secara manual atau pada mesin virtual yang terpasang. Jika Anda melihat error "tidak ditemukan" terkait file VMDK, kemungkinan disk virtual tersebut telah dihapus secara permanen.
Output gkectl diagnose cluster
akan terlihat seperti ini:
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
Satu atau beberapa Pod terhenti dalam status 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
Untuk mencegah terjadinya masalah ini, kelola mesin virtual Anda seperti yang dijelaskan dalam Mengubah ukuran cluster pengguna dan Mengupgrade cluster.
Untuk mengatasi masalah ini, Anda mungkin perlu membersihkan resource Kubernetes terkait secara manual:
Hapus PVC yang mereferensikan PV dengan menjalankan
kubectl delete pvc [PVC_NAME]
.Hapus Pod yang mereferensikan PVC dengan menjalankan
kubectl delete pod [POD_NAME]
.Ulangi langkah 2. Ya, sungguh. Lihat masalah Kubernetes 74374.
vSphere CSI Volume gagal dilepas
Masalah ini terjadi jika hak istimewa CNS > Searchable
belum diberikan kepada
pengguna vSphere.
Jika Anda menemukan Pod yang tertahan di fase ContainerCreating
dengan
peringatan FailedAttachVolume
, hal ini mungkin disebabkan oleh kegagalan pelepasan pada
node yang berbeda.
Untuk memeriksa error terkait pelepasan CSI:
kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message
Outputnya mirip dengan hal berikut ini:
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
Untuk mengatasi masalah ini, tambahkan hak istimewa CNS > Searchable
ke akun pengguna vcenter Anda.
Operasi pelepasan akan otomatis mencoba kembali hingga berhasil.
Driver CSI vSphere tidak didukung di host ESXi
Masalah ini terjadi saat host ESXi di cluster vSphere menjalankan versi yang lebih rendah dari ESXi 6.7U3.
Output gkectl check-config
menyertakan peringatan ini:
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.
Untuk mengatasi masalah ini, upgrade host ESXi ke versi 6.7U3 atau yang lebih baru.
Pembuatan volume CSI gagal dengan NotSupported
error
Masalah ini terjadi saat host ESXi di cluster vSphere menjalankan versi yang lebih rendah dari ESXi 6.7U3.
Output kubectl describe pvc
menyertakan error ini:
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
Untuk mengatasi masalah ini, upgrade host ESXi ke versi 6.7U3 atau yang lebih baru.
Volume CSI vSphere gagal ditambahkan
Masalah umum pada driver CSI vSphere open source ini terjadi saat node dimatikan, dihapus, atau gagal.
Output kubectl describe pod
akan terlihat seperti ini:
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
Untuk menyelesaikan masalah ini:
Catat nama PersistentVolumeClaim (PVC) dalam output sebelumnya, dan temukan VolumeLampiran yang terkait dengan PVC. Contoh:
kubectl get volumeattachments | grep pvc-xxxxx
Output menampilkan nama VolumeLampiran. Contoh:
csi-yyyyy csi.vsphere.vmware.com pvc-xxxxx node-zzzzz ...
Jelaskan Volume Lampiran. Contoh:
kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"
Catat stempel waktu penghapusan dalam output:
Deletion Timestamp: 2021-03-10T22:14:58Z
Tunggu hingga waktu yang ditentukan oleh stempel waktu penghapusan, lalu paksa hapus VolumeLampiran. Untuk melakukannya, edit objek VolumeLampiran dan hapus finalizer. Contoh:
kubectl edit volumeattachment csi-yyyyy Finalizers: external-attacher/csi-vsphere-vmware-com
vSphere CSI VolumeSnapshot tidak siap karena versi
Masalah ini terjadi jika versi host vCenter Server atau host ESXi lebih rendah dari 7.0 Update 3.
Output kubectl describe volumesnapshot
mencakup error seperti ini:
rpc error: code = Unimplemented desc = VC version does not support snapshot operations.
Untuk mengatasi masalah ini, upgrade Server vCenter dan host ESXi ke versi 7.0 Update 3 atau yang lebih baru.
vSphere CSI VolumeSnapshot belum siap, snapshot maksimum per volume
Masalah ini terjadi saat jumlah snapshot per volume mencapai nilai maksimum untuk driver vSphere Container Storage. Nilai defaultnya adalah tiga.
Output kubectl describe volumesnapshot
mencakup error seperti ini:
rpc error: code = FailedPrecondition desc = the number of snapshots on the source volume 5394aac1-bc0a-44e2-a519-1a46b187af7b reaches the configured maximum (3)
Untuk mengatasi masalah ini, gunakan langkah-langkah berikut untuk memperbarui jumlah maksimum snapshot per volume:
Dapatkan nama Secret yang menyediakan konfigurasi vSphere ke pengontrol 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'
Ganti kode berikut:
- ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin Anda
- USER_CLUSTER_NAME: nama cluster pengguna Anda
Dapatkan nilai
data.config
dari Secret, lakukan dekode dalam base64, dan simpan dalam file bernamaconfig.txt
:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret SECRET_NAME \ --namespace USER_CLUSTER_NAME \ --output json | jq -r '.data["config"]' | base64 -d > config.txt
Ganti SECRET_NAME dengan nama Secret dari langkah sebelumnya.
Buka
config.txt
untuk mengedit:Edit atau tambahkan kolom
global-max-snapshots-per-block-volume
di bagian[Snapshot]
. Contoh:[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
Hapus dan buat ulang Secret tersebut:
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
Mulai ulang Deployment
vsphere-csi-controller
:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG rollout restart deployment vsphere-csi-controller \ --namespace USER_CLUSTER_NAME