10.17. 가상 머신 복제
10.17.1. 네임스페이스 간에 데이터 볼륨을 복제할 수 있는 사용자 권한 활성화
네임스페이스의 격리 특성으로 인해 기본적으로 사용자는 다른 네임스페이스에 리소스를 복제할 수 없습니다.
사용자가 가상 머신을 다른 네임스페이스에 복제할 수 있도록 하려면 cluster-admin
역할의 사용자가 새 클러스터 역할을 만들어야 합니다. 이 클러스터 역할을 사용자에게 바인딩하면 사용자가 가상 머신을 대상 네임스페이스에 복제할 수 있습니다.
10.17.1.1. 사전 요구 사항
-
cluster-admin
역할의 사용자만 클러스터 역할을 생성할 수 있습니다.
10.17.1.2. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 독립 실행형 리소스로 데이터 볼륨을 생성하거나 VM(가상 머신) 사양의 dataVolumeTemplate
필드를 사용하여 생성할 수 있습니다.
-
독립 실행형 데이터 볼륨을 사용하여 준비된 VM 디스크 PVC는 VM에서 독립 라이프사이클을 유지합니다. VM 사양에서
dataVolumeTemplate
필드를 사용하여 PVC를 준비하는 경우 PVC는 VM과 동일한 라이프사이클을 공유합니다.
10.17.1.3. 데이터 볼륨 복제를 위한 RBAC 리소스 생성
datavolumes
리소스에 대한 모든 작업 권한을 활성화하는 새 클러스터 역할을 만듭니다.
절차
ClusterRole
매니페스트를 만듭니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <datavolume-cloner> 1 rules: - apiGroups: ["cdi.kubevirt.io"] resources: ["datavolumes/source"] verbs: ["*"]
- 1
- 클러스터 역할의 고유 이름입니다.
클러스터에 클러스터 역할을 만듭니다.
$ oc create -f <datavolume-cloner.yaml> 1
- 1
- 이전 단계에서 만든
ClusterRole
매니페스트 파일 이름입니다.
소스 및 대상 네임스페이스 모두에 적용되고 이전 단계에서 만든 클러스터 역할을 참조하는
RoleBinding
매니페스트를 만듭니다.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: <allow-clone-to-user> 1 namespace: <Source namespace> 2 subjects: - kind: ServiceAccount name: default namespace: <Destination namespace> 3 roleRef: kind: ClusterRole name: datavolume-cloner 4 apiGroup: rbac.authorization.k8s.io
클러스터에 역할 바인딩을 만듭니다.
$ oc create -f <datavolume-cloner.yaml> 1
- 1
- 이전 단계에서 만든
RoleBinding
매니페스트 파일 이름입니다.
10.17.2. 가상 머신 디스크를 새 데이터 볼륨으로 복제
데이터 볼륨 구성 파일에서 소스 PVC(영구 볼륨 클레임)를 참조하여 가상 머신 디스크의 PVC를 새 데이터 볼륨으로 복제할 수 있습니다.
volumeMode: Block
이 있는 PV(영구 볼륨)에서 volumeMode: Filesystem
인 PV로 복제하는 등 다양한 볼륨 모드 간 작업 복제가 지원됩니다.
그러나 contentType: kubevirt
인 경우에만 다양한 볼륨 모드 간에 복제할 수 있습니다.
사전 할당을 활성화하거나 단일 데이터 볼륨에 대해 복제 중에 디스크 공간을 사전 할당하는 경우 CDI(Containerized Data Importer)가 디스크 공간을 사전 할당합니다. 사전 할당을 통해 쓰기 성능이 향상됩니다. 자세한 내용은 데이터 볼륨에 대한 사전 할당 사용을 참조하십시오.
10.17.2.1. 사전 요구 사항
- 사용자는 가상 머신 디스크의 PVC를 다른 네임스페이스에 복제하려면 추가 권한이 필요합니다.
10.17.2.2. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 독립 실행형 리소스로 데이터 볼륨을 생성하거나 VM(가상 머신) 사양의 dataVolumeTemplate
필드를 사용하여 생성할 수 있습니다.
-
독립 실행형 데이터 볼륨을 사용하여 준비된 VM 디스크 PVC는 VM에서 독립 라이프사이클을 유지합니다. VM 사양에서
dataVolumeTemplate
필드를 사용하여 PVC를 준비하는 경우 PVC는 VM과 동일한 라이프사이클을 공유합니다.
10.17.2.3. 가상 머신 디스크의 영구 볼륨 클레임을 새 데이터 볼륨으로 복제
기존 가상 머신 디스크의 PVC(영구 볼륨 클레임)를 새 데이터 볼륨으로 복제할 수 있습니다. 그러면 새 데이터 볼륨을 새 가상 머신에 사용할 수 있습니다.
데이터 볼륨이 가상 머신과 독립적으로 생성되는 경우 데이터 볼륨의 라이프사이클은 가상 머신과 독립적입니다. 가상 머신이 삭제되어도 데이터 볼륨이나 연결된 PVC가 삭제되지 않습니다.
사전 요구 사항
- 사용할 기존 가상 머신 디스크의 PVC를 결정합니다. PVC와 연결된 가상 머신의 전원을 꺼야 복제할 수 있습니다.
-
OpenShift CLI(
oc
)를 설치합니다.
절차
- 복제하려는 가상 머신 디스크를 검사하여 연결된 PVC의 이름과 네임스페이스를 확인합니다.
데이터 볼륨에 대해 새 데이터 볼륨의 이름, 소스 PVC의 이름과 네임스페이스, 새 데이터 볼륨의 크기를 지정하는 YAML 파일을 생성합니다.
예를 들면 다음과 같습니다.
apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <cloner-datavolume> 1 spec: source: pvc: namespace: "<source-namespace>" 2 name: "<my-favorite-vm-disk>" 3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 4
데이터 볼륨을 생성하여 PVC 복제를 시작합니다.
$ oc create -f <cloner-datavolume>.yaml
참고데이터 볼륨이 있으면 PVC가 준비될 때까지 가상 머신이 시작되지 않으므로 PVC가 복제되는 동안 새 데이터 볼륨을 참조하는 가상 머신을 생성할 수 있습니다.
10.17.2.4. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요
10.17.3. 데이터 볼륨 템플릿을 사용하여 가상 머신 복제
기존 VM의 PVC(영구 볼륨 클레임)를 복제하여 새 가상 머신을 생성할 수 있습니다. 가상 머신 구성 파일에 dataVolumeTemplate
을 포함하여 원래 PVC에서 새 데이터 볼륨을 생성합니다.
volumeMode: Block
이 있는 PV(영구 볼륨)에서 volumeMode: Filesystem
인 PV로 복제하는 등 다양한 볼륨 모드 간 작업 복제가 지원됩니다.
그러나 contentType: kubevirt
인 경우에만 다양한 볼륨 모드 간에 복제할 수 있습니다.
사전 할당을 활성화하거나 단일 데이터 볼륨에 대해 복제 중에 디스크 공간을 사전 할당하는 경우 CDI(Containerized Data Importer)가 디스크 공간을 사전 할당합니다. 사전 할당을 통해 쓰기 성능이 향상됩니다. 자세한 내용은 데이터 볼륨에 대한 사전 할당 사용을 참조하십시오.
10.17.3.1. 사전 요구 사항
- 사용자는 가상 머신 디스크의 PVC를 다른 네임스페이스에 복제하려면 추가 권한이 필요합니다.
10.17.3.2. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 독립 실행형 리소스로 데이터 볼륨을 생성하거나 VM(가상 머신) 사양의 dataVolumeTemplate
필드를 사용하여 생성할 수 있습니다.
-
독립 실행형 데이터 볼륨을 사용하여 준비된 VM 디스크 PVC는 VM에서 독립 라이프사이클을 유지합니다. VM 사양에서
dataVolumeTemplate
필드를 사용하여 PVC를 준비하는 경우 PVC는 VM과 동일한 라이프사이클을 공유합니다.
10.17.3.3. 데이터 볼륨 템플릿을 사용하여 복제된 영구 볼륨 클레임에서 새 가상 머신 생성
기존 가상 머신의 PVC(영구 볼륨 클레임)를 데이터 볼륨에 복제하는 가상 머신을 생성할 수 있습니다. 가상 머신 매니페스트에서 dataVolumeTemplate
을 참조하면 source
PVC가 데이터 볼륨에 복제되어 가상 머신 생성에 자동으로 사용됩니다.
데이터 볼륨이 가상 머신의 데이터 볼륨 템플릿의 일부로 생성되면 데이터 볼륨의 라이프사이클이 가상 머신에 따라 달라집니다. 가상 머신이 삭제되면 데이터 볼륨 및 연결된 PVC도 삭제됩니다.
사전 요구 사항
- 사용할 기존 가상 머신 디스크의 PVC를 결정합니다. PVC와 연결된 가상 머신의 전원을 꺼야 복제할 수 있습니다.
-
OpenShift CLI(
oc
)를 설치합니다.
절차
- 복제하려는 가상 머신을 검사하여 연결된 PVC의 이름과 네임스페이스를 확인합니다.
VirtualMachine
오브젝트에 대한 YAML 파일을 만듭니다. 다음 가상 머신 예제에서는source-namespace
네임스페이스에 있는my-favorite-vm-disk
를 복제합니다.favorite-clone
이라는2Gi
데이터 볼륨이my-favorite-vm-disk
에서 생성됩니다.예를 들면 다음과 같습니다.
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm-dv-clone name: vm-dv-clone 1 spec: running: false template: metadata: labels: kubevirt.io/vm: vm-dv-clone spec: domain: devices: disks: - disk: bus: virtio name: root-disk resources: requests: memory: 64M volumes: - dataVolume: name: favorite-clone name: root-disk dataVolumeTemplates: - metadata: name: favorite-clone spec: storage: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi source: pvc: namespace: "source-namespace" name: "my-favorite-vm-disk"
- 1
- 생성할 가상 머신입니다.
PVC 복제 데이터 볼륨으로 가상 머신을 생성합니다.
$ oc create -f <vm-clone-datavolumetemplate>.yaml
10.17.3.4. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요
10.17.4. 가상 머신 디스크를 새 블록 스토리지 영구 볼륨 클레임에 복제
복제 대상 데이터 볼륨 구성 파일에서 소스 PVC(영구 볼륨 클레임)를 참조하여 가상 머신 디스크의 PVC를 새 블록 PVC로 복제할 수 있습니다.
volumeMode: Block
이 있는 PV(영구 볼륨)에서 volumeMode: Filesystem
인 PV로 복제하는 등 다양한 볼륨 모드 간 작업 복제가 지원됩니다.
그러나 contentType: kubevirt
인 경우에만 다양한 볼륨 모드 간에 복제할 수 있습니다.
사전 할당을 활성화하거나 단일 데이터 볼륨에 대해 복제 중에 디스크 공간을 사전 할당하는 경우 CDI(Containerized Data Importer)가 디스크 공간을 사전 할당합니다. 사전 할당을 통해 쓰기 성능이 향상됩니다. 자세한 내용은 데이터 볼륨에 대한 사전 할당 사용을 참조하십시오.
10.17.4.1. 사전 요구 사항
- 사용자는 가상 머신 디스크의 PVC를 다른 네임스페이스에 복제하려면 추가 권한이 필요합니다.
10.17.4.2. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 독립 실행형 리소스로 데이터 볼륨을 생성하거나 VM(가상 머신) 사양의 dataVolumeTemplate
필드를 사용하여 생성할 수 있습니다.
-
독립 실행형 데이터 볼륨을 사용하여 준비된 VM 디스크 PVC는 VM에서 독립 라이프사이클을 유지합니다. VM 사양에서
dataVolumeTemplate
필드를 사용하여 PVC를 준비하는 경우 PVC는 VM과 동일한 라이프사이클을 공유합니다.
10.17.4.3. 블록 영구 볼륨 정보
PV(블록 영구 볼륨)는 원시 블록 장치에서 지원하는 PV입니다. 이러한 볼륨은 파일 시스템이 없으며 오버헤드를 줄여 가상 머신의 성능을 향상시킬 수 있습니다.
원시 블록 볼륨은 PV 및 PVC(영구 볼륨 클레임) 사양에 volumeMode:Block
을 지정하여 프로비저닝합니다.
10.17.4.4. 로컬 블록 영구 볼륨 생성
데이터 볼륨이 있는 블록 스토리지로 가상 머신 이미지를 가져오려면 사용 가능한 로컬 블록 영구 볼륨이 있어야 합니다.
파일을 채우고 루프 장치로 마운트하여 노드에 로컬 블록 PV(영구 볼륨)를 생성합니다. 그런 다음 PV 매니페스트에서 이 루프 장치를 Block
볼륨으로 참조하고 가상 머신 이미지의 블록 장치로 사용할 수 있습니다.
절차
-
로컬 PV를 생성할 노드에
root
로 로그인합니다. 이 절차에서는 예제로node01
을 사용합니다. 블록 장치로 사용할 수 있도록 파일을 생성하고 null 문자로 채웁니다. 다음 예제에서는 크기가 2Gb(20X100Mb 블록)인 파일
loop10
을 생성합니다.$ dd if=/dev/zero of=<loop10> bs=100M count=20
loop10
파일을 루프 장치로 마운트합니다.$ losetup </dev/loop10>d3 <loop10> 1 2
마운트된 루프 장치를 참조하는
PersistentVolume
매니페스트를 생성합니다.kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
블록 PV를 생성합니다.
# oc create -f <local-block-pv10.yaml>1
- 1
- 이전 단계에서 생성한 영구 볼륨의 파일 이름입니다.
10.17.4.5. 가상 머신 디스크의 영구 볼륨 클레임을 새 데이터 볼륨으로 복제
기존 가상 머신 디스크의 PVC(영구 볼륨 클레임)를 새 데이터 볼륨으로 복제할 수 있습니다. 그러면 새 데이터 볼륨을 새 가상 머신에 사용할 수 있습니다.
데이터 볼륨이 가상 머신과 독립적으로 생성되는 경우 데이터 볼륨의 라이프사이클은 가상 머신과 독립적입니다. 가상 머신이 삭제되어도 데이터 볼륨이나 연결된 PVC가 삭제되지 않습니다.
사전 요구 사항
- 사용할 기존 가상 머신 디스크의 PVC를 결정합니다. PVC와 연결된 가상 머신의 전원을 꺼야 복제할 수 있습니다.
-
OpenShift CLI(
oc
)를 설치합니다. - 소스 PVC와 크기가 같거나 더 큰 블록 PV(영구 볼륨)가 한 개 이상 사용 가능합니다.
절차
- 복제하려는 가상 머신 디스크를 검사하여 연결된 PVC의 이름과 네임스페이스를 확인합니다.
데이터 볼륨에 대해 새 데이터 볼륨의 이름, 소스 PVC의 이름과 네임스페이스, 사용 가능한 블록 PV를 사용하도록 하는
volumeMode: Block
, 새 데이터 볼륨의 크기를 지정하는 YAML 파일을 생성합니다.예를 들면 다음과 같습니다.
apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <cloner-datavolume> 1 spec: source: pvc: namespace: "<source-namespace>" 2 name: "<my-favorite-vm-disk>" 3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 4 volumeMode: Block 5
데이터 볼륨을 생성하여 PVC 복제를 시작합니다.
$ oc create -f <cloner-datavolume>.yaml
참고데이터 볼륨이 있으면 PVC가 준비될 때까지 가상 머신이 시작되지 않으므로 PVC가 복제되는 동안 새 데이터 볼륨을 참조하는 가상 머신을 생성할 수 있습니다.
10.17.4.6. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요