5.5. CSI 볼륨 복제
볼륨 복제는 OpenShift Container Platform의 데이터 손실을 방지하기 위해 기존 영구 볼륨을 중복합니다. 이 기능은 지원되는 CSI(Container Storage Interface) 드라이버에서만 사용할 수 있습니다. CSI 볼륨 복제를 프로비저닝하기 전에 영구 볼륨에 대해 잘 알고 있어야 합니다.
5.5.1. CSI 볼륨 복제 개요
CSI(Container Storage Interface) 볼륨 복제는 특정 시점에서 기존 영구 볼륨이 복제됩니다.
볼륨 복제는 볼륨 스냅샷과 유사하지만 더 효율적으로 사용할 수 있습니다. 예를 들어, 클러스터 관리자는 기존 클러스터 볼륨의 다른 인스턴스를 생성하여 클러스터 볼륨을 복제할 수 있습니다.
복제는 새 빈 볼륨을 생성하지 않고 백엔드 장치에서 지정된 볼륨을 정확하게 복제합니다. 동적 프로비저닝 후 모든 표준 볼륨을 사용하는 것처럼 볼륨 복제를 사용할 수 있습니다.
복제에는 새 API 오브젝트가 필요하지 않습니다. PersistentVolumeClaim
오브젝트의 기존 dataSource
필드가 동일한 네임스페이스에서 기존 PersistentVolumeClaim의 이름을 허용하도록 확장됩니다.
5.5.1.1. 지원 제한
기본적으로 OpenShift Container Platform은 이러한 제한이 있는 CSI 볼륨 복제를 지원합니다.
- 대상 PVC(영구 볼륨 클레임)는 소스 PVC와 동일한 네임스페이스에 있어야 합니다.
복제는 다른 스토리지 클래스에서 지원됩니다.
- 대상 볼륨은 소스와 다른 스토리지 클래스에 대해 같을 수 있습니다.
-
기본 스토리지 클래스를 사용하고
spec
에서storageClassName
을 생략할 수 있습니다.
- CSI 드라이버에서만 지원을 사용할 수 있습니다. In-tree 및 FlexVolumes는 지원되지 않습니다.
- CSI 드라이버가 볼륨 복제 기능을 구현하지 못할 수 있습니다. 자세한 내용은 CSI 드라이버 설명서를 참조하십시오.
5.5.2. CSI 볼륨 복제 프로비저닝
복제된 PVC(영구 볼륨 클레임) API 오브젝트를 생성할 때 CSI 볼륨 복제 프로비저닝을 트리거합니다. 복제본은 다른 PVC 콘텐츠로 미리 채워져 다른 영구 볼륨과 동일한 규칙으로 구성됩니다. 한 가지 예외는 동일한 네임스페이스에서 기존 PVC를 참조하는 dataSource
를 추가해야 한다는 것입니다.
사전 요구 사항
- 실행 중인 OpenShift Container Platform 클러스터에 로그인되어 있습니다.
- 볼륨 복제를 지원하는 CSI 드라이버를 사용하여 PVC가 생성되었습니다.
- 동적 프로비저닝을 위해 스토리지 백엔드가 구성되어 있습니다. 정적 프로비저너에서는 복제 지원을 사용할 수 없습니다.
절차
기존 PVC에서 PVC를 복제하려면 다음을 수행합니다.
다음 YAML로 설명된
PersistentVolumeClaim
오브젝트를 사용하여 파일을 생성하고 저장합니다.pvc-clone.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-1-clone namespace: mynamespace spec: storageClassName: csi-cloning 1 accessModes: - ReadWriteOnce resources: requests: storage: 5Gi dataSource: kind: PersistentVolumeClaim name: pvc-1
- 1
- 스토리지 백엔드를 프로비저닝하는 스토리지 클래스의 이름입니다. 기본 스토리지 클래스를 사용할 수 있으며
storageClassName
은 사양에서 생략할 수 있습니다.
다음 명령을 실행하여 이전 단계에서 저장한 오브젝트를 생성합니다.
$ oc create -f pvc-clone.yaml
새 PVC
pvc-1-clone
이 생성됩니다.볼륨 복제가 생성되어 다음 명령을 실행하여 준비되었는지 확인합니다.
$ oc get pvc pvc-1-clone
pvc-1-clone
에Bound
로 표시됩니다.이제 새로 복제된 PVC를 사용하여 Pod를 구성할 준비가 되었습니다.
YAML로 설명된
Pod
오브젝트로 파일을 생성하고 저장합니다. 예를 들면 다음과 같습니다.kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: myfrontend image: dockerfile/nginx volumeMounts: - mountPath: "/var/www/html" name: mypd volumes: - name: mypd persistentVolumeClaim: claimName: pvc-1-clone 1
- 1
- CSI 볼륨 복제 작업 중에 생성된 복제 PVC입니다.
생성된
Pod
오브젝트가 원래dataSource
PVC와 독립적으로 복제된 PVC를 사용, 복제, 삭제하거나 그 스냅샷을 생성할 준비가 되었습니다.