vSphere 名前空間 に割り当てられた vSphere ストレージ ポリシーにより、パーシステント ボリュームで使用可能なストレージ クラスのエディションが 2 つ生成されます。選択するエディションは、要件によって異なります。

使用可能なストレージ クラスの 2 つのエディション

vSphere ストレージ ポリシーを vSphere 名前空間 に割り当てると、一致する Kubernetes ストレージ クラスがその vSphere 名前空間 に作成されます。このストレージ クラスは、その名前空間でプロビジョニングされた各 TKG クラスタにレプリケートされます。その後、このストレージ クラスを使用して、クラスタ ワークロードに使用するパーシステント ストレージ ボリュームを作成できます。

vSphere 名前空間 に割り当てられた各 vSphere ストレージ ポリシーごとに、「Immediate」バインド モードのストレージ クラスが スーパーバイザー に 1 つ存在します。
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 クラスタごとに、2 つのストレージ クラスがあります。1 つは、 スーパーバイザー 上の対応するストレージ クラスと同じものです。もう 1 つは、名前に *-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 ドキュメントの Volume Binding Modeを参照してください。
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 クラスタごとに 2 つの対応するストレージ クラスが作成されます。

kubectl と YAML を使用してストレージ クラスを手動で作成することはできませんが、kubectl を使用して既存のストレージ クラスを変更することはできます。この操作が必要になるのは、デフォルトのストレージ クラスを指定せずに TKG クラスタをプロビジョニングした後に、デフォルトのストレージ クラスを必要とする Helm または Tanzu パッケージを使用してアプリケーションをデプロイする必要が生じた場合です。

デフォルトのストレージを使用してまったく新しいクラスタを作成する代わりに、Kubernetes のドキュメントデフォルトの StorageClass の変更で説明されているように既存のストレージ クラスにパッチを適用して、default = true の注釈を追加することができます。

たとえば、次のコマンドは、TKG クラスタで使用可能な 2 つのストレージ クラスを返します。
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>
次のコマンドを使用して、ストレージ クラスの 1 つにパッチを適用し、注釈を追加します。
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/gc-storage-profile patched
ストレージ クラスを再度確認すると、ストレージ クラスの 1 つにパッチが適用され、デフォルトになっていることがわかります。
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>