分配给 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>