指派給 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>