指派給 vSphere 命名空間 的 vSphere 儲存區原則會產生儲存區類別的兩個版本,可用於持續性磁碟區。您選擇的版本視您的需求而定。
可供使用的儲存區類別的兩個版本
將 vSphere 儲存區原則指派給 vSphere 命名空間 時,系統會在該 vSphere 命名空間 中建立相符的 Kubernetes 儲存區類別。此儲存區類別將複寫到在該命名空間中佈建的每個 TKG 叢集。然後,該儲存區類別可用於為叢集工作負載建立持續性儲存磁碟區。
對於指派給
vSphere 命名空間 的每個 vSphere 儲存區原則,在
主管 上存在具有「立即」繫結模式的單一儲存區類別。
kubectl describe storageclass tkg-storage-policy Name: tkg-storage-policy IsDefaultClass: No Annotations: cns.vmware.com/StoragePoolTypeHint=cns.vmware.com/vsan Provisioner: csi.vsphere.vmware.com Parameters: storagePolicyID=877b0f4b-b959-492a-b265-b4d460987b23 AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: Immediate Events: <none>
對於在該
vSphere 命名空間 中部署的每個 TKG 叢集,有兩個儲存區類別:一個與
主管 上的對應儲存區類別相同,另一個在名稱後附加
*-latebinding
,並將「WaitForFirstConsumer」作為繫結模式。
kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE tkg-storage-policy csi.vsphere.vmware.com Delete Immediate true 2m43s tkg-storage-policy-latebinding csi.vsphere.vmware.com Delete WaitForFirstConsumer true 2m43s
如果要在 Kubernetes 排程器選取運算資源後佈建持續性磁碟區,請使用
latebinding
版本的儲存區類別。如需詳細資訊,請參閱 Kubernetes 說明文件中的
磁碟區繫結模式。
kubectl describe sc tkg-storage-policy Name: tkg-storage-policy IsDefaultClass: No Annotations: <none> Provisioner: csi.vsphere.vmware.com Parameters: svStorageClass=tkg-storage-policy AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: Immediate Events: <none> kubectl describe sc tkg-storage-policy-latebinding Name: tkg-storage-policy-latebinding IsDefaultClass: No Annotations: <none> Provisioner: csi.vsphere.vmware.com Parameters: svStorageClass=tkg-storage-policy AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: <none>
修補儲存區類別
對於 主管 上的 TKG,無法使用 kubectl 和 YAML 手動建立儲存區類別。只能使用 vSphere 儲存區原則架構建立儲存區類別,然後將其套用至 vSphere 命名空間。因此,在該 vSphere 命名空間 中佈建的每個 TKG 叢集上會有兩個相應的儲存區類別。
雖然無法使用 kubectl 和 YAML 手動建立儲存區類別,但可以使用 kubectl 修改現有儲存區類別。如果在佈建 TKG 叢集時未指定預設儲存區類別,而現在希望使用 Helm 或 Tanzu 套件 (需要預設儲存區類別) 部署應用程式,則可能需要執行此操作。
不必使用預設儲存區建立全新的叢集,可以修補現有儲存區類別並新增預設儲存區類別為 true 的註解,如以下 Kubernetes 說明文件中所述:變更預設 StorageClass。
例如,以下命令傳回 TKG 叢集上可用的兩個儲存區類別:
kubectl describe sc Name: gc-storage-profile IsDefaultClass: No Annotations: <none> Provisioner: csi.vsphere.vmware.com Parameters: svStorageClass=gc-storage-profile AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: Immediate Events: <none> Name: gc-storage-profile-latebinding IsDefaultClass: No Annotations: <none> Provisioner: csi.vsphere.vmware.com Parameters: svStorageClass=gc-storage-profile AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: <none>
使用以下命令修補其中一個儲存區類別並新增註解:
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' storageclass.storage.k8s.io/gc-storage-profile patched
再次檢查儲存區類別,您會看到其中一個已修補,因此現在為預設儲存區類別。
kubectl describe sc Name: gc-storage-profile IsDefaultClass: Yes Annotations: storageclass.kubernetes.io/is-default-class=true Provisioner: csi.vsphere.vmware.com Parameters: svStorageClass=gc-storage-profile AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: Immediate Events: <none> Name: gc-storage-profile-latebinding IsDefaultClass: No Annotations: <none> Provisioner: csi.vsphere.vmware.com Parameters: svStorageClass=gc-storage-profile AllowVolumeExpansion: True MountOptions: <none> ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: <none>