Un criterio di storage di vSphere assegnato a uno Spazio dei nomi vSphere implica due edizioni di una classe di storage disponibili per l'uso con volumi persistenti. L'edizione scelta dipende dalle proprie esigenze.

Due edizioni di una classe di storage disponibili per l'uso

Quando si assegna un criterio di storage vSphere a Spazio dei nomi vSphere, il sistema crea una classe di storage Kubernetes corrispondente in tale Spazio dei nomi vSphere. Questa classe di storage viene replicata in ogni cluster TKG con provisioning in tale spazio dei nomi. La classe di storage è quindi disponibile per creare volumi di storage persistenti per i carichi di lavoro del cluster.

Per ogni criterio di storage di vSphere assegnato a Spazio dei nomi vSphere in Supervisore esiste una singola classe di storage con modalità di associazione.
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>
Per ogni cluster TKG distribuito in tale Spazio dei nomi vSphere, sono presenti due classi di storage: una uguale alla classe di storage corrispondente in Supervisore, e una seconda con *-latebinding aggiunto al nome e "WaitForFirstConsumer" come modalità di binding.
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
Utilizzare l'edizione latebinding della classe di storage quando si desidera eseguire il provisioning di un volume persistente dopo che la risorsa di elaborazione è stata selezionata dall'utilità di pianificazione di Kubernetes. Per ulteriori informazioni, vedere Modalità di binding del volume nella documentazione di 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>

Installare le patch a una classe di storage

Per TKG su Supervisore, non è possibile creare manualmente una classe di storage utilizzando kubectl e file YAML. È possibile creare una classe di storage solo utilizzando il framework del criterio di storage di vSphere e quindi applicarla a uno Spazio dei nomi vSphere. Il risultato è due classi di storage corrispondenti in ciascun cluster TKG di cui è stato eseguito il provisioning in tale Spazio dei nomi vSphere.

Anche se non è possibile creare manualmente una classe di storage utilizzando kubectl e file YAML, è possibile modificare una classe di storage esistente utilizzando kubectl. Questa operazione può essere necessaria se è stato eseguito il provisioning di un cluster TKG senza specificare una classe di storage predefinita e ora si desidera distribuire un'applicazione utilizzando Helm o un pacchetto Tanzu che richiede una classe di storage predefinita.

Anziché creare un cluster completamente nuovo con lo storage predefinito, è possibile installare le patch alla classe di storage esistente e aggiungere l'annotazione default = true come descritto nella documentazione di Kubernetes: Modifica della StorageClass predefinita.

Ad esempio, il comando seguente restituisce due classi di storage disponibili nel 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>
Utilizzare il comando seguente per installare le patch a una delle classi di storage e aggiungere l'annotazione:
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/gc-storage-profile patched
Controllare di nuovo le classi di storage e verificare che una di esse sia modificata per impostazione predefinita.
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>