CSI 볼륨 클로닝

CSI 볼륨 클로닝 (CSI Volume Cloning)

이 문서는 Kubernetes에서 기존 CSI 볼륨을 클로닝하는 개념을 설명해요. 볼륨(Volumes)에 대한 사전 지식을 권장해요.

소개

CSI 볼륨 클로닝 기능은 기존 PVCdataSource 필드에 지정해서 볼륨(Volume)을 클로닝하고자 한다는 것을 나타낼 수 있게 해 줘요.

클론(Clone)은 기존 Kubernetes 볼륨의 사본으로 정의되며, 표준 볼륨처럼 소비될 수 있어요. 유일한 차이는 프로비저닝 시 "새로운" 빈 볼륨을 만드는 대신 백엔드 장치가 지정된 볼륨의 정확한 사본을 만든다는 점이에요.

Kubernetes API 관점에서 클로닝의 구현은 새 PVC 생성 중에 기존 PVC를 dataSource로 지정하는 능력을 추가해요. 소스 PVC는 바인딩되고 사용 가능해야 해요(사용 중이 아니어야 함).

이 기능을 사용할 때 사용자가 알아야 할 사항을 볼게요.

  • 클로닝 지원(VolumePVCDataSource)은 CSI 드라이버에서만 사용할 수 있어요.
  • 클로닝 지원은 동적 프로비저너(dynamic provisioner)에서만 사용할 수 있어요.
  • CSI 드라이버가 볼륨 클로닝 기능을 구현했을 수도 있고 아닐 수도 있어요.
  • 소스와 대상이 같은 네임스페이스에 있을 때만 PVC를 클로닝할 수 있어요(소스와 대상은 같은 네임스페이스에 있어야 해요).
  • 클로닝은 다른 Storage Class로 지원돼요.
    • 대상 볼륨은 소스와 같거나 다른 스토리지 클래스일 수 있어요.
    • 기본 스토리지 클래스를 사용할 수 있고 스펙에서 storageClassName을 생략할 수 있어요.
  • 클로닝은 같은 VolumeMode 설정을 사용하는 두 볼륨 사이에서만 수행할 수 있어요(블록 모드 볼륨을 요청하면 소스도 반드시 블록 모드여야 해요).

프로비저닝

클론은 같은 네임스페이스의 기존 PVC를 참조하는 dataSource를 추가한다는 점을 제외하면 다른 PVC처럼 프로비저닝돼요.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: clone-of-pvc-1
    namespace: myns
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: cloning
  resources:
    requests:
      storage: 5Gi
  dataSource:
    kind: PersistentVolumeClaim
    name: pvc-1

참고:

spec.resources.requests.storage에 용량 값을 지정해야 하며, 지정하는 값은 소스 볼륨의 용량보다 같거나 커야 해요.

결과는 clone-of-pvc-1이라는 이름의 새 PVC로, 지정된 소스 pvc-1과 정확히 같은 내용을 가져요.

사용

새 PVC를 사용할 수 있게 되면 클론된 PVC는 다른 PVC와 동일하게 소비돼요. 이 시점에 새로 생성된 PVC는 독립적인 객체로 기대돼요. 원래 dataSource PVC를 고려하지 않고 독립적으로 소비, 클로닝, 스냅샷, 삭제될 수 있어요. 이는 소스가 새로 생성된 클론과 어떤 방식으로도 연결되지 않는다는 뜻이기도 해요. 소스는 새로 생성된 클론에 영향을 주지 않고 수정되거나 삭제될 수도 있어요.