Block Storage CSI 드라이버 설정하기

페이지 이동경로

블록 스토리지 CSI Provisioner 설정하기

클러스터에서 영구 볼륨을 사용하기 위해 일반적으로 스토리지와 PersistentVolume 객체를 직접 구성해야 합니다. Kubernetes Engine에서는 CSI(Container Storage Interface) Provisioner를 설정하여 카카오 i 클라우드 Block storage를 영구 볼륨으로 사용할 수 있습니다. 클러스터에 CSI Provisioner를 설정하면, 간단하게 PersistentVolumeClaim 을 생성하여 영구 볼륨을 생성할 수 있습니다.
CSI Provisioner를 설정하는 방법은 다음과 같습니다.

Step 1. 사전 작업하기

CSI Provisioner를 설정하기 위해서는 다음의 사전 작업이 필요합니다. 본 사전 작업은 클러스터당 한 번만 진행합니다.

  1. PV를 동적 배포할 클러스터를 생성합니다.
    • 클러스터 생성에 대한 자세한 설명은 클러스터 만들기 문서를 참고하시기 바랍니다.
  2. 생성한 클러스터에 PV 동적 배포 명령을 보내기 위한 kubectl 제어를 설정합니다.

Step 2. Dynamic Volume Provisioning 설정하기

PVC(PersistentVolumeClaim)P를 통한 PPersistent VolumeP 동적 프로비저닝 설정을 위해 Kakao i Cloud의 CSI Provisioner를 배포합니다. YAML 파일 또는 Helm을 사용하여 배포할 수 있습니다

YAML 파일로 CSI Provisioner 배포

다음의 명령어를 터미널에 입력하여 CSI Provisioner를 설치합니다.

코드 예제 배포 진행 명령어

kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/kakaoicloud-guide/kubernetes-engine/main/guide-samples/dynamicPV/cinder-csi.yaml

Helm을 사용하여 CSI Provisioner 배포

쿠버네티스 패키지 관리 도구인 Helm을 사용하여 Dynamic Volume Provisioning 설정합니다.

  1. Dynamic Volume Provisioning 설정하기 전, Helm client를 설치합니다. 운영체제별 Helm 설치에 대한 자세한 설명은 Helm 공식 문서 > 헬름 설치하기를 참고하시기 바랍니다.

  2. 다음의 명령어를 실행하여 공식 Helm chart repository를 먼저 추가합니다.

    코드 예제 Helm chart repository 추가 명령어

    $ helm repo add cpo https://kubernetes.github.io/cloud-provider-openstack
       
    "cpo" has been added to your repositories
       
    $ helm repo update
       
    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "cpo" chart repository
    Update Complete. ⎈Happy Helming!⎈
    
  3. 다음의 명령어를 터미널에 입력하여 CSI Provisioner를 클러스터에 배포합니다.
    • CSI Provisioner에 대한 네임스페이스와 서비스 등 리소스들이 한번에 배포됩니다.

    코드 예제 Helm CSI Provisioner 배포 명령어

    $ helm install cinder-csi cpo/openstack-cinder-csi \
        --version 2.3.0 \
        --set secret.enabled=true \
        --set secret.name=cloud-config \
        --namespace kube-system
    NAME: cinder-csi
    LAST DEPLOYED: Mon Mar 13 14:05:04 2023
    NAMESPACE: kube-system
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    Use the following storageClass csi-cinder-sc-retain and csi-cinder-sc-delete only for RWO volumes.
    
  4. CSI Provisioner를 배포한 후, 리소스가 잘 생성되었는지 확인하기 위해 다음의 명령어를 실행합니다.

    코드 예제 리소스 확인 명령어

    $ kubectl get ds,deploy -n kube-system
    

    코드 예제 실행 결과

    NAME                                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    daemonset.apps/openstack-cinder-csi-nodeplugin   1         1         1       1            1           <none>                   3m5s
    NAME                                                    READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/openstack-cinder-csi-controllerplugin   1/1     1            1           3m5s
    

Step 3. PersistentVolume 동적 프로비저닝 테스트하기

PVC(PersistentVolumeClaim)를 적용해서 PV(PersistentVolume)가 동적으로 생성되는 것을 확인하고, 파드에 연결하는 테스트를 수행합니다.

PVC 적용 및 PV 생성 확인

  1. PVC(PersistentVolumeClaim)를 생성하기 위하여 아래 YAML을 배포합니다.

    코드 예제 PVC 생성 예제 파일

    # pvc-test.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-test
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: csi-cinder-sc-delete
    
  2. PPVC(PersistentVolumeClaim)P에 맞게 PPV(PersistentVolume)P가 동적으로 생성된 것을 확인할 수 있습니다.

    코드 예제 PV, PVC 상태 확인 명령어

    $ kubectl get pv,pvc // PV, PVC 확인
    

    코드 예제 실행 결과

    NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS           REASON   AGE
    persistentvolume/pvc-c2456546-ddc2-4bd6-9d79-35f6ba53e7fc   10Gi       RWO            Delete           Bound    default/pvc-test      csi-cinder-sc-delete            16s
       
    NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
    persistentvolumeclaim/pvc-test   Bound    pvc-c2456546-ddc2-4bd6-9d79-35f6ba53e7fc   10Gi       RWO            csi-cinder-sc-delete   16s
    

PVC를 사용하는 파드 생성

앞에서 생성한 PV를 사용하는 파드를 배포하는 예제입니다.

  1. 파드를 생성하기 위한 YAML을 배포합니다.

    코드 예제 파드 배포 예제 파일

    # task-pv-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: task-pv-pod
    spec:
      volumes:
        - name: task-pv-storage
          persistentVolumeClaim:
            claimName: pvc-test
      containers:
        - name: task-pv-container
          image: nginx
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              name: task-pv-storage
    
  2. 다음의 명령어를 실행하여 PV가 파드에 잘 마운트 되었는지 확인합니다.

    코드 예제 파드 확인 명령어

    $ kubectl get pods   // 파드 확인 
    $ kubectl exec -ti task-pv-pod -- df -h   // 조회한 파드의 컨테이너를 조회
    

    코드 예제 실행 결과

    NAME          READY   STATUS    RESTARTS   AGE
    task-pv-pod   1/1     Running   0          53s
       
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb        9.8G   24K  9.8G   1% /usr/share/nginx/html
    
  3. 정상적으로 파드가 생성되어 PV에 마운트 되었음을 확인할 수 있습니다.