Une stratégie de stockage vSphere attribuée à un Espace de noms vSphere génère deux éditions d'une classe de stockage utilisable avec des volumes persistants. L'édition que vous choisissez dépend de vos besoins.

Deux éditions d'une classe de stockage disponibles

Lorsque vous attribuez une stratégie de stockage vSphere à un Espace de noms vSphere, le système crée une classe de stockage Kubernetes correspondante dans cet Espace de noms vSphere. Cette classe de stockage est répliquée sur chaque cluster TKG provisionné dans cet espace de noms. La classe de stockage est ensuite disponible pour créer des volumes de stockage persistants pour les charges de travail de cluster.

Pour chaque stratégie de stockage vSphere attribuée à un Espace de noms vSphere, il existe une classe de stockage unique avec le mode de liaison « Immédiat » sur le Superviseur.
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>
Pour chaque cluster TKG déployé dans cet Espace de noms vSphere, il existe deux classes de stockage : une qui est la même que la classe de stockage correspondante sur le Superviseur et une seconde avec *-latebinding ajouté au nom et « WaitForFirstConsumer » comme mode de liaison.
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
Utilisez l'édition latebinding de la classe de stockage lorsque vous souhaitez provisionner un volume persistant après que le calcul a été sélectionné par le planificateur Kubernetes. Pour plus d'informations, reportez-vous à la section Mode de liaison des volumes dans la documentation de 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>

Correction d'une classe de stockage

Pour TKG sur le Superviseur, vous ne pouvez pas créer manuellement une classe de stockage à l'aide de kubectl et de YAML. Vous pouvez uniquement créer une classe de stockage à l'aide de l'infrastructure de stratégie de stockage vSphere, puis l'appliquer à un Espace de noms vSphere. Il en résulte deux classes de stockage correspondantes sur chaque cluster TKG provisionné dans cet Espace de noms vSphere.

Bien que vous ne puissiez pas créer manuellement une classe de stockage à l'aide de kubectl et de YAML, vous pouvez modifier une classe de stockage existante à l'aide de kubectl. Cela peut être nécessaire si vous avez provisionné un cluster TKG sans spécifier de classe de stockage par défaut et que vous souhaitez maintenant déployer une application à l'aide de Helm ou d'un module Tanzu qui nécessite une classe de stockage par défaut.

Au lieu de créer un cluster entièrement nouveau avec un stockage par défaut, vous pouvez corriger la classe de stockage existante et ajouter l'annotation default = true comme décrit dans la documentation de Kubernetes : Modifier la classe de stockage par défaut.

Par exemple, la commande suivante renvoie deux classes de stockage disponibles sur le cluster 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>
Utilisez la commande suivante pour corriger l'une des classes de stockage et ajouter l'annotation :
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/gc-storage-profile patched
Vérifiez à nouveau les classes de stockage et vous verrez que l'une d'entre elles est corrigée et qu'elle est désormais la classe par défaut.
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>