RWX(Read-Write-Many) 볼륨을 위한 TKG & vSAN File Service

VMware TKG(Tanzu Kubernetes Grid)와 관련하여 일반적으로 받는 질문은 vSAN 파일 서비스를 지원하는지 여부, 특히 컨테이너 볼륨용 RWX(Read-Write-Multi) 기능이다. 이 문제를 해결하려면 TKG가 어떻게 프로비저닝되고 있는지 구별할 필요가 있다. TKG에는 vSphere, AWS 또는 Azure에서 실행할 수 있는 멀티 클라우드 버전이 있으며, TKG 관리자로부터 배포된다. 그 후 vSphere with Tanzu / Tanzu와 VCF를 통해 네임스페이스에 ‘워크로드 클러스터’가 구축되는 내장 TKG 에디션도 있다. TKG가 vSAN 파일 서비스에서 RWX 볼륨을 동적으로 프로비저닝할 수 있는지 여부에 대한 질문에 답하기 위해 현재 TKG의 멀티 클라우드 버전만 이를 지원한다. 이 기능을 지원하기 위해 감독자 클러스터의 CSI 드라이버와 “workload/guest” 클러스터의 pvCSI 드라이버가 업데이트되어야 하므로 작성 시 TKG의 내장 버전은 이 기능을 지원하지 않는다.

다음 절에서는 멀티 클라우드 버전의 TKG와 함께 vSAN 파일 서비스의 RWX 볼륨을 사용하는 방법을 신속하게 설명한다. 이것은 TKG v1.2라는 점에 유의한다. 3개의 제어부 노드와 5개의 작업자 노드로 구성된 워크로드 클러스터뿐만 아니라 관리 클러스터를 이미 구축했다. “bigstripe”라 부르는 vSphere/vSAN 스토리지 정책을 사용해서 새로운 StorageClass를 구축하고, 이를 사용해서 읽기-쓰기-다중 볼륨 배포 이렇게 하면 읽기-쓰기-다중 볼륨으로 사용될 vSAN 파일 서비스 공유의 생성이 인스턴스화된다. 단계는 아래에 나와 있다.

cormac@cormac-tkgm:~$ tkg version
Client:
        Version: v1.2.0
        Git commit: 05b233e75d6e40659247a67750b3e998c2d990a5


cormac@cormac-tkgm:~$ tkg get clusters --include-management-cluster
NAME                             NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES
my-cluster                       default     running  3/3           5/5      v1.19.1+vmware.2  <none>
tkg-mgmt-vsphere-20201130160352  tkg-system  running  3/3           1/1      v1.19.1+vmware.2  management


@cormac-tkgm:~$ tkg get credentials my-cluster
Credentials of workload cluster 'my-cluster' have been saved
You can now access the cluster by running 'kubectl config use-context my-cluster-admin@my-cluster'


cormac@cormac-tkgm:~$ kubectl config use-context my-cluster-admin@my-cluster
Switched to context "my-cluster-admin@my-cluster".


cormac@cormac-tkgm:~$ kubectl get nodes
NAME                               STATUS   ROLES    AGE     VERSION
my-cluster-control-plane-56hjh     Ready    master   6d17h   v1.19.1+vmware.2
my-cluster-control-plane-gdd2b     Ready    master   6d17h   v1.19.1+vmware.2
my-cluster-control-plane-qwjf6     Ready    master   6d17h   v1.19.1+vmware.2
my-cluster-md-0-6946b5db64-2z8md   Ready    <none>   6d17h   v1.19.1+vmware.2
my-cluster-md-0-6946b5db64-98gnt   Ready    <none>   6d17h   v1.19.1+vmware.2
my-cluster-md-0-6946b5db64-f6wz9   Ready    <none>   4d      v1.19.1+vmware.2
my-cluster-md-0-6946b5db64-rm9sm   Ready    <none>   6d17h   v1.19.1+vmware.2
my-cluster-md-0-6946b5db64-smdtl   Ready    <none>   6d1h    v1.19.1+vmware.2


cormac@cormac-tkgm:~$ kubectl get sc
NAME                PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
default (default)   csi.vsphere.vmware.com   Delete          Immediate           false                  6d17h


