Memecahkan masalah penyimpanan

Dokumen ini memberikan panduan pemecahan masalah untuk masalah penyimpanan.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Volume gagal dilampirkan

Masalah ini dapat terjadi jika {i>disk<i} virtual terpasang ke {i>disk<i} virtual yang salah komputer, dan mungkin karena Masalah #32727 di Kubernetes 1.12.

Output gkectl diagnose cluster akan terlihat seperti contoh berikut:

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

Dalam contoh ini, satu atau beberapa Pod terjebak dalam status ContainerCreating, dan tampilkan peringatan seperti output contoh berikut:

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'.

Jika {i>disk<i} virtual terpasang ke virtual machine yang salah, Anda dapat secara manual Lepaskan dengan mengikuti langkah-langkah berikut:

  1. Menguras node. Anda dapat menyertakan --ignore-daemonsets dan --delete-local-data penanda di kubectl drain. perintah.

  2. Matikan VM.

  3. Edit konfigurasi hardware VM di vCenter untuk menghapus volume.

  4. Nyalakan VM.

  5. Berhenti memblokir node.

Volume hilang

Masalah ini dapat terjadi jika disk virtual dihapus secara permanen. Situasi ini dapat terjadi jika operator menghapus {i> disk<i} virtual atau menghapus VM tempat {i>disk<i} terpasang.

Jika Anda melihat pesan "tidak ditemukan" terkait dengan file VMDK Anda, kemungkinan {i>disk<i} virtual itu dihapus secara permanen.

Output gkectl diagnose cluster akan terlihat seperti output berikut:

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 tertahan dalam status ContainerCreating, seperti ditunjukkan dalam contoh output berikut:

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 masalah ini terjadi, kelola virtual machine Anda seperti yang dijelaskan di Mengubah ukuran cluster pengguna dan Mengupgrade cluster.

Untuk mengatasi masalah ini, Anda dapat membersihkan resource Kubernetes terkait secara manual:

  1. Hapus PVC yang mereferensikan PV dengan menjalankan kubectl delete pvc [PVC_NAME].

  2. Hapus Pod yang mereferensikan PVC dengan menjalankan kubectl delete pod [POD_NAME].

  3. Ulangi langkah 2 karena Masalah Kubernetes #74374.

Volume CSI vSphere gagal dilepas

Masalah ini terjadi jika hak istimewa CNS > Searchable belum diberikan kepada pengguna vSphere.

Jika Anda menemukan Pod yang macet di fase ContainerCreating dengan FailedAttachVolume peringatan, hal ini mungkin disebabkan oleh kegagalan pelepasan pada node yang berbeda.

Untuk memeriksa error pelepasan CSI, jalankan perintah berikut:

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

Outputnya mirip dengan contoh berikut:

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>

Untuk mengatasi masalah ini, tambahkan hak istimewa CNS > Searchable ke akun pengguna vCenter. Operasi pelepasan akan otomatis dicoba ulang hingga berhasil.

Driver vSphere CSI tidak didukung pada host ESXi

Masalah ini terjadi saat host ESXi di cluster vSphere menjalankan versi lebih rendah dari ESXi 6.7U3.

Output gkectl check-config mencakup peringatan berikut:

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 lebih rendah dari ESXi 6.7U3.

Output kubectl describe pvc mencakup error berikut:

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

Untuk mengatasi masalah ini, upgrade host ESXi ke versi 6.7U3 atau yang lebih baru.

Volume CSI vSphere gagal dilampirkan

Ini Masalah umum Kubernetes di {i>driver<i} CSI {i>open source<i} vSphere terjadi ketika sebuah {i>node<i} dimatikan, dihapus, atau gagal.

Output kubectl describe pod akan terlihat seperti berikut:

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 mengatasi masalah ini, selesaikan beberapa langkah berikut:

  1. Perhatikan nama PersistentVolumeKlaim (PVC) di output sebelumnya, dan temukan VolumeLampiran yang terkait dengan PVC:

    kubectl get volumeattachments | grep pvc-xxxxx
    

    Contoh output berikut menunjukkan nama VolumeLampirans:

    csi-yyyyy   csi.vsphere.vmware.com   pvc-xxxxx   node-zzzzz ...
    
  2. Menjelaskan VolumeLampiran:

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

    Catat stempel waktu penghapusan, seperti pada contoh output berikut:

    Deletion Timestamp:   2021-03-10T22:14:58Z
    
  3. Tunggu hingga waktu yang ditentukan oleh stempel waktu penghapusan, lalu paksa menghapus VolumeLampiran. Untuk melakukannya, edit objek VolumeLampiran dan menghapus finaler.

    kubectl edit volumeattachment csi-yyyyy
    

    Hapus finalr:

    [...]
      Finalizers:
       external-attacher/csi-vsphere-vmware-com
    

vSphere CSI VolumeSnapshot tidak siap karena versi

Masalah ini terjadi saat versi host vCenter Server atau host ESXi yang lebih rendah dari 7.0 Pembaruan 3.

Output kubectl describe volumesnapshot mencakup error seperti contoh berikut:

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 tidak siap, snapshot maksimum per volume

Masalah ini terjadi saat jumlah snapshot per volume mencapai batas maksimum untuk driver Container Storage vSphere. Nilai defaultnya adalah tiga.

Output kubectl describe volumesnapshot mencakup error seperti contoh berikut:

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, ikuti langkah-langkah berikut untuk memperbarui jumlah maksimum snapshot per volume:

  1. Dapatkan nama Secret yang menyediakan konfigurasi vSphere ke Pengontrol vSphere CSI:

    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'
    

    Ganti kode berikut:

    • ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin Anda
    • USER_CLUSTER_NAME: nama cluster pengguna Anda
  2. Dapatkan nilai data.config dari Secret, dekode base64, dan simpan dalam file bernama 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
    

    Ganti SECRET_NAME dengan nama Secret dari yang sebelumnya langkah waktu ini.

  3. Buka config.txt untuk mengedit:

    Edit atau tambahkan kolom global-max-snapshots-per-block-volume di [Snapshot], seperti contoh berikut:

    [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. Hapus dan buat ulang 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
    
  5. Mulai ulang Deployment 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>
    

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.