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