cormac@cormac-tkgm:~$ cat big-stripe-storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: bigstripe
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: csi.vsphere.vmware.com
parameters:
  storagePolicyName: "Big-Stripe"


cormac@cormac-tkgm:~$ kubectl apply -f big-stripe-storage-class.yaml
storageclass.storage.k8s.io/bigstripe created


cormac@cormac-tkgm:~$ kubectl get sc
NAME                  PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
bigstripe (default)   csi.vsphere.vmware.com   Delete          Immediate           false                  6s
default (default)     csi.vsphere.vmware.com   Delete          Immediate           false                  6d17h


cormac@cormac-tkgm:~$ cat file-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: file-pvc-demo-5g
spec:
  storageClassName: bigstripe
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi


cormac@cormac-tkgm:~$ kubectl apply -f file-pvc.yaml
persistentvolumeclaim/file-pvc-demo-5g created

cormac@cormac-tkgm:~$ kubectl get pvc
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
file-pvc-demo-5g   Bound    pvc-b5db5000-2fe5-4aba-935a-69f7b70aae85   5Gi        RWX            bigstripe      6s


cormac@cormac-tkgm:$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                      STORAGECLASS   REASON   AGE
pvc-b5db5000-2fe5-4aba-935a-69f7b70aae85   5Gi        RWX            Delete           Bound    default/file-pvc-demo-5g   bigstripe               <invalid>

그리고 vSphere CNS 기능 때문에 vSphere Client에서 이 볼륨과 관련된 Kubernetes 정보의 많은 부분을 볼 수 있으며, 이전에 이 블로그에서 여러 번 언급했었습니다. 다만 TKG가 사용하는 CSI 드라이버가 CNS 기능과 어떻게 통합되는지 강조하기 위해 여기에 다시 추가하고 싶었다.

vSAN File Service의 File Share에도 볼륨이 표시된다:

마지막 단계는 동일한 RWX PV에 대한 액세스를 공유할 수 있다는 것을 보여주기 위해 두 개의 Pod를 배치한다.

cormac@cormac-tkgm:~$ cat file-pod-a.yaml
apiVersion: v1
kind: Pod
metadata:
  name: file-pod-a
spec:
  containers:
  - name: file-pod-a
    image: "cormac-tkgm.corinternal.com/library/busybox"
    volumeMounts:
    - name: file-vol
      mountPath: "/mnt/volume1"
    command: [ "sleep", "1000000" ]
  volumes:
    - name: file-vol
      persistentVolumeClaim:
        claimName: file-pvc-demo-5g


cormac@cormac-tkgm:~$ cat file-pod-b.yaml
apiVersion: v1
kind: Pod
metadata:
  name: file-pod-b
spec:
  containers:
  - name: file-pod-b
    image: "cormac-tkgm.corinternal.com/library/busybox"
    volumeMounts:
    - name: file-vol
      mountPath: "/mnt/volume1"
    command: [ "sleep", "1000000" ]
  volumes:
    - name: file-vol
      persistentVolumeClaim:
        claimName: file-pvc-demo-5g


cormac@cormac-tkgm:~$ kubectl apply -f file-pod-a.yaml
pod/file-pod-a created


cormac@cormac-tkgm:~$ kubectl apply -f file-pod-b.yaml
pod/file-pod-b created


cormac@cormac-tkgm:~$ kubectl get pods
NAME         READY   STATUS              RESTARTS   AGE
file-pod-a   1/1     Running             0          9s
file-pod-b   0/1     ContainerCreating   0          4s


cormac@cormac-tkgm:~$ kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
file-pod-a   1/1     Running   0          36s
file-pod-b   1/1     Running   0          31s

그리고 CNS로 돌아가면 Kubernetes objects에서 PV와 연결된 두 개의 포드(Pod)를 볼 수 있다.

따라서, TKG의 멀티 클라우드 버전과 함께 read-write-many의 컨테이너 볼륨에 vSAN 파일 서비스를 사용할 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like
Read More

VMware Tanzu Kubernetes Grid 1.2

VMware Tanzu Kubernetes Grid는 최종 사용자 워크로드 및 에코시스템 통합을 위한 일관되고, 업스트림 호환, 지역 쿠버네티스 서브스트레이트(substrate)를 조직에…