Eine einem vSphere-Namespace zugewiesene vSphere-Speicherrichtlinie liefert zwei Editionen einer Speicherklasse, die für die Verwendung mit dauerhaften Volumes verfügbar ist. Welche Edition Sie auswählen, richtet sich nach Ihren Anforderungen.

Zwei Editionen einer für die Verwendung verfügbaren Speicherklasse

Wenn Sie einem vSphere-Namespace eine vSphere-Speicherrichtlinie zuweisen, erstellt das System eine übereinstimmende Kubernetes-Speicherklasse in diesem vSphere-Namespace. Diese Speicherklasse wird auf jeden in diesem Namespace bereitgestellten TKG-Cluster repliziert. Die Speicherklasse ist dann verfügbar, um dauerhafte Speichervolumes für Cluster-Arbeitslasten zu erstellen.

Für jede einem vSphere-Namespace zugewiesene vSphere-Speicherrichtlinie gibt es auf Supervisor eine einzelne Speicherklasse mit dem Bindungsmodus „Sofort“.
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>
Für jeden in diesem vSphere-Namespace bereitgestellten TKG-Cluster gibt es zwei Speicherklassen: eine, die mit der entsprechenden Speicherklasse auf Supervisor identisch ist, und eine zweite mit *-latebinding als Anhang zum Namen und „WaitForFirstConsumer“ als Bindungsmodus.
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
Verwenden Sie die latebinding-Edition der Speicherklasse, wenn Sie ein dauerhaftes Volume bereitstellen möchten, nachdem die Berechnung vom Kubernetes-Scheduler ausgewählt wurde. Weitere Informationen finden Sie unter Bindungsmodus in der Kubernetes-Dokumentation.
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>

Patchen einer Speicherklasse

Für TKG auf Supervisor können Sie eine Speicherklasse nicht manuell mithilfe von kubectl und YAML erstellen. Sie können eine Speicherklasse nur mithilfe des vSphere-Speicherrichtlinien-Frameworks erstellen und dann auf einen vSphere-Namespace anwenden. Das Ergebnis sind zwei entsprechende Speicherklassen auf jedem in diesem vSphere-Namespace bereitgestellten TKG-Cluster.

Auch wenn Sie eine Speicherklasse nicht manuell mithilfe von kubectl und YAML erstellen können, haben Sie die Möglichkeit, eine vorhandene Speicherklasse mithilfe von kubectl zu ändern. Dies kann erforderlich sein, wenn Sie einen TKG-Cluster ohne Angabe einer Standardspeicherklasse bereitgestellt haben und jetzt eine Anwendung mithilfe von Helm oder eines Tanzu-Pakets bereitstellen möchten, das eine Standardspeicherklasse erfordert.

Anstatt von Grund auf einen neuen Cluster mit Standardspeicher zu erstellen, können Sie die vorhandene Speicherklasse patchen und die Anmerkung „default = true“ hinzufügen, wie in der Kubernetes-Dokumentation unter Change the default StorageClass (Ändern der Standard-StorageClass) beschrieben.

Der folgende Befehl gibt beispielsweise zwei Speicherklassen zurück, die im TKG-Cluster verfügbar sind:
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>
Verwenden Sie den folgenden Befehl, um eine der Speicherklassen zu patchen und die Anmerkung hinzuzufügen:
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/gc-storage-profile patched
Überprüfen Sie die Speicherklassen erneut. Sie sehen dann, dass eine von ihnen gepatcht ist, sodass sie jetzt die Standardklasse ist.
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>