Una directiva de almacenamiento de vSphere asignada a un espacio de nombres de vSphere genera dos ediciones de una clase de almacenamiento disponibles para su uso con volúmenes persistentes. La edición para elegir depende de los requisitos que usted establezca.

Dos ediciones de una clase de almacenamiento disponible para su uso

Cuando se asigna una directiva de almacenamiento de vSphere a un espacio de nombres de vSphere, el sistema crea una clase de almacenamiento de Kubernetes coincidente en ese espacio de nombres de vSphere. Esta clase de almacenamiento se replica en cada clúster de TKG aprovisionado en ese espacio de nombres. A continuación, la clase de almacenamiento está disponible para crear volúmenes de almacenamiento persistentes para las cargas de trabajo de clúster.

Para cada directiva de almacenamiento de vSphere asignada a un espacio de nombres de vSphere, en Supervisor existe una sola clase de almacenamiento con el modo de enlace "Inmediato".
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>
Para cada clúster de TKG implementado en ese espacio de nombres de vSphere, hay dos clases de almacenamiento: una que es la misma que la clase de almacenamiento correspondiente en Supervisor y otra con *-latebinding anexado al nombre y "WaitForFirstConsumer" como modo de enlace.
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
Utilice la edición latebinding de la clase de almacenamiento cuando desee aprovisionar un volumen persistente después de que el programador de Kubernetes haya seleccionado el recurso informático. Para obtener más información, consulte Modo de enlace de volumen en la documentación 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>

Aplicar revisiones a una clase de almacenamiento

Para TKG en Supervisor, no se puede crear una clase de almacenamiento manualmente mediante kubectl y YAML. Solo puede crear una clase de almacenamiento mediante el marco de directivas de almacenamiento de vSphere y aplicarla a un espacio de nombres de vSphere. El resultado es dos clases de almacenamiento correspondientes en cada clúster de TKG aprovisionado en ese espacio de nombres de vSphere.

Aunque no puede crear una clase de almacenamiento manualmente mediante kubectl y YAML, puede modificar una clase de almacenamiento existente mediante kubectl. Es posible que sea necesario hacerlo si aprovisionó un clúster de TKG sin especificar una clase de almacenamiento predeterminada y ahora desea implementar una aplicación mediante Helm o un paquete de Tanzu que requiere una clase de almacenamiento predeterminada.

En lugar de crear un clúster totalmente nuevo con almacenamiento predeterminado, puede aplicar revisiones a la clase de almacenamiento existente y agregar la anotación default = true, como se describe en la documentación de Kubernetes: Cambiar el objeto StorageClass predeterminado.

Por ejemplo: el siguiente comando devuelve dos clases de almacenamiento que están disponibles en el clúster de 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>
Utilice el siguiente comando para aplicar una revisión a una de las clases de almacenamiento y agregar la anotación:
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/gc-storage-profile patched
Vuelva a comprobar las clases de almacenamiento y verá que una de ellas tiene revisiones para que ahora sea la predeterminada.
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>