1.6.4 Kubernetes Volume Clone 만들기
운영에 영향 없이 Volume 복제본을 만들어 테스트가 필요한 경우처림, 사용중인 Persistent Volume을 복제하여 사용할 필요가 있을 때 사용할 수 있습니다.
Block Volume Clone 사용 전제조건
- OKE 클러스터 Control Plane의 쿠버네티스 버전은 1.25 이상
- Worker Node가 AMD 또는 Arm 기반이어야 함
- Worker Node는 Oracle Linux 7 또는 Oracle Linux 8
- CSI volume plugin(여, oct-bv StorageClass)를 사용하여 이미 OCI Block Volume과 바인딩된 Persistent Volume이 있어야 함
테스트 환경 준비
1.6.1 Block Volume 사용하기에서 Block Volume을 사용하여, Persistent Volume을 구성한 예제를 그대로 사용합니다.
현재 상태를 조회하면 다음과 같습니다.
- CSI Volume Plugin을 통해 제공하는 기능으로 반드시 oci-bv StorageClass를 사용하는 Persistent Volume 이어야 합니다.
- /usr/share/nginx/html 폴더가 PV를 마운트하고 있습니다.
- 마운트된 폴더에 파일 쓰기를 한 상태로 이후 실습에서 해당내용이 복구되는 지 확인할 예정
$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-bvs-pvc Bound csi-5385a65d-0cb8-4c65-9f6e-c65e70b997d3 50Gi RWO oci-bv 98s $ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-bvs-pvc-549db9449b-gbnf8 1/1 Running 0 95s $ kubectl exec -it nginx-bvs-pvc-549db9449b-gbnf8 -- cat /usr/share/nginx/html/hello_world.txt Hello PV
기존 Block Volume을 복제하는 새 PVC 만들기
아래와 같이 PV 요청 yaml을 사용하여 요청합니다. dataSource에서 기존 PVC를 지정합니다.
# my-clone-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-clone-pvc spec: storageClassName: "oci-bv" accessModes: - ReadWriteOnce resources: requests: storage: 50Gi dataSource: kind: PersistentVolumeClaim name: csi-bvs-pvc
- dataSource.kind: PersistentVolumeClaim
- dataSource.name: 복제할 원본 PVC 이름을 입력
PVC를 생성합니다.
kubectl apply -f my-clone-pvc.yaml
테스트 앱 복구용 YAML 작성
- 테스트앱에서 persistentVolumeClaim.claimName을 my-clone-pvc로 지정합니다.
# nginx-deployment-bvs-pvc-from-clone-pvc.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-bvs-from-clone-pvc name: nginx-bvs-from-clone-pvc spec: replicas: 1 selector: matchLabels: app: nginx-bvs-from-clone-pvc template: metadata: labels: app: nginx-bvs-from-clone-pvc spec: containers: - name: nginx image: nginx:latest volumeMounts: - name: data mountPath: /usr/share/nginx/html volumes: - name: data persistentVolumeClaim: claimName: my-clone-pvc
테스트앱 배포
- 테스트 앱에 배포되면, 앞선 PVC에 바인딩되는 Persistent Volume이 만들어 지면서 새 Block Volume이 생성됩니다.
kubectl apply -f nginx-deployment-bvs-pvc-from-clone-pvc.yaml
복제된 PVC, PV가 생성되었습니다.
$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-bvs-pvc Bound csi-5385a65d-0cb8-4c65-9f6e-c65e70b997d3 50Gi RWO oci-bv 21m my-clone-pvc Bound csi-efe229e2-02a2-402f-b422-fdde520146c4 50Gi RWO oci-bv 13m $ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE csi-5385a65d-0cb8-4c65-9f6e-c65e70b997d3 50Gi RWO Delete Bound default/csi-bvs-pvc oci-bv 21m csi-efe229e2-02a2-402f-b422-fdde520146c4 50Gi RWO Delete Bound default/my-clone-pvc oci-bv 3m35s
복제된 PV를 사용하는 앱에서 파일 내용을 확인해 보면, 복제가 잘 된 것을 알 수 있습니다.
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-bvs-from-clone-pvc-7f6fd8dfbb-mr88f 1/1 Running 0 4m42s nginx-bvs-pvc-549db9449b-gbnf8 1/1 Running 0 22m donghee_le@cloudshell:tmp (ap-chuncheon-1)$ kubectl exec -it nginx-bvs-from-clone-pvc-7f6fd8dfbb-mr88f -- cat /usr/share/nginx/html/hello_world.txt Hello PV
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.