vSphere 네임스페이스에 할당된 vSphere 스토리지 정책은 영구 볼륨에 사용 가능한 두 가지 버전의 스토리지 클래스를 생성합니다. 선택하는 버전은 요구 사항에 따라 다릅니다.

사용 가능한 두 가지 버전의 스토리지 클래스

vSphere 스토리지 정책을 vSphere 네임스페이스에 할당하면 시스템은 해당 vSphere 네임스페이스에 일치하는 Kubernetes 스토리지 클래스를 생성합니다. 이 스토리지 클래스는 해당 네임스페이스에 프로비저닝된 각 TKG 클러스터에 복제됩니다. 그런 다음 스토리지 클래스를 사용하여 클러스터 워크로드에 대한 영구 스토리지 볼륨을 생성할 수 있습니다.

vSphere 네임스페이스에 할당된 각 vSphere 스토리지 정책에 대해 감독자에는 "즉시" 바인딩 모드의 단일 스토리지 클래스가 있습니다.
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 클러스터에는 두 개의 스토리지 클래스가 있습니다. 하나는 감독자의 해당 스토리지 클래스와 동일하고 다른 하나는 이름에 *-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 설명서에서 볼륨 바인딩 모드를 참조하십시오.
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 클러스터에 두 개의 해당 스토리지 클래스가 생성됩니다.

kubectl 및 YAML을 사용하여 스토리지 클래스를 수동으로 생성할 수는 없지만 kubectl을 사용하여 기존 스토리지 클래스를 수정할 수 있습니다. 기본 스토리지 클래스를 지정하지 않고 TKG 클러스터를 프로비저닝했는데 이제는 기본 스토리지 클래스가 필요한 Helm 또는 Tanzu 패키지를 사용하여 애플리케이션을 배포하려는 경우 이렇게 하는 것이 필요할 수 있습니다.

기본 스토리지를 사용하여 완전히 새로운 클러스터를 생성하는 대신 기존 스토리지 클래스에 패치를 적용하고 Kubernetes 설명서 Change the default StorageClass(기본 StorageClass 변경)에 설명된 대로 default = true 주석을 추가할 수 있습니다.

예를 들어 다음 명령은 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>
다음 명령을 사용하여 스토리지 클래스 중 하나에 패치를 적용하고 주석을 추가합니다.
kubectl patch storageclass gc-storage-profile -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/gc-storage-profile patched
스토리지 클래스를 다시 확인하면 그 중 하나에 패치가 적용되어 기본값이 된 것이 보입니다.
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>