블록 스토리지 CSI Provisioner 설정
클러스터에서 영구 볼륨을 사용하기 위해 일반적으로 스토리지와 PersistentVolume 객체를 직접 구성해야 합니다. Kubernetes Engine에서는 CSI(Container Storage Interface) Provisioner를 설정하여 카카오클라우드 Block storage를 영구 볼륨으로 사용할 수 있습니다. 클러스터에 CSI Provisioner를 설정하면, 간단하게 PersistentVolumeClaim 을 생성하여 영구 볼륨을 생성할 수 있습니다.
CSI Provisioner를 설정하는 방법은 다음과 같습니다.
Bare Metal Server 유형의 노드 풀은 CSI Provisioner를 지원하지 않습니다.
Step 1. 사전 작업하기
CSI Provisioner를 설정하기 위해서는 다음의 사전 작업이 필요합니다. 본 사전 작업은 클러스터당 한 번만 진행합니다.
-
PV를 동적 배포할 클러스터를 생성합니다.(클러스터 생성 문서 참고)
-
생성한 클러스터에 PV 동적 배포 명령을 보내기 위한 kubectl 제어 설정을 수행합니다.
Step 2. Dynamic Volume Provisioning 설정하기
PVC(PersistentVolumeClaim)를 통한 Persistent Volume 동적 프로비저닝 설정을 위해 카카오클라우드의 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 설정합니다.
-
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 3. 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 4. 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에 마운트 되었음을 확인할 수 있습니다.