블록 스토리지 CSI Provisioner 설정
클러스터에서 영구 볼륨을 사용하려면 스토리지와 PersistentVolume 객체를 구성해야 합니다. Kubernetes Engine에서는 CSI(Container Storage Interface) Provisioner를 사용해 카카오클라우드 Block Storage를 영구 볼륨으로 연결할 수 있습니다.
CSI Provisioner를 설정하면 PersistentVolumeClaim을 생성하여 영구 볼륨을 동적으로 프로비저닝할 수 있습니다. CSI Provisioner를 배포하고 동적 프로비저닝을 확인하는 방법은 다음과 같습니다.
Bare Metal Server 유형의 노드 풀은 CSI Provisioner를 지원하지 않습니다.
사전 작업
CSI Provisioner를 설정하기 위해서는 다음의 사전 작업이 필요합니다. 본 사전 작업은 클러스터당 한 번만 진행합니다.
-
PV를 동적 배포할 클러스터를 생성합니다.(클러스터 생성 문서 참고)
-
생성한 클러스터에 PV 동적 배포 명령을 보내기 위한 kubectl 제어 설정을 수행합니다.
Step 1. Dynamic Volume Provisioning 설정
PVC(PersistentVolumeClaim)를 통한 Persistent Volume 동적 프로비저닝을 위해 카카오클라우드의 CSI Provisioner를 배포합니다.
다음 두 가지 방법 중 하나를 선택하여 CSI Provisioner를 배포합니다.
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 설정하기 전, Helm client를 설치합니다. 운영체제별 Helm 설치에 대한 자세한 설명은 Helm 공식 문서 > 헬름 설치하기를 참고하시기 바랍니다.
-
다음의 명령어를 실행하여 공식 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!⎈ -
다음의 명령어를 터미널에 입력하여 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.
Step 2. CSI Provisioner 배포 확인
CSI Provisioner를 배포한 후, 리소스가 잘 생성되었는지 확인하기 위해 다음의 명령어를 실행합니다.
kubectl --kubeconfig=$KUBE_CONFIG 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 생성 확인
-
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-deletePVC 배포 명령어kubectl --kubeconfig=$KUBE_CONFIG apply -f pvc-test.yaml -
PVC(PersistentVolumeClaim) 에 맞게 PV(PersistentVolume) 가 동적으로 생성된 것을 확인할 수 있습니다.
PV, PVC 상태 확인 명령어kubectl --kubeconfig=$KUBE_CONFIG 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를 사용하는 파드를 배포하는 예제입니다.
-
파드를 생성하기 위한 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파드 배포 명령어kubectl --kubeconfig=$KUBE_CONFIG apply -f task-pv-pod.yaml -
다음의 명령어를 실행하여 PV가 파드에 잘 마운트 되었는지 확인합니다.
파드 확인 명령어kubectl --kubeconfig=$KUBE_CONFIG get pods // 파드 확인
kubectl --kubeconfig=$KUBE_CONFIG 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 -
정상적으로 파드가 생성되어 PV에 마운트 되었음을 확인할 수 있습니다.