9.20. 가상 머신 디스크
9.20.1. 스토리지 기능
다음 표를 사용하여 OpenShift Virtualization의 로컬 및 공유 영구 스토리지에 대한 기능 가용성을 확인합니다.
9.20.1.1. OpenShift Virtualization 스토리지 기능 매트릭스
가상 머신 실시간 마이그레이션 | 호스트 지원 가상 머신 디스크 복제 | 스토리지 지원 가상 머신 디스크 복제 | 가상 머신 스냅샷 | |
---|---|---|---|---|
OpenShift Data Foundation: RBD 블록 모드 볼륨 | 있음 | 있음 | 있음 | 있음 |
OpenShift Virtualization hostpath 프로비전 프로그램 | 아니요 | 있음 | 아니요 | 아니요 |
기타 다중 노드 쓰기 가능 스토리지 | 예 [1] | 있음 | 예 [2] | 예 [2] |
기타 단일 노드 쓰기 가능 스토리지 | 아니요 | 있음 | 예 [2] | 예 [2] |
- PVC에서 ReadWriteMany 액세스 모드를 요청해야 합니다.
- 스토리지 공급자는 Kubernetes 및 CSI Snapshot API를 모두 지원해야 합니다.
다음을 사용하는 가상 머신은 실시간 마이그레이션할 수 없습니다.
- RWO(ReadWriteOnce) 액세스 모드를 사용하는 스토리지 클래스
- GPU와 같은 패스스루 기능
이러한 가상 머신의 경우 evictionStrategy
필드를 LiveMigrate
로 설정하지 않도록 합니다.
9.20.2. 가상 머신 로컬 스토리지 구성
hostpath 프로비전 프로그램(HPP)을 사용하여 가상 머신의 로컬 스토리지를 구성할 수 있습니다.
OpenShift Virtualization Operator를 설치하면 HPP(Hostpath Provisioner) Operator가 자동으로 설치됩니다. HPP는 Hostpath Provisioner Operator가 생성한 OpenShift Virtualization용으로 설계된 로컬 스토리지 프로비전 프로그램입니다. HPP를 사용하려면 HPP 사용자 정의 리소스(CR)를 생성해야 합니다.
9.20.2.1. 기본 스토리지 풀을 사용하여 hostpath 프로비전 프로그램 생성
storagePools
스탠자를 사용하여 HPP CR(사용자 정의 리소스)을 생성하여 기본 스토리지 풀로 hostpath 프로비전 프로그램(HPP)을 구성합니다. 스토리지 풀은 CSI 드라이버에서 사용하는 이름과 경로를 지정합니다.
사전 요구 사항
-
spec.storagePools.path
에 지정된 디렉터리에 읽기/쓰기 액세스 권한이 있어야 합니다. - 스토리지 풀은 운영 체제와 동일한 파티션에 있지 않아야 합니다. 그렇지 않으면 운영 체제 파티션이 용량으로 채워질 수 있으며 성능에 영향을 미치거나 노드를 불안정하게 만들거나 사용할 수 없게 됩니다.
절차
다음 예와 같이
storagePools
스탠자를 사용하여hpp_cr.yaml
파일을 생성합니다.apiVersion: hostpathprovisioner.kubevirt.io/v1beta1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent storagePools: 1 - name: any_name path: "/var/myvolumes" 2 workload: nodeSelector: kubernetes.io/os: linux
- 파일을 저장하고 종료합니다.
다음 명령을 실행하여 HPP를 만듭니다.
$ oc create -f hpp_cr.yaml
9.20.2.1.1. 스토리지 클래스 생성 정보
스토리지 클래스를 생성할 때 해당 스토리지 클래스에 속하는 PV(영구 볼륨)의 동적 프로비저닝에 영향을 주는 매개변수를 설정합니다. StorageClass
오브젝트를 생성한 후에는 이 오브젝트의 매개변수를 업데이트할 수 없습니다.
hostpath 프로비전 프로그램(HPP)을 사용하려면 storagePools
스탠자를 사용하여 CSI 드라이버에 대한 관련 스토리지 클래스를 생성해야 합니다.
가상 머신은 로컬 PV를 기반으로 하는 데이터 볼륨을 사용합니다. 로컬 PV는 특정 노드에 바인딩됩니다. 디스크 이미지는 가상 머신에서 사용할 수 있는 반면 가상 머신은 이전에 로컬 스토리지 PV가 고정된 노드에 예약할 수 없습니다.
이 문제를 해결하려면 Kubernetes Pod 스케줄러를 사용하여 PVC(영구 볼륨 클레임)를 올바른 노드의 PV에 바인딩합니다. volumeBindingMode
매개변수가 WaitForFirstConsumer
로 설정된 StorageClass
값을 사용하면 PVC를 사용하여 Pod를 생성할 때까지 PV의 바인딩 및 프로비저닝이 지연됩니다.
9.20.2.1.2. storagePools 스탠자를 사용하여 CSI 드라이버의 스토리지 클래스 생성
HPP(Hostpath 프로비전 프로그램) CSI 드라이버에 대한 스토리지 클래스 CR(사용자 정의 리소스)을 생성합니다.
절차
storageclass_csi.yaml
파일을 생성하여 스토리지 클래스를 정의합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hostpath-csi provisioner: kubevirt.io.hostpath-provisioner reclaimPolicy: Delete 1 volumeBindingMode: WaitForFirstConsumer 2 parameters: storagePool: my-storage-pool 3
- 1
reclaimPolicy
에 사용할 수 있는 값은Delete
및Retain
두 가지입니다. 값을 지정하지 않으면 기본값은Delete
입니다.- 2
volumeBindingMode
매개변수는 동적 프로비저닝 및 볼륨 바인딩이 발생하는 시기를 결정합니다. PVC(영구 볼륨 클레임)를 사용하는 Pod가 생성될 때까지WaitForFirstConsumer
를 지정하여 PV(영구 볼륨)의 바인딩 및 프로비저닝을 지연합니다. 이렇게 하면 PV에서 Pod의 스케줄링 요구 사항을 충족할 수 있습니다.- 3
- HPP CR에 정의된 스토리지 풀의 이름을 지정합니다.
- 파일을 저장하고 종료합니다.
다음 명령을 실행하여
StorageClass
오브젝트를 만듭니다.$ oc create -f storageclass_csi.yaml
9.20.2.2. PVC 템플릿으로 생성된 스토리지 풀 정보
대용량 영구 볼륨(PV)이 있는 경우 hostpath 프로비전 프로그램(HPP) 사용자 정의 리소스(CR)에 PVC 템플릿을 정의하여 스토리지 풀을 생성할 수 있습니다.
PVC 템플릿으로 생성된 스토리지 풀에는 여러 개의 HPP 볼륨이 포함될 수 있습니다. PV를 작은 볼륨으로 분할하면 데이터 할당에 유연성이 향상됩니다.
PVC 템플릿은 PersistentVolumeClaim
오브젝트의 spec
스탠자를 기반으로 합니다.
PersistentVolumeClaim
오브젝트의 예
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: iso-pvc
spec:
volumeMode: Block 1
storageClassName: my-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
- 1
- 이 값은 블록 볼륨 모드 PV에만 필요합니다.
HPP CR에서 pvcTemplate
사양을 사용하여 스토리지 풀을 정의합니다. Operator는 HPP CSI 드라이버가 포함된 각 노드의 pvcTemplate
사양에서 PVC를 생성합니다. PVC 템플릿에서 생성된 PVC는 하나의 대규모 PV를 사용하므로 HPP에서 더 작은 동적 볼륨을 생성할 수 있습니다.
기본 스토리지 풀을 PVC 템플릿에서 생성한 스토리지 풀과 결합할 수 있습니다.
9.20.2.2.1. PVC 템플릿을 사용하여 스토리지 풀 생성
HPP CR(사용자 정의 리소스)에 PVC 템플릿을 지정하여 여러 HBA(Hostpath 프로비전 프로그램) 볼륨의 스토리지 풀을 생성할 수 있습니다.
사전 요구 사항
-
spec.storagePools.path
에 지정된 디렉터리에 읽기/쓰기 액세스 권한이 있어야 합니다. - 스토리지 풀은 운영 체제와 동일한 파티션에 있지 않아야 합니다. 그렇지 않으면 운영 체제 파티션이 용량으로 채워질 수 있으며 성능에 영향을 미치거나 노드를 불안정하게 만들거나 사용할 수 없게 됩니다.
절차
다음 예에 따라
storagePools
스탠자에서 PVC(영구 볼륨) 템플릿을 지정하는 HPP CR에 대한hpp_pvc_template_pool.yaml
파일을 생성합니다.apiVersion: hostpathprovisioner.kubevirt.io/v1beta1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent storagePools: 1 - name: my-storage-pool path: "/var/myvolumes" 2 pvcTemplate: volumeMode: Block 3 storageClassName: my-storage-class 4 accessModes: - ReadWriteOnce resources: requests: storage: 5Gi 5 workload: nodeSelector: kubernetes.io/os: linux
- 1
storagePools
스탠자는 기본 및 PVC 템플릿 스토리지 풀을 모두 포함할 수 있는 배열입니다.- 2
- 이 노드 경로에 스토리지 풀 디렉터리를 지정합니다.
- 3
- 선택 사항:
volumeMode
매개변수는 프로비저닝된 볼륨 형식과 일치하는Block
또는Filesystem
일 수 있습니다. 값을 지정하지 않으면 기본값은Filesystem
입니다.volumeMode
가Block
인 경우 마운트 Pod는 마운트하기 전에 블록 볼륨에 XFS 파일 시스템을 생성합니다. - 4
storageClassName
매개변수가 생략되면 기본 스토리지 클래스가 PVC를 생성하는 데 사용됩니다.storageClassName
을 생략하면 HPP 스토리지 클래스가 기본 스토리지 클래스가 아닌지 확인합니다.- 5
- 정적으로 또는 동적으로 프로비저닝된 스토리지를 지정할 수 있습니다. 두 경우 모두 요청된 스토리지 크기가 사실상 나누고자 하는 볼륨에 적절한지 확인하거나 PVC를 대규모 PV에 바인딩할 수 없는지 확인합니다. 사용 중인 스토리지 클래스가 동적으로 프로비저닝된 스토리지를 사용하는 경우 일반적인 요청 크기와 일치하는 할당 크기를 선택합니다.
- 파일을 저장하고 종료합니다.
다음 명령을 실행하여 스토리지 풀로 HPP를 만듭니다.
$ oc create -f hpp_pvc_template_pool.yaml
추가 리소스
9.20.3. 데이터 볼륨 생성
데이터 볼륨을 생성할 때 CDI(Containerized Data Importer)는 PVC(영구 볼륨 클레임)를 생성하고 PVC를 데이터로 채웁니다. 독립 실행형 리소스로 데이터 볼륨을 생성하거나 가상 머신 사양에 dataVolumeTemplate
리소스를 사용하여 생성할 수 있습니다. PVC API 또는 스토리지 API를 사용하여 데이터 볼륨을 생성합니다.
OpenShift Container Platform Container Storage에서 OpenShift Virtualization을 사용하는 경우 가상 머신 디스크를 생성할 때 RBD 블록 모드 PVC(영구 볼륨 클레임)를 지정합니다. 가상 머신 디스크를 사용하면 RBD 블록 모드 볼륨이 더 효율적이고 Ceph FS 또는 RBD 파일 시스템 모드 PVC보다 성능이 향상됩니다.
RBD 블록 모드 PVC를 지정하려면 'ocs-storagecluster-ceph-rbd' 스토리지 클래스 및 VolumeMode: Block
을 사용합니다.
가능한 경우 스토리지 API를 사용하여 공간 할당을 최적화하고 성능을 극대화합니다.
스토리지 프로필은 CDI가 관리하는 사용자 지정 리소스입니다. 관련 스토리지 클래스를 기반으로 권장 스토리지 설정을 제공합니다. 각 스토리지 클래스에 대해 스토리지 프로필이 할당됩니다.
스토리지 프로필을 사용하면 데이터 볼륨을 빠르게 생성하고 코딩을 줄이고 잠재적인 오류를 최소화할 수 있습니다.
인식된 스토리지 유형의 경우 CDI는 PVC 생성을 최적화하는 값을 제공합니다. 그러나 스토리지 프로필을 사용자 지정하는 경우 스토리지 클래스에 대한 자동 설정을 구성할 수 있습니다.
9.20.3.1. 스토리지 API를 사용하여 데이터 볼륨 생성
스토리지 API를 사용하여 데이터 볼륨을 생성할 때 CDI(Containerized Data Interface)는 선택한 스토리지 클래스에서 지원하는 스토리지 유형에 따라 PVC(영구 볼륨 클레임) 할당을 최적화합니다. 데이터 볼륨 이름, 네임스페이스 및 할당할 스토리지 크기만 지정해야 합니다.
예를 들어 다음과 같습니다.
-
Ceph RBD를 사용하는 경우
accessModes
가 자동으로ReadWriteMany
로 설정되어 실시간 마이그레이션이 가능합니다.volumeMode
가Block
으로 설정되어 성능을 극대화합니다. -
volumeMode: Filesystem
을 사용하는 경우 파일 시스템 오버헤드를 수용하기 위해 필요한 경우 CDI에서 자동으로 더 많은 공간을 요청합니다.
다음 YAML에서 스토리지 API를 사용하면 사용 가능한 공간이 2GB인 데이터 볼륨을 요청합니다. 사용자가 필요한 PVC(영구 볼륨 클레임) 크기를 올바르게 추정하기 위해 volumeMode
를 알 필요가 없습니다. CDI는 accessModes
및 volumeMode
속성의 최적 조합을 자동으로 선택합니다. 이러한 최적 값은 스토리지 유형 또는 스토리지 프로필에 정의된 기본값을 기반으로 합니다. 사용자 지정 값을 제공하려면 시스템 단위로 계산된 값을 재정의합니다.
데이터 볼륨 정의 예
apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <datavolume> 1 spec: source: pvc: 2 namespace: "<source_namespace>" 3 name: "<my_vm_disk>" 4 storage: 5 resources: requests: storage: 2Gi 6 storageClassName: <storage_class> 7
9.20.3.2. PVC API를 사용하여 데이터 볼륨 생성
PVC API를 사용하여 데이터 볼륨을 생성할 때 CDI(Containerized Data Interface)는 다음 필드에 지정된 값을 기반으로 데이터 볼륨을 생성합니다.
-
accessModes
(ReadWriteOnce
,ReadWriteMany
또는ReadOnlyMany
) -
volumeMode
(Filesystem
또는Block
) -
storage
의capacity
(예:5Gi
)
다음 YAML에서 PVC API를 사용하면 2GB의 스토리지 용량으로 데이터 볼륨을 할당합니다. 실시간 마이그레이션을 활성화하려면 ReadWriteMany
의 액세스 모드를 지정합니다. 시스템에서 지원할 수 있는 값을 알고 있으므로 기본값인 Filesystem
대신 Block
스토리지를 지정합니다.
데이터 볼륨 정의 예
apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <datavolume> 1 spec: source: pvc: 2 namespace: "<source_namespace>" 3 name: "<my_vm_disk>" 4 pvc: 5 accessModes: 6 - ReadWriteMany resources: requests: storage: 2Gi 7 volumeMode: Block 8 storageClassName: <storage_class> 9
- 1
- 새 데이터 볼륨의 이름입니다.
- 2
source
섹션에서pvc
는 가져오기 소스가 기존 PVC(영구 볼륨 클레임)임을 나타냅니다.- 3
- 소스 PVC가 존재하는 네임스페이스입니다.
- 4
- 소스 PVC의 이름입니다.
- 5
- PVC API를 사용하여 할당을 나타냅니다.
- 6
- PVC API를 사용하는 경우
accessModes
가 필요합니다. - 7
- 데이터 볼륨에 요청 중인 공간의 양을 지정합니다.
- 8
- 대상이 블록 PVC임을 지정합니다.
- 9
- 선택 사항으로 스토리지 클래스를 지정합니다. 스토리지 클래스를 지정하지 않으면 시스템 기본 스토리지 클래스가 사용됩니다.
PVC API를 사용하여 명시적으로 데이터 볼륨을 할당하고 volumeMode: Block
을 사용하지 않는 경우 파일 시스템 오버헤드를 고려합니다.
파일 시스템 오버헤드는 메타데이터를 유지 관리하기 위해 파일 시스템에 필요한 공간입니다. 파일 시스템 메타데이터에 필요한 공간 크기는 파일 시스템에 따라 다릅니다. 스토리지 용량 요청의 파일 시스템 오버헤드를 고려하지 않으면 가상 머신 디스크를 수용하기에 충분하지 않은 기본 PVC(영구 볼륨 클레임)가 발생할 수 있습니다.
스토리지 API를 사용하는 경우 CDI는 파일 시스템 오버헤드를 인수하고 더 큰 PVC(영구 볼륨 클레임)를 요청하여 할당 요청이 성공했는지 확인합니다.
9.20.3.3. 스토리지 프로파일 사용자 정의
프로비저너의 스토리지 클래스에 대해 StorageProfile
오브젝트를 편집하여 기본 매개변수를 지정할 수 있습니다. 이러한 기본 매개변수는 DataVolume
오브젝트에 구성되지 않은 경우에만 PVC(영구 볼륨 클레임)에 적용됩니다.
사전 요구 사항
- 계획된 구성이 스토리지 클래스 및 해당 공급자에 의해 지원되는지 확인하십시오. 스토리지 프로필에 호환되지 않는 구성을 지정하면 볼륨 프로비저닝이 실패합니다.
스토리지 프로필의 빈 status
섹션은 스토리지 프로비저너가 CDI(Containerized Data Interface)에서 인식되지 않았음을 나타냅니다. CDI에서 인식하지 않는 스토리지 프로비저너가 있는 경우 스토리지 프로필을 사용자 정의해야 합니다. 이 경우 관리자는 스토리지 프로필에 적절한 값을 설정하여 성공적으로 할당되도록 합니다.
데이터 볼륨을 생성하고 YAML 속성을 생략하고 이러한 특성이 스토리지 프로필에 정의되지 않으면 요청된 스토리지가 할당되지 않고 기본 PVC(영구 볼륨 클레임)가 생성되지 않습니다.
절차
스토리지 프로파일을 편집합니다. 이 예에서 CDI는 제공자를 인식하지 못합니다.
$ oc edit -n openshift-cnv storageprofile <storage_class>
스토리지 프로필 예
apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: <unknown_provisioner_class> # ... spec: {} status: provisioner: <unknown_provisioner> storageClass: <unknown_provisioner_class>
스토리지 프로파일에 필요한 속성 값을 제공합니다.
스토리지 프로필 예
apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: <unknown_provisioner_class> # ... spec: claimPropertySets: - accessModes: - ReadWriteOnce 1 volumeMode: Filesystem 2 status: provisioner: <unknown_provisioner> storageClass: <unknown_provisioner_class>
변경 사항을 저장하면 선택한 값이 스토리지 프로필
status
요소에 표시됩니다.
9.20.3.3.1. 스토리지 프로필을 사용하여 기본 복제 전략 설정
스토리지 프로필을 사용하여 스토리지 클래스의 기본 복제 방법을 설정하여 복제 전략을 생성할 수 있습니다. 예를 들어, 스토리지 벤더가 특정 복제 방법만 지원하는 경우 복제 전략을 설정하면 유용할 수 있습니다. 또한 리소스 사용을 제한하거나 성능을 극대화하는 방법을 선택할 수 있습니다.
스토리지 프로필의 cloneStrategy
특성을 다음 값 중 하나로 설정하여 전략을 복제할 수 있습니다.
-
snapshot
- 이 방법은 스냅샷이 구성될 때 기본적으로 사용됩니다. 이 복제 전략에서는 임시 볼륨 스냅샷을 사용하여 볼륨을 복제합니다. 스토리지 프로비저너는 CSI 스냅샷을 지원해야 합니다. -
copy
- 이 방법은 소스 Pod와 대상 Pod를 사용하여 소스 볼륨의 데이터를 대상 볼륨으로 복사합니다. 호스트 지원 복제는 가장 효율적인 복제 방법입니다. -
CSI-clone
- 이 방법은 CSI 복제 API를 사용하여 임시 볼륨 스냅샷을 사용하지 않고 기존 볼륨을 효율적으로 복제합니다. 스토리지 프로파일이 정의되지 않은 경우 기본적으로 사용되는snapshot
또는copy
와 달리 CSI 볼륨 복제는 프로비저너의 스토리지 클래스에 대해StorageProfile
오브젝트에 지정된 경우에만 사용됩니다.
YAML 사양
섹션의 기본 claimPropertySets
를 수정하지 않고 CLI를 사용하여 복제 전략을 설정할 수도 있습니다.
스토리지 프로필 예
apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: <provisioner_class> # ... spec: claimPropertySets: - accessModes: - ReadWriteOnce 1 volumeMode: Filesystem 2 cloneStrategy: csi-clone 3 status: provisioner: <provisioner> storageClass: <provisioner_class>
9.20.3.4. 추가 리소스
9.20.4. 파일 시스템 오버헤드의 PVC 공간 예약
기본적으로 OpenShift Virtualization은 Filesystem
볼륨 모드를 사용하는 PVC(영구 볼륨 클레임)의 파일 시스템 오버헤드 데이터를 위해 공간을 예약합니다. 전역 및 특정 스토리지 클래스에 대해 이 용도의 공간을 예약하도록 백분율을 설정할 수 있습니다.
9.20.4.1. 파일 시스템 오버헤드가 가상 머신 디스크의 공간에 미치는 영향
Filesystem
볼륨 모드를 사용하는 PVC(영구 볼륨 클레임)에 가상 머신 디스크를 추가하는 경우 PVC에 다음을 위한 충분한 공간이 있는지 확인해야 합니다.
- 가상 머신 디스크
- 메타데이터와 같은 파일 시스템 오버헤드용으로 예약된 공간
기본적으로 OpenShift Virtualization은 5.5%의 PVC 공간을 오버헤드로 예약하므로 해당 용량에 따라 가상 머신 디스크에 사용 가능한 공간을 줄일 수 있습니다.
HCO
오브젝트를 편집하여 다른 오버헤드 값을 구성할 수 있습니다. 전체적으로 값을 변경하고 특정 스토리지 클래스의 값을 지정할 수 있습니다.
9.20.4.2. 기본 파일 시스템 오버헤드 값 덮어쓰기
HCO
오브젝트의 spec.filesystemOverhead
속성을 편집하여 OpenShift Virtualization에서 파일 시스템 오버헤드를 위해 예약하는 PVC(영구 볼륨 클레임) 공간을 변경합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
다음 명령을 실행하여 편집할
HCO
오브젝트를 엽니다.$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
spec.filesystemOverhead
필드를 편집하여 선택한 값으로 채웁니다.... spec: filesystemOverhead: global: "<new_global_value>" 1 storageClass: <storage_class_name>: "<new_value_for_this_storage_class>" 2
-
편집기를 저장하고 종료하여
HCO
오브젝트를 업데이트합니다.
검증
다음 명령 중 하나를 실행하여
CDIConfig
상태를 보고 변경 사항을 확인합니다.일반적으로
CDIConfig
변경 사항을 확인하려면 다음을 수행합니다.$ oc get cdiconfig -o yaml
CDIConfig
에 대한 특정 변경 사항을 보려면 다음을 수행합니다.$ oc get cdiconfig -o jsonpath='{.items..status.filesystemOverhead}'
9.20.5. 컴퓨팅 리소스 할당량이 있는 네임스페이스를 사용하도록 CDI 구성
CDI(Containerized Data Importer)를 사용하면 CPU 및 메모리 리소스가 제한된 네임스페이스로 가상 머신 디스크를 가져오고, 업로드하고, 복제할 수 있습니다.
9.20.5.1. 네임스페이스의 CPU 및 메모리 할당량 정보
ResourceQuota
오브젝트로 정의하는 리소스 할당량은 네임스페이스에 제한을 적용하여 해당 네임스페이스 내의 리소스에서 사용할 수 있는 총 컴퓨팅 리소스 양을 제한합니다.
HyperConverged
사용자 지정 리소스 (CR)는 CDI(Containerized Data Importer)에 대한 사용자 구성을 정의합니다. CPU 및 메모리 요청 및 한계 값은 기본값인 0
으로 설정되어 있습니다. 이렇게 하면 컴퓨팅 리소스 요구 사항 없이 CDI에서 생성한 Pod에 기본값을 제공하고 할당량으로 제한되는 네임스페이스에서 해당 Pod를 실행할 수 있습니다.
9.20.5.2. CPU 및 메모리 기본값 덮어쓰기
spec.resourceRequirements.storageWorkloads
스탠자를 HyperConverged
CR(사용자 정의 리소스)에 추가하여 CPU 및 메모리 요청의 기본 설정과 사용 사례에 대한 제한을 수정합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
다음 명령을 실행하여
HyperConverged
CR을 편집합니다.$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
spec.resourceRequirements.storageWorkloads
스탠자를 CR에 추가하여 사용 사례에 따라 값을 설정합니다. 예를 들어 다음과 같습니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: resourceRequirements: storageWorkloads: limits: cpu: "500m" memory: "2Gi" requests: cpu: "250m" memory: "1Gi"
-
편집기를 저장하고 종료하여
HyperConverged
CR을 업데이트합니다.
9.20.5.3. 추가 리소스
9.20.6. 데이터 볼륨 주석 관리
DV(데이터 볼륨) 주석을 사용하면 Pod 동작을 관리할 수 있습니다. 하나 이상의 주석을 데이터 볼륨에 추가하면 생성된 가져오기 Pod로 전파할 수 있습니다.
9.20.6.1. 예: 데이터 볼륨 주석
이 예에서는 가져오기 Pod에서 사용하는 네트워크를 제어하도록 DV(데이터 볼륨) 주석을 구성할 수 있는 방법을 보여줍니다. v1.multus-cni.io/default-network: bridge-network
주석을 사용하면 Pod에서 bridge-network
라는 multus 네트워크를 기본 네트워크로 사용합니다. 가져오기 Pod에서 클러스터 및 보조 multus 네트워크의 기본 네트워크를 모두 사용하도록 하려면 k8s.v1.cni.cncf.io/networks: <network_name>
주석을 사용합니다.
Multus 네트워크 주석 예
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: dv-ann
annotations:
v1.multus-cni.io/default-network: bridge-network 1
spec:
source:
http:
url: "example.exampleurl.com"
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
- 1
- Multus 네트워크 주석
9.20.7. 데이터 볼륨에 사전 할당 사용
CDI(Containerized Data Importer)는 데이터 볼륨을 생성할 때 쓰기 성능을 개선하기 위해 디스크 공간을 사전 할당할 수 있습니다.
특정 데이터 볼륨에 대해 사전 할당을 실행할 수 있습니다.
9.20.7.1. 사전 할당 정보
CDI(Containerized Data Importer)는 데이터 볼륨에 QEMU 사전 할당 모드를 사용하여 쓰기 성능을 향상시킬 수 있습니다. 사전 할당 모드를 사용하여 작업 가져오기 및 업로드 및 빈 데이터 볼륨을 생성할 때 사용할 수 있습니다.
사전 할당이 활성화된 경우 CDI는 기본 파일 시스템 및 장치 유형에 따라 더 나은 사전 할당 방법을 사용합니다.
fallocate
-
파일 시스템이 이를 지원하는 경우, CDI는
posix_fallocate
함수를 사용하여 운영 체제의fallocate
호출을 통해 공간을 미리 할당하며, 이를 통해 블록을 할당하고 초기화되지 않음으로 표시합니다. full
-
fallocate
모드를 사용할 수 없는 경우full
모드는 기본 스토리지에 데이터를 작성하여 이미지의 공간을 할당합니다. 스토리지 위치에 따라, 비어 있는 할당된 모든 공간을 0으로 만들 수 있습니다.
9.20.7.2. 데이터 볼륨 사전 할당 활성화
데이터 볼륨 매니페스트에 spec.preallocation
필드를 포함하여 특정 데이터 볼륨에 대한 사전 할당을 활성화할 수 있습니다. 웹 콘솔에서 또는 OpenShift 클라이언트(oc
)를 사용하여 사전 할당 모드를 활성화할 수 있습니다.
모든 CDI 소스 유형에서 사전 할당 모드가 지원됩니다.
9.20.8. 웹 콘솔을 사용하여 로컬 디스크 이미지 업로드
웹 콘솔을 사용하여 로컬에 저장된 디스크 이미지 파일을 업로드할 수 있습니다.
9.20.8.1. 사전 요구 사항
- 가상 머신 이미지 파일이 IMG, ISO 또는 QCOW2 형식이어야 합니다.
- CDI 지원 작업 매트릭스에 따라 스크래치 공간이 필요한 경우 이 작업을 완료하려면 스토리지 클래스를 정의하거나 CDI 스크래치 공간을 준비해야 합니다.
9.20.8.2. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요
9.20.8.3. 웹 콘솔을 사용하여 이미지 파일 업로드
웹 콘솔을 사용하여 이미지 파일을 새 PVC(영구 볼륨 클레임)에 업로드합니다. 나중에 이 PVC를 사용하여 이미지를 새 가상 머신에 연결할 수 있습니다.
사전 요구 사항
다음 중 하나가 있어야 합니다.
- ISO 또는 IMG 형식의 원시 가상 머신 이미지 파일
- QCOW2 형식의 가상 머신 이미지 파일
최상의 결과를 얻으려면 업로드하기 전에 다음 지침에 따라 이미지 파일을 압축하십시오.
xz
또는gzip
을 사용하여 원시 이미지 파일을 압축합니다.참고압축된 원시 이미지 파일을 사용할 때 가장 효율적으로 업로드할 수 있습니다.
클라이언트에 권장되는 방법을 사용하여 QCOW2 이미지 파일을 압축합니다.
- Linux 클라이언트를 사용하는 경우 virt-sparsify 툴을 사용하여 QCOW2 파일을 스파스(sparsify) 형식으로 변환합니다.
-
Windows 클라이언트를 사용하는 경우
xz
또는gzip
을 사용하여 QCOW2 파일을 압축합니다.
절차
-
웹 콘솔의 사이드 메뉴에서 스토리지
영구 볼륨 클레임을 클릭합니다. - 영구 볼륨 클레임 생성 드롭다운 목록을 클릭하여 확장합니다.
- 사용할 데이터 업로드 폼을 클릭하여 영구 볼륨 클레임에 데이터 업로드 페이지를 엽니다.
- 찾아보기를 클릭하여 파일 관리자를 열고 업로드할 이미지를 선택하거나, 파일을 여기로 드래그하거나 업로드할 항목 찾아보기 필드로 파일을 드래그합니다.
선택 사항: 이 이미지를 특정 운영 체제의 기본 이미지로 설정합니다.
- 이 데이터를 가상 머신 운영 체제에 연결 확인란을 선택합니다.
- 목록에서 운영 체제를 선택합니다.
- 영구 볼륨 클레임 이름 필드는 고유한 이름으로 자동으로 채워지며 편집할 수 없습니다. 필요한 경우 나중에 확인할 수 있도록 PVC에 지정된 이름을 기록해 두십시오.
- 스토리지 클래스 목록에서 스토리지 클래스를 선택합니다.
크기 필드에 PVC 크기 값을 입력합니다. 드롭다운 목록에서 해당 측정 단위를 선택합니다.
주의PVC 크기는 압축되지 않은 가상 디스크의 크기보다 커야 합니다.
- 선택한 스토리지 클래스와 일치하는 액세스 모드를 선택합니다.
- 업로드를 클릭합니다.
9.20.8.4. 추가 리소스
- 데이터 볼륨 작업에 대한 쓰기 성능을 개선 하도록 사전 할당 모드를 구성합니다.
9.20.9. virtctl 툴을 사용하여 로컬 디스크 이미지 업로드
virtctl
명령줄 유틸리티를 사용하여 로컬에 저장된 디스크 이미지를 신규 또는 기존 데이터 볼륨에 업로드할 수 있습니다.
9.20.9.1. 사전 요구 사항
-
kubevirt-virtctl
패키지를 활성화합니다. - CDI 지원 작업 매트릭스에 따라 스크래치 공간이 필요한 경우 이 작업을 완료하려면 스토리지 클래스를 정의하거나 CDI 스크래치 공간을 준비해야 합니다.
9.20.9.2. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.
9.20.9.3. 업로드 데이터 볼륨 생성
로컬 디스크 이미지를 업로드하는 데 사용할 upload
데이터 소스가 있는 데이터 볼륨을 수동으로 생성할 수 있습니다.
절차
spec: source: upload{}
를 지정하는 데이터 볼륨 구성을 만듭니다.apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <upload-datavolume> 1 spec: source: upload: {} pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 2
다음 명령을 실행하여 데이터 볼륨을 생성합니다.
$ oc create -f <upload-datavolume>.yaml
9.20.9.4. 데이터 볼륨에 로컬 디스크 이미지 업로드
virtctl
CLI 유틸리티를 사용하여 클라이언트 머신의 로컬 디스크 이미지를 클러스터의 DV(데이터 볼륨)에 업로드할 수 있습니다. 클러스터에 이미 존재하는 DV를 사용하거나 이 절차 중에 새 DV를 만들 수 있습니다.
로컬 디스크 이미지를 업로드한 후 가상 머신에 추가할 수 있습니다.
사전 요구 사항
다음 중 하나가 있어야 합니다.
- ISO 또는 IMG 형식의 원시 가상 머신 이미지 파일
- QCOW2 형식의 가상 머신 이미지 파일
최상의 결과를 얻으려면 업로드하기 전에 다음 지침에 따라 이미지 파일을 압축하십시오.
xz
또는gzip
을 사용하여 원시 이미지 파일을 압축합니다.참고압축된 원시 이미지 파일을 사용할 때 가장 효율적으로 업로드할 수 있습니다.
클라이언트에 권장되는 방법을 사용하여 QCOW2 이미지 파일을 압축합니다.
- Linux 클라이언트를 사용하는 경우 virt-sparsify 툴을 사용하여 QCOW2 파일을 스파스(sparsify) 형식으로 변환합니다.
-
Windows 클라이언트를 사용하는 경우
xz
또는gzip
을 사용하여 QCOW2 파일을 압축합니다.
-
kubevirt-virtctl
패키지가 클라이언트 머신에 설치되어 있어야 합니다. - 클라이언트 머신이 OpenShift Container Platform 라우터의 인증서를 신뢰하도록 구성되어 있어야 합니다.
절차
다음 항목을 확인합니다.
- 사용할 업로드 데이터 볼륨의 이름. 이 데이터 볼륨이 없으면 자동으로 생성됩니다.
- 업로드 절차 중 데이터 볼륨을 생성하려는 경우 데이터 볼륨의 크기. 크기는 디스크 이미지의 크기보다 크거나 같아야 합니다.
- 업로드하려는 가상 머신 디스크 이미지의 파일 위치.
virtctl image-upload
명령을 실행하여 디스크 이미지를 업로드합니다. 이전 단계에서 확인한 매개변수를 지정합니다. 예를 들면 다음과 같습니다.$ virtctl image-upload dv <datavolume_name> \ 1 --size=<datavolume_size> \ 2 --image-path=</path/to/image> \ 3
참고-
새 데이터 볼륨을 생성하지 않으려면
--size
매개변수를 생략하고--no-create
플래그를 포함합니다. - 디스크 이미지를 PVC에 업로드할 때 PVC 크기는 압축되지 않은 가상 디스크의 크기보다 커야 합니다.
-
HTTPS를 사용할 때 비보안 서버 연결을 허용하려면
--insecure
매개변수를 사용하십시오.--insecure
플래그를 사용하면 업로드 끝점의 신뢰성이 확인되지 않습니다.
-
새 데이터 볼륨을 생성하지 않으려면
선택사항입니다. 데이터 볼륨이 생성되었는지 확인하려면 다음 명령을 실행하여 모든 데이터 볼륨을 확인합니다.
$ oc get dvs
9.20.9.5. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요
9.20.9.6. 추가 리소스
- 데이터 볼륨 작업에 대한 쓰기 성능을 개선 하도록 사전 할당 모드를 구성합니다.
9.20.10. 블록 스토리지 데이터 볼륨에 로컬 디스크 이미지 업로드
virtctl
명령줄 유틸리티를 사용하여 로컬 디스크 이미지를 블록 데이터 볼륨에 업로드할 수 있습니다.
이 워크플로우에서는 영구 볼륨으로 사용할 로컬 블록 장치를 생성한 후 이 블록 볼륨을 upload
데이터 볼륨과 연결하고, virtctl
을 사용하여 로컬 디스크 이미지를 데이터 볼륨에 업로드합니다.
9.20.10.1. 사전 요구 사항
-
kubevirt-virtctl
패키지를 활성화합니다. - CDI 지원 작업 매트릭스에 따라 스크래치 공간이 필요한 경우 이 작업을 완료하려면 스토리지 클래스를 정의하거나 CDI 스크래치 공간을 준비해야 합니다.
9.20.10.2. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.
9.20.10.3. 블록 영구 볼륨 정보
PV(블록 영구 볼륨)는 원시 블록 장치에서 지원하는 PV입니다. 이러한 볼륨은 파일 시스템이 없으며 오버헤드를 줄여 가상 머신의 성능을 향상시킬 수 있습니다.
원시 블록 볼륨은 PV 및 PVC(영구 볼륨 클레임) 사양에 volumeMode:Block
을 지정하여 프로비저닝합니다.
9.20.10.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
- 이전 단계에서 생성한 영구 볼륨의 파일 이름입니다.
9.20.10.5. 업로드 데이터 볼륨 생성
로컬 디스크 이미지를 업로드하는 데 사용할 upload
데이터 소스가 있는 데이터 볼륨을 수동으로 생성할 수 있습니다.
절차
spec: source: upload{}
를 지정하는 데이터 볼륨 구성을 만듭니다.apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <upload-datavolume> 1 spec: source: upload: {} pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 2
다음 명령을 실행하여 데이터 볼륨을 생성합니다.
$ oc create -f <upload-datavolume>.yaml
9.20.10.6. 데이터 볼륨에 로컬 디스크 이미지 업로드
virtctl
CLI 유틸리티를 사용하여 클라이언트 머신의 로컬 디스크 이미지를 클러스터의 DV(데이터 볼륨)에 업로드할 수 있습니다. 클러스터에 이미 존재하는 DV를 사용하거나 이 절차 중에 새 DV를 만들 수 있습니다.
로컬 디스크 이미지를 업로드한 후 가상 머신에 추가할 수 있습니다.
사전 요구 사항
다음 중 하나가 있어야 합니다.
- ISO 또는 IMG 형식의 원시 가상 머신 이미지 파일
- QCOW2 형식의 가상 머신 이미지 파일
최상의 결과를 얻으려면 업로드하기 전에 다음 지침에 따라 이미지 파일을 압축하십시오.
xz
또는gzip
을 사용하여 원시 이미지 파일을 압축합니다.참고압축된 원시 이미지 파일을 사용할 때 가장 효율적으로 업로드할 수 있습니다.
클라이언트에 권장되는 방법을 사용하여 QCOW2 이미지 파일을 압축합니다.
- Linux 클라이언트를 사용하는 경우 virt-sparsify 툴을 사용하여 QCOW2 파일을 스파스(sparsify) 형식으로 변환합니다.
-
Windows 클라이언트를 사용하는 경우
xz
또는gzip
을 사용하여 QCOW2 파일을 압축합니다.
-
kubevirt-virtctl
패키지가 클라이언트 머신에 설치되어 있어야 합니다. - 클라이언트 머신이 OpenShift Container Platform 라우터의 인증서를 신뢰하도록 구성되어 있어야 합니다.
절차
다음 항목을 확인합니다.
- 사용할 업로드 데이터 볼륨의 이름. 이 데이터 볼륨이 없으면 자동으로 생성됩니다.
- 업로드 절차 중 데이터 볼륨을 생성하려는 경우 데이터 볼륨의 크기. 크기는 디스크 이미지의 크기보다 크거나 같아야 합니다.
- 업로드하려는 가상 머신 디스크 이미지의 파일 위치.
virtctl image-upload
명령을 실행하여 디스크 이미지를 업로드합니다. 이전 단계에서 확인한 매개변수를 지정합니다. 예를 들면 다음과 같습니다.$ virtctl image-upload dv <datavolume_name> \ 1 --size=<datavolume_size> \ 2 --image-path=</path/to/image> \ 3
참고-
새 데이터 볼륨을 생성하지 않으려면
--size
매개변수를 생략하고--no-create
플래그를 포함합니다. - 디스크 이미지를 PVC에 업로드할 때 PVC 크기는 압축되지 않은 가상 디스크의 크기보다 커야 합니다.
-
HTTPS를 사용할 때 비보안 서버 연결을 허용하려면
--insecure
매개변수를 사용하십시오.--insecure
플래그를 사용하면 업로드 끝점의 신뢰성이 확인되지 않습니다.
-
새 데이터 볼륨을 생성하지 않으려면
선택사항입니다. 데이터 볼륨이 생성되었는지 확인하려면 다음 명령을 실행하여 모든 데이터 볼륨을 확인합니다.
$ oc get dvs
9.20.10.7. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요
9.20.10.8. 추가 리소스
- 데이터 볼륨 작업에 대한 쓰기 성능을 개선 하도록 사전 할당 모드를 구성합니다.
9.20.11. 가상 머신 스냅샷 관리
VM 전원이 꺼져 있는지(오프라인) 또는 온라인(온라인)에 관계없이 VM(가상 머신) 스냅샷을 생성하고 삭제할 수 있습니다. 전원이 꺼진(오프라인) VM으로만 복원할 수 있습니다. OpenShift Virtualization에서는 VM 스냅샷을 지원합니다.
- Red Hat OpenShift Data Foundation
- Kubernetes Volume Snapshot API를 지원하는 CSI(Container Storage Interface) 드라이버가 있는 기타 클라우드 스토리지 공급자
온라인 스냅샷에는 필요한 경우 5분(5m
)의 기본 시간 기한이 있습니다.
핫플러그 가상 디스크가 있는 가상 머신에서 온라인 스냅샷이 지원됩니다. 그러나 가상 머신 사양에 없는 핫플러그 디스크는 스냅샷에 포함되지 않습니다.
가장 높은 무결성을 가진 온라인(실행 상태) VM의 스냅샷을 생성하려면 QEMU 게스트 에이전트를 설치합니다.
QEMU 게스트 에이전트는 시스템 워크로드에 따라 VM 파일 시스템을 가능한 한 많이 정지하여 일관된 스냅샷을 사용합니다. 이렇게 하면 스냅샷을 생성하기 전에 진행 중인 I/O가 디스크에 기록됩니다. 게스트 에이전트가 없으면 정지를 수행할 수 없으며 최상의 스냅샷을 생성합니다. 스냅샷이 수행된 조건은 웹 콘솔 또는 CLI에 표시되는 스냅샷 표시에 반영됩니다.
9.20.11.1. 가상 머신 스냅샷 정보
스냅샷은 특정 시점의 VM(가상 머신) 상태 및 데이터를 나타냅니다. 스냅샷을 사용하면 백업 및 재해 복구를 위해 기존 VM을 (스냅샷에 표시된) 이전 상태로 복원하거나 이전 개발 버전으로 신속하게 롤백할 수 있습니다.
VM 스냅샷은 전원이 꺼진(중지됨) 또는 전원이 켜진 상태(실행 중 상태)에서 생성됩니다.
실행 중인 VM의 스냅샷을 생성하는 경우 컨트롤러는 QEMU 게스트 에이전트가 설치되어 실행 중인지 확인합니다. 이 경우 스냅샷을 생성하기 전에 VM 파일 시스템을 중지하고 스냅샷을 만든 후 파일 시스템을 취소합니다.
스냅샷에는 VM에 연결된 각 CSI(Container Storage Interface) 볼륨 복사본과 VM 사양 및 메타데이터 복사본이 저장됩니다. 스냅샷을 생성한 후에는 변경할 수 없습니다.
VM 스냅샷 기능을 사용하면 클러스터 관리자와 애플리케이션 개발자가 다음을 수행할 수 있습니다.
- 새 프로젝트 생성
- 특정 VM에 연결된 모든 스냅샷 나열
- 스냅샷에서 VM 복원
- 기존 VM 스냅샷 삭제
9.20.11.1.1. 가상 머신 스냅샷 컨트롤러 및 CRD(사용자 정의 리소스 정의)
스냅샷 관리를 위해 VM 스냅샷 기능에 다음과 같이 CRD로 정의되는 새 API 오브젝트 세 가지가 도입되었습니다.
-
VirtualMachineSnapshot
: 스냅샷을 생성하라는 사용자 요청을 나타냅니다. 여기에는 VM의 현재 상태 정보가 포함됩니다. -
VirtualMachineSnapshotContent
: 클러스터의 프로비저닝 리소스를 나타냅니다(스냅샷). VM 스냅샷 컨트롤러에서 생성하며 VM을 복원하는 데 필요한 모든 리소스에 대한 참조를 포함합니다. -
VirtualMachineRestore
: 스냅샷에서 VM을 복원하라는 사용자 요청을 나타냅니다.
VM 스냅샷 컨트롤러는 VirtualMachineSnapshot
오브젝트와 이 오브젝트에 대해 생성된 VirtualMachineSnapshotContent
오브젝트를 일대일 매핑으로 바인딩합니다.
9.20.11.2. Linux 가상 머신에 QEMU 게스트 에이전트 설치
qemu-guest-agent
는 광범위하게 사용되며, Red Hat 가상 머신에 기본적으로 제공됩니다. 에이전트를 설치하고 서비스를 시작합니다.
VM(가상 머신)에 QEMU 게스트 에이전트가 설치되어 실행되고 있는지 확인하려면 AgentConnected
가 VM 사양에 나열되어 있는지 확인합니다.
가장 높은 무결성을 가진 온라인(실행 상태) VM의 스냅샷을 생성하려면 QEMU 게스트 에이전트를 설치합니다.
QEMU 게스트 에이전트는 시스템 워크로드에 따라 VM의 파일 시스템을 가능한 한 많이 정지하여 일관된 스냅샷을 사용합니다. 이렇게 하면 스냅샷을 생성하기 전에 진행 중인 I/O가 디스크에 기록됩니다. 게스트 에이전트가 없으면 정지를 수행할 수 없으며 최상의 스냅샷을 생성합니다. 스냅샷이 수행된 조건은 웹 콘솔 또는 CLI에 표시되는 스냅샷 표시에 반영됩니다.
절차
- 콘솔 중 하나 또는 SSH를 통해 가상 머신 명령줄에 액세스합니다.
가상 머신에 QEMU 게스트 에이전트를 설치합니다.
$ yum install -y qemu-guest-agent
서비스가 지속되는지 확인하고 다음을 시작합니다.
$ systemctl enable --now qemu-guest-agent
9.20.11.3. Windows 가상 머신에 QEMU 게스트 에이전트 설치
Windows 가상 머신의 경우 QEMU 게스트 에이전트는 VirtIO 드라이버에 포함됩니다. 기존 또는 새 Windows 설치에 드라이버를 설치합니다.
VM(가상 머신)에 QEMU 게스트 에이전트가 설치되어 실행되고 있는지 확인하려면 AgentConnected
가 VM 사양에 나열되어 있는지 확인합니다.
가장 높은 무결성을 가진 온라인(실행 상태) VM의 스냅샷을 생성하려면 QEMU 게스트 에이전트를 설치합니다.
QEMU 게스트 에이전트는 시스템 워크로드에 따라 VM의 파일 시스템을 가능한 한 많이 정지하여 일관된 스냅샷을 사용합니다. 이렇게 하면 스냅샷을 생성하기 전에 진행 중인 I/O가 디스크에 기록됩니다. 게스트 에이전트가 없으면 정지를 수행할 수 없으며 최상의 스냅샷을 생성합니다. 스냅샷이 수행된 조건은 웹 콘솔 또는 CLI에 표시되는 스냅샷 표시에 반영됩니다.
9.20.11.3.1. 기존 Windows 가상 머신에 VirtIO 드라이버 설치
연결된 SATA CD 드라이브에서 기존 Windows 가상 머신에 VirtIO 드라이버를 설치합니다.
다음 절차에서는 일반적인 방법을 사용하여 Windows에 드라이버를 추가합니다. 프로세스는 Windows 버전마다 약간 다를 수 있습니다. 특정 설치 단계는 사용 중인 Windows 버전의 설치 설명서를 참조하십시오.
절차
- 가상 머신을 시작하고 그래픽 콘솔에 연결합니다.
- Windows 사용자 세션에 로그인합니다.
장치 관리자를 열고 기타 장치를 확장하여 알 수 없는 장치를 나열합니다.
-
Device Properties
을 열어 알 수 없는 장치를 확인합니다. 장치를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. - 세부 정보 탭을 클릭하고 속성 목록에서 하드웨어 ID를 선택합니다.
- 하드웨어 ID의 값을 지원되는 VirtIO 드라이버와 비교합니다.
-
- 장치를 마우스 오른쪽 단추로 클릭하고 드라이버 소프트웨어 업데이트를 선택합니다.
- 컴퓨터에서 드라이버 소프트웨어 찾아보기를 클릭하고 VirtIO 드라이버가 있는 연결된 SATA CD 드라이브를 찾습니다. 드라이버는 드라이버 유형, 운영 체제, CPU 아키텍처에 따라 계층적으로 정렬됩니다.
- 다음을 클릭하여 드라이버를 설치합니다.
- 필요한 모든 VirtIO 드라이버에 대해 이 과정을 반복합니다.
- 드라이버 설치 후 닫기를 클릭하여 창을 닫습니다.
- 가상 머신을 재부팅하여 드라이버 설치를 완료합니다.
9.20.11.3.2. Windows 설치 중 VirtIO 드라이버 설치
Windows를 설치하는 동안 연결된 SATA CD 드라이버에서 VirtIO 드라이버를 설치합니다.
이 절차에서는 일반적인 Windows 설치 방법을 사용하며, 설치 방법은 Windows 버전마다 다를 수 있습니다. 설치 중인 Windows 버전에 대한 설명서를 참조하십시오.
절차
- 가상 머신을 시작하고 그래픽 콘솔에 연결합니다.
- Windows 설치 프로세스를 시작합니다.
- 고급 설치를 선택합니다.
-
저장 대상은 드라이버가 로드되어야 인식됩니다.
Load driver
를 클릭합니다. - 드라이버는 SATA CD 드라이브로 연결되어 있습니다. 확인을 클릭하고 스토리지 드라이버를 로드할 CD 드라이브를 찾습니다. 드라이버는 드라이버 유형, 운영 체제, CPU 아키텍처에 따라 계층적으로 정렬됩니다.
- 필요한 모든 드라이버에 대해 위의 두 단계를 반복합니다.
- Windows 설치를 완료합니다.
9.20.11.4. 웹 콘솔에서 가상 머신 스냅샷 생성
웹 콘솔을 사용하여 VM(가상 머신) 스냅샷을 생성할 수 있습니다.
가장 높은 무결성을 가진 온라인(실행 상태) VM의 스냅샷을 생성하려면 QEMU 게스트 에이전트를 설치합니다.
QEMU 게스트 에이전트는 시스템 워크로드에 따라 VM의 파일 시스템을 가능한 한 많이 정지하여 일관된 스냅샷을 사용합니다. 이렇게 하면 스냅샷을 생성하기 전에 진행 중인 I/O가 디스크에 기록됩니다. 게스트 에이전트가 없으면 정지를 수행할 수 없으며 최상의 스냅샷을 생성합니다. 스냅샷이 수행된 조건은 웹 콘솔 또는 CLI에 표시되는 스냅샷 표시에 반영됩니다.
VM 스냅샷에는 다음 요구 사항을 충족하는 디스크만 포함됩니다.
- 데이터 볼륨 또는 영구 볼륨 클레임 중 하나여야 합니다.
- CSI(Container Storage Interface) 볼륨 스냅샷을 지원하는 스토리지 클래스에 속해야 합니다.
절차
-
사이드 메뉴에서 가상화
VirtualMachine를 클릭합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
-
가상 머신이 실행 중인 경우 작업
중지 를 클릭하여 전원을 끕니다. - 스냅샷 탭을 클릭한 후 스냅샷 찍기를 클릭합니다.
- 스냅샷 이름 및 선택 사항으로 설명 필드를 작성합니다.
- 이 스냅샷에 포함된 디스크를 확장하여 스냅샷에 스토리지 볼륨이 포함되어 있는지 확인합니다.
- VM에 스냅샷에 포함할 수 없는 디스크가 있고 계속 진행하려면 이 경고에 대해 인식하고 있으며 계속 진행하겠습니다. 확인란을 선택합니다.
- 저장을 클릭합니다.
9.20.11.5. CLI에서 가상 머신 스냅샷 생성
VirtualMachineSnapshot
오브젝트를 생성하여 오프라인 또는 온라인 VM에 대한 VM(가상 머신) 스냅샷을 생성할 수 있습니다. kubevirt는 QEMU 게스트 에이전트와 조정하여 온라인 VM의 스냅샷을 생성합니다.
가장 높은 무결성을 가진 온라인(실행 상태) VM의 스냅샷을 생성하려면 QEMU 게스트 에이전트를 설치합니다.
QEMU 게스트 에이전트는 시스템 워크로드에 따라 VM의 파일 시스템을 가능한 한 많이 정지하여 일관된 스냅샷을 사용합니다. 이렇게 하면 스냅샷을 생성하기 전에 진행 중인 I/O가 디스크에 기록됩니다. 게스트 에이전트가 없으면 정지를 수행할 수 없으며 최상의 스냅샷을 생성합니다. 스냅샷이 수행된 조건은 웹 콘솔 또는 CLI에 표시되는 스냅샷 표시에 반영됩니다.
사전 요구 사항
- PVC(영구 볼륨 클레임)이 CSI(Container Storage Interface) 볼륨 스냅샷을 지원하는 스토리지 클래스에 있는지 확인합니다.
-
OpenShift CLI(
oc
)를 설치합니다. - 선택 사항: 스냅샷을 생성할 VM의 전원을 끕니다.
절차
YAML 파일을 생성하여 새
VirtualMachineSnapshot
의 이름과 소스 VM의 이름을 지정하는VirtualMachineSnapshot
오브젝트를 정의합니다.예를 들어 다음과 같습니다.
apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineSnapshot metadata: name: my-vmsnapshot 1 spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm 2
VirtualMachineSnapshot
리소스를 생성합니다. 스냅샷 컨트롤러에서VirtualMachineSnapshotContent
오브젝트를 생성하여VirtualMachineSnapshot
에 바인딩하고VirtualMachineSnapshot
오브젝트의status
및readyToUse
필드를 업데이트합니다.$ oc create -f <my-vmsnapshot>.yaml
선택 사항: 온라인 스냅샷을 생성하는 경우
wait
명령을 사용하여 스냅샷 상태를 모니터링할 수 있습니다.다음 명령을 실행합니다.
$ oc wait my-vm my-vmsnapshot --for condition=Ready
스냅샷 상태를 확인합니다.
-
InProgress
- 온라인 스냅샷 작업이 아직 진행 중입니다. -
Succeeded
- 온라인 스냅샷 작업이 성공적으로 완료되었습니다. Failed
- 온라인 스냅샷 작업이 실패했습니다.참고온라인 스냅샷에는 5분(
5
분)이라는 기본 일정이 있습니다. 5분 내에 스냅샷이 성공적으로 완료되지 않으면 상태가failed
로 설정됩니다. 나중에 파일 시스템이 손상되고 VM이 수정되지 않지만failed
스냅샷 이미지를 삭제할 때까지 상태는 실패로 유지됩니다.기본 시간 기한을 변경하려면 스냅샷 작업이 시간 초과되기 전에 지정할 시간(
m
) 또는 초(s
)로 지정된 시간을 사용하여 VM 스냅샷 사양에FailureDeadline
속성을 추가합니다.시간 기한을 설정하지 않으려면 0을 지정할 수 있지만
0
은 응답하지 않는 VM이 발생할 수 있으므로 일반적으로 권장되지 않습니다.m
또는s
와 같은 시간 단위를 지정하지 않으면 기본값은 초(s
)입니다.
-
검증
VirtualMachineSnapshot
오브젝트가 생성되고VirtualMachineSnapshotContent
에 바인딩되었는지 확인합니다.readyToUse
플래그를true
로 설정해야 합니다.$ oc describe vmsnapshot <my-vmsnapshot>
출력 예
apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineSnapshot metadata: creationTimestamp: "2020-09-30T14:41:51Z" finalizers: - snapshot.kubevirt.io/vmsnapshot-protection generation: 5 name: mysnap namespace: default resourceVersion: "3897" selfLink: /apis/snapshot.kubevirt.io/v1alpha1/namespaces/default/virtualmachinesnapshots/my-vmsnapshot uid: 28eedf08-5d6a-42c1-969c-2eda58e2a78d spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm status: conditions: - lastProbeTime: null lastTransitionTime: "2020-09-30T14:42:03Z" reason: Operation complete status: "False" 1 type: Progressing - lastProbeTime: null lastTransitionTime: "2020-09-30T14:42:03Z" reason: Operation complete status: "True" 2 type: Ready creationTime: "2020-09-30T14:42:03Z" readyToUse: true 3 sourceUID: 355897f3-73a0-4ec4-83d3-3c2df9486f4f virtualMachineSnapshotContentName: vmsnapshot-content-28eedf08-5d6a-42c1-969c-2eda58e2a78d 4
-
VirtualMachineSnapshotContent
리소스의spec:volumeBackups
속성을 확인하여 예상 PVC가 스냅샷에 포함되어 있는지 확인합니다.
9.20.11.6. 스냅샷 표시를 사용하여 온라인 스냅샷 생성 확인
스냅샷 표시는 온라인 VM(가상 시스템) 스냅샷 작업에 대한 컨텍스트 정보입니다. 오프라인 VM(가상 시스템) 스냅샷 작업에는 표시를 사용할 수 없습니다. 표시는 온라인 스냅샷 생성에 대한 세부 정보를 설명하는 데 유용합니다.
사전 요구 사항
- 표시를 보려면 CLI 또는 웹 콘솔을 사용하여 온라인 VM 스냅샷을 생성을 시도해야 합니다.
절차
다음 중 하나를 수행하여 스냅샷 표시의 출력을 표시합니다.
-
CLI를 사용하여 생성된 스냅샷의 경우 status 필드의
VirtualMachineSnapshot
오브젝트 YAML의 표시기 출력을 확인합니다. - 웹 콘솔을 사용하여 생성한 스냅샷의 경우 스냅샷 세부 정보 화면에서 가상 머신 스냅샷 > 상태를 클릭합니다.
-
CLI를 사용하여 생성된 스냅샷의 경우 status 필드의
온라인 VM 스냅샷의 상태를 확인합니다.
-
Online
에서는 온라인 스냅샷 생성 중에 VM이 실행 중임을 나타냅니다. -
NoGuestAgent
는 온라인 스냅샷을 생성하는 동안 QEMU 게스트 에이전트가 실행되지 않았음을 나타냅니다. QEMU 게스트 에이전트가 설치되지 않았거나 실행 중이거나 다른 오류로 인해 QEMU 게스트 에이전트를 사용하여 파일 시스템을 중지하고 해석할 수 없습니다.
-
9.20.11.7. 웹 콘솔을 사용하여 스냅샷에서 가상 머신 복원
웹 콘솔에서 스냅샷으로 표시한 이전 구성으로 VM(가상 머신)을 복원할 수 있습니다.
절차
-
사이드 메뉴에서 가상화
VirtualMachine를 클릭합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
-
가상 머신이 실행 중인 경우 작업
중지 를 클릭하여 전원을 끕니다. - 스냅샷 탭을 클릭합니다. 페이지에는 가상 머신과 연결된 스냅샷 목록이 표시됩니다.
VM 스냅샷을 복원하는 다음 방법 중 하나를 선택합니다.
- VM을 복원하기 위해 소스로 사용할 스냅샷에서 복원을 클릭합니다.
-
스냅샷을 선택하여 스냅샷 세부 정보 화면을 열고 작업
VirtualMachineSnapshot 복원 을 클릭합니다.
- 확인 팝업 창에서 복원을 클릭하여 스냅샷에 표시된 VM을 이전 구성으로 복원합니다.
9.20.11.8. CLI를 사용하여 스냅샷에서 가상 머신 복원
VM 스냅샷을 사용하여 기존 VM(가상 머신)을 이전 구성으로 복원할 수 있습니다. 오프라인 VM 스냅샷에서만 복원할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. - 이전 상태로 복원하려는 VM의 전원을 끕니다.
절차
YAML 파일을 생성하여 복원할 VM의 이름과 소스로 사용할 스냅샷 이름을 지정하는
VirtualMachineRestore
오브젝트를 정의합니다.예를 들어 다음과 같습니다.
apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineRestore metadata: name: my-vmrestore 1 spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm 2 virtualMachineSnapshotName: my-vmsnapshot 3
VirtualMachineRestore
리소스를 만듭니다. 스냅샷 컨트롤러는VirtualMachineRestore
오브젝트의 상태 필드를 업데이트하고 기존 VM 구성을 스냅샷의 콘텐츠로 교체합니다.$ oc create -f <my-vmrestore>.yaml
검증
VM이 스냅샷에 표시된 이전 상태로 복원되었는지 확인합니다.
complete
플래그가true
로 설정되어야 합니다.$ oc get vmrestore <my-vmrestore>
출력 예
apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineRestore metadata: creationTimestamp: "2020-09-30T14:46:27Z" generation: 5 name: my-vmrestore namespace: default ownerReferences: - apiVersion: kubevirt.io/v1 blockOwnerDeletion: true controller: true kind: VirtualMachine name: my-vm uid: 355897f3-73a0-4ec4-83d3-3c2df9486f4f resourceVersion: "5512" selfLink: /apis/snapshot.kubevirt.io/v1alpha1/namespaces/default/virtualmachinerestores/my-vmrestore uid: 71c679a8-136e-46b0-b9b5-f57175a6a041 spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm virtualMachineSnapshotName: my-vmsnapshot status: complete: true 1 conditions: - lastProbeTime: null lastTransitionTime: "2020-09-30T14:46:28Z" reason: Operation complete status: "False" 2 type: Progressing - lastProbeTime: null lastTransitionTime: "2020-09-30T14:46:28Z" reason: Operation complete status: "True" 3 type: Ready deletedDataVolumes: - test-dv1 restoreTime: "2020-09-30T14:46:28Z" restores: - dataVolumeName: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1 persistentVolumeClaim: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1 volumeName: datavolumedisk1 volumeSnapshotName: vmsnapshot-28eedf08-5d6a-42c1-969c-2eda58e2a78d-volume-datavolumedisk1
9.20.11.9. 웹 콘솔에서 가상 머신 스냅샷 삭제
웹 콘솔을 사용하여 기존 가상 머신 스냅샷을 삭제할 수 있습니다.
절차
-
사이드 메뉴에서 가상화
VirtualMachine를 클릭합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- 스냅샷 탭을 클릭합니다. 페이지에는 가상 머신과 연결된 스냅샷 목록이 표시됩니다.
- 삭제할 가상 머신의 옵션 메뉴 를 클릭하고 VirtualMachineSnapshot 삭제 를 선택합니다.
- 확인 팝업 창에서 삭제를 클릭하여 스냅샷을 삭제합니다.
9.20.11.10. CLI에서 가상 머신 스냅샷 삭제
적절한 VirtualMachineSnapshot
오브젝트를 삭제하여 기존 VM(가상 머신) 스냅샷을 삭제할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
VirtualMachineSnapshot
오브젝트를 삭제합니다. 스냅샷 컨트롤러는VirtualMachineSnapshot
을 연결된VirtualMachineSnapshotContent
오브젝트와 함께 삭제합니다.$ oc delete vmsnapshot <my-vmsnapshot>
검증
스냅샷이 삭제되고 더 이상 이 VM에 연결되어 있지 않은지 확인합니다.
$ oc get vmsnapshot
9.20.11.11. 추가 리소스
9.20.12. 로컬 가상 머신 디스크를 다른 노드로 이동
로컬 볼륨 스토리지를 사용하는 가상 머신을 특정 노드에서 실행하도록 이동할 수 있습니다.
다음과 같은 이유로 가상 머신을 특정 노드로 이동할 수 있습니다.
- 현재 노드에서는 로컬 스토리지 구성을 제한합니다.
- 새 노드가 해당 가상 머신의 워크로드에 더 최적화되어 있습니다.
로컬 스토리지를 사용하는 가상 머신을 이동하려면 데이터 볼륨을 사용하여 기본 볼륨을 복제해야 합니다. 복제 작업이 완료되면 새 데이터 볼륨을 사용하도록 가상 머신 구성을 편집하거나 새 데이터 볼륨을 다른 가상 머신에 추가할 수 있습니다.
사전 할당을 활성화하거나 단일 데이터 볼륨에 대해 복제 중에 디스크 공간을 사전 할당하는 경우 CDI(Containerized Data Importer)가 디스크 공간을 사전 할당합니다. 사전 할당을 통해 쓰기 성능이 향상됩니다. 자세한 내용은 데이터 볼륨에 대한 사전 할당 사용을 참조하십시오.
cluster-admin
역할이 없는 사용자는 네임스페이스에 볼륨을 복제하려면 추가 사용자 권한이 필요합니다.
9.20.12.1. 다른 노드에 로컬 볼륨 복제
가상 머신 디스크를 특정 노드에서 실행하기 위해 기본 PVC(영구 볼륨 클레임)를 복제하여 가상 머신 디스크를 이동할 수 있습니다.
가상 머신 디스크가 올바른 노드에 복제되었는지 확인하려면 새 PV(영구 볼륨)를 생성하거나 올바른 노드에서 가상 머신 디스크를 확인합니다. 데이터 볼륨에서 참조할 수 있도록 PV에 고유한 라벨을 적용하십시오.
대상 PV는 소스 PVC와 크기가 같거나 커야 합니다. 대상 PV가 소스 PVC보다 작으면 복제 작업이 실패합니다.
사전 요구 사항
- 가상 머신이 실행되고 있지 않아야 합니다. 가상 머신 디스크를 복제하기 전에 가상 머신의 전원을 끄십시오.
절차
노드에 새 로컬 PV를 생성하거나 노드의 기존 로컬 PV를 확인합니다.
nodeAffinity.nodeSelectorTerms
매개변수를 포함하는 로컬 PV를 생성합니다. 다음 매니페스트에서는node01
에10Gi
로컬 PV를 생성합니다.kind: PersistentVolume apiVersion: v1 metadata: name: <destination-pv> 1 annotations: spec: accessModes: - ReadWriteOnce capacity: storage: 10Gi 2 local: path: /mnt/local-storage/local/disk1 3 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node01 4 persistentVolumeReclaimPolicy: Delete storageClassName: local volumeMode: Filesystem
대상 노드에 이미 존재하는 PV를 확인합니다. 구성에서
nodeAffinity
필드를 확인하여 PV가 프로비저닝되는 노드를 확인할 수 있습니다.$ oc get pv <destination-pv> -o yaml
다음 스니펫은 PV가
node01
에 있음을 보여줍니다.출력 예
... spec: nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname 1 operator: In values: - node01 2 ...
PV에 고유한 라벨을 추가합니다.
$ oc label pv <destination-pv> node=node01
다음을 참조하는 데이터 볼륨 매니페스트를 생성합니다.
- 가상 머신의 PVC 이름 및 네임스페이스
- 이전 단계에서 PV에 적용한 라벨
대상 PV의 크기
apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: <clone-datavolume> 1 spec: source: pvc: name: "<source-vm-disk>" 2 namespace: "<source-namespace>" 3 pvc: accessModes: - ReadWriteOnce selector: matchLabels: node: node01 4 resources: requests: storage: <10Gi> 5
클러스터에 데이터 볼륨 매니페스트를 적용하여 복제 작업을 시작합니다.
$ oc apply -f <clone-datavolume.yaml>
데이터 볼륨은 가상 머신의 PVC를 특정 노드의 PV에 복제합니다.
9.20.13. 빈 디스크 이미지를 추가하여 가상 스토리지 확장
OpenShift Virtualization에 빈 디스크 이미지를 추가하여 스토리지 용량을 늘리거나 새 데이터 파티션을 만들 수 있습니다.
9.20.13.1. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.
9.20.13.2. 데이터 볼륨에 빈 디스크 이미지 만들기
데이터 볼륨 구성 파일을 사용자 정의하고 배포하여 영구 볼륨 클레임에 빈 디스크 이미지를 새로 만들 수 있습니다.
사전 요구 사항
- 사용 가능한 영구 볼륨이 1개 이상 있습니다.
-
OpenShift CLI(
oc
)를 설치합니다.
절차
DataVolume
매니페스트를 편집합니다.apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: blank-image-datavolume spec: source: blank: {} pvc: # Optional: Set the storage class or omit to accept the default # storageClassName: "hostpath" accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
다음 명령을 실행하여 빈 디스크 이미지를 만듭니다.
$ oc create -f <blank-image-datavolume>.yaml
9.20.13.3. 추가 리소스
- 데이터 볼륨 작업에 대한 쓰기 성능을 개선 하도록 사전 할당 모드를 구성합니다.
9.20.14. 스마트 복제를 사용하여 데이터 볼륨 복제
스마트 복제는 Red Hat OpenShift Data Foundation의 기본 제공 기능입니다. 스마트 복제는 호스트 지원 복제보다 더 빠르고 효율적입니다.
스마트 복제를 활성화하기 위해 특별히 수행해야 할 작업은 없지만 이 기능을 사용하려면 스토리지 환경이 스마트 복제와 호환되는지 확인해야 합니다.
PVC(영구 볼륨 클레임) 소스를 사용하여 데이터 볼륨을 생성하면 복제 프로세스가 자동으로 시작됩니다. 해당 환경에서 스마트 복제를 지원하는지와 관계없이 데이터 볼륨 복제본은 항상 제공됩니다. 그러나 스토리지 공급자가 스마트 복제를 지원하는 경우에만 스마트 복제의 성능적인 이점을 활용할 수 있습니다.
9.20.14.1. 스마트 복제 정보
데이터 볼륨이 스마트 복제될 때는 다음 작업이 수행됩니다.
- 소스 PVC(영구 볼륨 클레임)의 스냅샷이 생성됩니다.
- 스냅샷에서 PVC가 생성됩니다.
- 스냅샷이 삭제됩니다.
9.20.14.2. 데이터 볼륨 복제
사전 요구 사항
스마트 복제를 수행하려면 다음 조건이 필요합니다.
- 스토리지 공급자에서 스냅샷을 지원해야 합니다.
- 소스 및 대상 PVC가 동일한 스토리지 클래스에 정의되어 있어야 합니다.
- 소스 및 대상 PVC는 동일한 volumeMode를 공유합니다.
-
VolumeSnapshotClass
오브젝트에서 소스 및 대상 PVC 모두에 정의된 스토리지 클래스를 참조해야 합니다.
절차
데이터 볼륨 복제를 시작하려면 다음을 수행합니다.
DataVolume
오브젝트에 대해 새 데이터 볼륨의 이름, 소스 PVC의 이름과 네임스페이스를 지정하는 YAML 파일을 생성합니다. 이 예제에서는 스토리지 API를 지정하므로 accessModes 또는 volumeMode를 지정할 필요가 없습니다. 최적의 값을 자동으로 계산합니다.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 storage: 4 resources: requests: storage: <2Gi> 5
데이터 볼륨을 생성하여 PVC 복제를 시작합니다.
$ oc create -f <cloner-datavolume>.yaml
참고데이터 볼륨이 있으면 PVC가 준비될 때까지 가상 머신이 시작되지 않으므로 PVC가 복제되는 동안 새 데이터 볼륨을 참조하는 가상 머신을 생성할 수 있습니다.
9.20.14.3. 추가 리소스
- 가상 머신 디스크의 영구 볼륨 클레임을 새 데이터 볼륨으로 복제
- 데이터 볼륨 작업에 대한 쓰기 성능을 개선 하도록 사전 할당 모드를 구성합니다.
- 스토리지 프로파일 사용자 정의
9.20.15. 부팅 소스 생성 및 사용
부팅 소스에는 부팅 가능한 운영 체제(OS) 및 OS의 모든 구성 설정(예: 드라이버)이 포함되어 있습니다.
부팅 소스를 사용하여 특정 구성으로 가상 머신 템플릿을 생성합니다. 이러한 템플릿은 사용 가능한 여러 가상 머신을 생성하는 데 사용할 수 있습니다.
빠른 시작 둘러보기는 사용자 정의 부팅 소스 생성, 부팅 소스 업로드 및 기타 작업을 지원하기 위해 OpenShift Container Platform 웹 콘솔에서 사용할 수 있습니다. 도움말 메뉴에서 빠른 시작을 선택하여 빠른 시작 둘러보기를 확인합니다.
9.20.15.1. 가상 머신 및 부팅 소스 정보
가상 시스템은 가상 시스템 정의와 데이터 볼륨에서 지원하는 하나 이상의 디스크로 구성됩니다. 가상 머신 템플릿을 사용하면 사전 정의된 가상 머신 사양을 사용하여 가상 머신을 생성할 수 있습니다.
모든 가상 머신 템플릿에는 구성된 드라이버를 포함하여 완전히 구성된 가상 머신 디스크 이미지인 부팅 소스가 필요합니다. 각 가상 머신 템플릿에는 부팅 소스에 대한 포인터가 있는 가상 시스템 정의가 포함되어 있습니다. 각 부팅 소스에는 사전 정의된 이름과 네임스페이스가 있습니다. 일부 운영 체제의 경우 부팅 소스가 자동으로 제공됩니다. 제공되지 않는 경우 관리자는 사용자 지정 부팅 소스를 준비해야 합니다.
제공된 부팅 소스가 최신 버전의 운영 체제로 자동 업데이트됩니다. 자동 업데이트됨 부팅 소스의 경우 PVC(영구 볼륨 클레임)가 클러스터의 기본 스토리지 클래스를 사용하여 생성됩니다. 구성 후 다른 기본 스토리지 클래스를 선택하는 경우 이전 기본 스토리지 클래스로 구성된 클러스터 네임스페이스의 기존 데이터 볼륨을 삭제해야 합니다.
부팅 소스 기능을 사용하려면 OpenShift Virtualization의 최신 릴리스를 설치합니다. 네임스페이스 openshift-virtualization-os-images
는 기능을 활성화하고 OpenShift Virtualization Operator와 함께 설치됩니다. 부팅 소스 기능이 설치되면 부팅 소스를 생성하고 템플릿에 연결한 다음 템플릿에서 가상 머신을 생성할 수 있습니다.
로컬 파일 업로드, 기존 PVC 복제, 레지스트리에서 가져오기 또는 URL을 통해 채워지는 PVC(영구 볼륨 클레임)를 사용하여 부팅 소스를 정의합니다. 웹 콘솔을 사용하여 가상 머신 템플릿에 부팅 소스를 연결합니다. 부팅 소스를 가상 머신 템플릿에 연결한 후 템플릿에서 완전히 구성된 즉시 사용할 수 있는 가상 시스템을 원하는 만큼 생성합니다.
9.20.15.2. RHEL 이미지를 부팅 소스로 가져오기
이미지 URL을 지정하여 RHEL(Red Hat Enterprise Linux) 이미지를 부팅 소스로 가져올 수 있습니다.
사전 요구 사항
- 운영 체제 이미지가 있는 웹 페이지에 액세스해야 합니다. 예를 들어 이미지를 사용하여 Red Hat Enterprise Linux 웹 페이지를 다운로드합니다.
절차
-
OpenShift Container Platform 콘솔의 사이드 메뉴에서 가상화
템플릿 을 클릭합니다. - 부팅 소스를 구성할 RHEL 템플릿을 확인하고 소스 추가를 클릭합니다.
- 템플릿에 부팅 소스 추가 창의 부팅 소스 유형 목록에서 URL(PVC 생성) 을 선택합니다.
- RHEL 다운로드 페이지를 클릭하여 Red Hat 고객 포털에 액세스합니다. 사용 가능한 설치 프로그램 및 이미지 목록이 Red Hat Enterprise Linux 다운로드 페이지에 표시됩니다.
- 다운로드하려는 Red Hat Enterprise Linux KVM 게스트 이미지를 식별합니다. 지금 다운로드를 마우스 오른쪽 버튼으로 클릭하고 이미지의 URL을 복사합니다.
- 템플릿에 부팅 소스 추가 창에서 URL 가져오기 필드에 URL을 붙여넣고 저장 및 가져오기 를 클릭합니다.
검증
- 템플릿이 템플릿 페이지의 부팅 소스 열에 녹색 확인 표시를 표시하는지 확인합니다.
이제 이 템플릿을 사용하여 RHEL 가상 머신을 생성할 수 있습니다.
9.20.15.3. 가상 머신 템플릿용 부팅 소스 추가
가상 머신 또는 사용자 지정 템플릿을 생성하기 위해 사용할 가상 머신 템플릿을 위한 부팅 소스를 구성할 수 있습니다. 가상 머신 템플릿이 부팅 소스로 구성되면 템플릿 페이지에서 사용 가능한 Source 로 레이블이 지정됩니다. 템플릿에 부팅 소스를 추가한 후 템플릿에서 새 가상 머신을 생성할 수 있습니다.
다음과 같은 4가지 방법으로 웹 콘솔에서 부팅 소스를 선택하고 추가할 수 있습니다.
- 로컬 파일 업로드 (PVC 생성)
- URL(PVC 생성)
- 복제(PVC 생성)
- 레지스트리(PVC 생성)
사전 요구 사항
-
부팅 소스를 추가하려면,
os-images.kubevirt.io:edit
RBAC 역할의 사용자 또는 관리자로 로그인해야 합니다. 부팅 소스가 추가된 템플릿에서 가상 머신을 생성하려면 특정 권한이 필요하지 않습니다. - 로컬 파일을 업로드하려면 운영 체제 이미지 파일이 로컬 머신에 있어야 합니다.
- URL을 통해 가져오려면 운영 체제 이미지를 사용하여 웹 서버에 액세스해야 합니다. 예를 들면 이미지가 포함된 Red Hat Enterprise Linux 웹 페이지입니다.
- 기존 PVC를 복제하려면 PVC를 사용하여 프로젝트에 대한 액세스가 필요합니다.
- 레지스트리를 통해 가져오려면 컨테이너 레지스트리에 대한 액세스가 필요합니다.
절차
-
OpenShift Container Platform 콘솔의 사이드 메뉴에서 가상화
템플릿 을 클릭합니다. - 템플릿 옆에 있는 옵션 메뉴를 클릭하고 부팅 소스 편집 을 선택합니다.
- 디스크 추가를 클릭합니다.
- 디스크 추가 창에서 부팅 소스로 이 디스크 사용을 선택합니다.
- 디스크 이름을 입력하고 소스 (예 : Blank(PVC 생성)) 를 선택하거나 기존 PVC 사용.
- 영구 볼륨 클레임(PVC) 크기에 값을 입력하여 압축이 해제되지 않은 이미지에 적합한 PVC 크기를 지정하고 필요한 추가 공간을 지정합니다.
- 유형 (예: Disk 또는 CD-ROM )을 선택합니다.
선택 사항: 스토리지 클래스 를 클릭하고 디스크를 생성하는 데 사용되는 스토리지 클래스를 선택합니다. 일반적으로 이 스토리지 클래스는 모든 PVC에서 사용하도록 생성된 기본 스토리지 클래스입니다.
참고제공된 부팅 소스가 최신 버전의 운영 체제로 자동 업데이트됩니다. 자동 업데이트됨 부팅 소스의 경우 PVC(영구 볼륨 클레임)가 클러스터의 기본 스토리지 클래스를 사용하여 생성됩니다. 구성 후 다른 기본 스토리지 클래스를 선택하는 경우 이전 기본 스토리지 클래스로 구성된 클러스터 네임스페이스의 기존 데이터 볼륨을 삭제해야 합니다.
- 선택 사항: 최적화된 StorageProfile 설정을 지워 액세스 모드 또는 볼륨 모드를 편집합니다.
다음과 같이 부팅 소스를 저장할 적절한 방법을 선택합니다.
- 로컬 파일을 업로드한 경우 저장 및 업로드를 클릭합니다.
- URL 또는 레지스트리에서 콘텐츠를 가져온 경우 저장 및 가져오기를 클릭합니다.
- 기존 PVC를 복제한 경우 저장 및 복제를 클릭합니다.
부팅 소스가 포함된 사용자 정의 가상 머신 템플릿은 카탈로그 페이지에 나열됩니다. 이 템플릿을 사용하여 가상 머신을 생성할 수 있습니다.
9.20.15.4. 연결된 부팅 소스를 사용하여 템플릿에서 가상 머신 생성
템플릿에 부팅 소스를 추가한 후 템플릿에서 가상 머신을 생성할 수 있습니다.
절차
-
OpenShift Container Platform 웹 콘솔의 사이드 메뉴에서 가상화
카탈로그 를 클릭합니다. - 업데이트된 템플릿을 선택하고 Quick create VirtualMachine 를 클릭합니다.
VirtualMachine 세부 정보는 Starting 상태로 표시됩니다.
9.20.15.5. 추가 리소스
9.20.16. 가상 디스크 핫플러그
VM(가상 머신) 또는 VMI(가상 머신 인스턴스)를 중지하지 않고 가상 디스크를 추가하거나 제거할 수 있습니다.
9.20.16.1. 가상 디스크 핫플러그 정보
가상 디스크를 핫플러그 하면 가상 머신이 실행되는 동안 가상 디스크를 가상 머신 인스턴스에 연결합니다.
가상 디스크를 핫 플러그 해제하면 가상 머신이 실행되는 동안 가상 머신 인스턴스에서 가상 디스크를 분리합니다.
데이터 볼륨 및 PVC(영구 볼륨 클레임)만 핫플러그 및 핫 플러그 해제할 수 있습니다. 컨테이너 디스크를 핫 플러그 또는 핫 플러그 해제할 수 없습니다.
가상 디스크를 핫플러그한 후에는 가상 머신을 재시작하더라도 연결을 끊을 때까지 계속 연결됩니다.
9.20.16.2. virtio-scsi 정보
OpenShift Virtualization에서 각 VM(가상 머신)에는 virtio-scsi
컨트롤러가 있으므로 핫플러그된 디스크가 scsi
버스를 사용할 수 있습니다. virtio-scsi
컨트롤러는 성능 이점을 유지하면서 virtio
의 제한을 극복합니다. 확장성이 뛰어나고 4만 개 이상의 디스크 핫플러그를 지원합니다.
확장 불가능합니다. 각
디스크는 VM에서 제한된 PCI Express(PCIe) 슬롯 중 하나를 사용합니다. PCIe 슬롯은 다른 장치에서도 사용되며 사전에 예약해야 하므로 필요에 따라 슬롯을 사용할 수 없습니다.
virtio
9.20.16.3. CLI를 사용하여 가상 디스크 핫플러그
가상 머신이 실행되는 동안 VMI(가상 머신 인스턴스)에 연결하려는 가상 디스크를 핫플러그합니다.
사전 요구 사항
- 가상 디스크를 핫 플러그하려면 실행 중인 가상 머신이 있어야 합니다.
- 핫플러그에 사용할 수 있는 데이터 볼륨 또는 PVC(영구 볼륨 클레임)가 하나 이상 있어야 합니다.
절차
다음 명령을 실행하여 가상 디스크를 핫플러그합니다.
$ virtctl addvolume <virtual-machine|virtual-machine-instance> --volume-name=<datavolume|PVC> \ [--persist] [--serial=<label-name>]
-
선택적
--persist
플래그를 사용하여 핫플러그 디스크를 가상 머신 사양에 영구적으로 마운트된 가상 디스크로 추가합니다. 가상 시스템을 중지, 다시 시작 또는 재부팅하여 가상 디스크를 영구적으로 마운트합니다.--persist
플래그를 지정한 후에는 더 이상 핫 플러그를 연결하거나 가상 디스크를 핫 플러그 해제할 수 없습니다.--persist
플래그는 가상 머신 인스턴스가 아닌 가상 머신에 적용됩니다. -
선택적
--serial
플래그를 사용하면 선택한 영숫자 문자열 레이블을 추가할 수 있습니다. 이렇게 하면 게스트 가상 머신에서 핫플러그 디스크를 식별하는 데 도움이 됩니다. 이 옵션을 지정하지 않으면 레이블은 기본적으로 핫플러그 데이터 볼륨 또는 PVC의 이름으로 설정됩니다.
-
선택적
9.20.16.4. CLI를 사용하여 가상 디스크 핫 플러그 연결
가상 머신이 실행되는 동안 VMI(가상 머신 인스턴스)에서 분리할 가상 디스크의 핫 플러그를 해제합니다.
사전 요구 사항
- 가상 머신이 실행 중이어야 합니다.
- 하나 이상의 데이터 볼륨 또는 PVC(영구 볼륨 클레임)를 사용할 수 있고 핫플러그해야 합니다.
절차
다음 명령을 실행하여 가상 디스크의 핫 플러그를 해제합니다.
$ virtctl removevolume <virtual-machine|virtual-machine-instance> --volume-name=<datavolume|PVC>
9.20.16.5. 웹 콘솔을 사용하여 가상 디스크 핫플러그
가상 머신이 실행되는 동안 VMI(가상 머신 인스턴스)에 연결하려는 가상 디스크를 핫플러그합니다. 가상 디스크를 핫플러그하면 연결 해제될 때까지 VMI에 남아 있습니다.
사전 요구 사항
- 가상 디스크를 핫 플러그하려면 실행 중인 가상 머신이 있어야 합니다.
절차
-
사이드 메뉴에서 가상화
VirtualMachine를 클릭합니다. - 가상 디스크를 핫플러그할 실행 중인 가상 머신을 선택합니다.
- VirtualMachine 세부 정보 페이지에서 디스크 탭을 클릭합니다.
- 디스크 추가를 클릭합니다.
- 디스크 추가(hot plugged) 창에서 핫 플러그로 연결하려는 가상 디스크에 대한 정보를 입력합니다.
- 저장을 클릭합니다.
9.20.16.6. 웹 콘솔을 사용하여 가상 디스크 핫 플러그 연결
가상 머신이 실행되는 동안 VMI(가상 머신 인스턴스)에서 분리할 가상 디스크의 핫 플러그를 해제합니다.
사전 요구 사항
- 가상 머신이 핫플러그 디스크로 연결되어 있어야 합니다.
절차
-
사이드 메뉴에서 가상화
VirtualMachine를 클릭합니다. - 핫 플러그 해제하려는 디스크로 실행 중인 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- 디스크 탭에서 핫 플러그 해제할 가상 디스크의 옵션 메뉴 를 클릭합니다.
- Detach (분리)를 클릭합니다.
9.20.17. 가상 머신에서 컨테이너 디스크 사용
가상 머신 이미지를 컨테이너 디스크에 빌드하고 컨테이너 레지스트리에 저장할 수 있습니다. 그러면 컨테이너 디스크를 가상 머신의 영구 스토리지로 가져오거나 임시 저장을 위해 가상 머신에 직접 연결할 수 있습니다.
대규모 컨테이너 디스크를 사용하는 경우 I/O 트래픽이 증가하여 작업자 노드에 영향을 미칠 수 있습니다. 이로 인해 노드를 사용할 수 없게 될 수 있습니다. 다음을 통해 이 문제를 해결할 수 있습니다.
9.20.17.1. 컨테이너 디스크 정보
컨테이너 디스크는 컨테이너 이미지 레지스트리에 컨테이너 이미지로 저장되어 있는 가상 머신 이미지입니다. 컨테이너 디스크를 사용하면 동일한 디스크 이미지를 여러 가상 머신에 제공하고 다수의 가상 머신 복제본을 생성할 수 있습니다.
컨테이너 디스크는 가상 머신에 연결된 데이터 볼륨을 사용하여 PVC(영구 볼륨 클레임)로 가져오거나 가상 머신에 임시 containerDisk
볼륨으로 직접 연결할 수 있습니다.
9.20.17.1.1. 데이터 볼륨을 사용하여 컨테이너 디스크를 PVC로 가져오기
CDI(Containerized Data Importer)를 사용하여 데이터 볼륨을 통해 컨테이너 디스크를 PVC로 가져옵니다. 그러면 영구 저장을 위해 데이터 볼륨을 가상 머신에 연결할 수 있습니다.
9.20.17.1.2. 컨테이너 디스크를 가상 머신에 containerDisk
볼륨으로 연결
containerDisk
는 임시 볼륨입니다. 이 볼륨은 가상 머신이 중지, 재시작 또는 삭제될 때 삭제됩니다. containerDisk
볼륨이 포함된 가상 머신이 시작되면 레지스트리에서 컨테이너 이미지가 풀링되어 가상 머신이 호스팅되는 노드에서 호스팅됩니다.
CD-ROM과 같은 읽기 전용 파일 시스템이나 일회용 가상 머신에는 containerDisk
볼륨을 사용하십시오.
데이터가 호스팅 노드의 로컬 스토리지에 임시로 기록되므로 읽기-쓰기 파일 시스템에는 containerDisk
볼륨을 사용하지 않는 것이 좋습니다. 이 볼륨을 사용하면 데이터를 대상 노드로 마이그레이션해야 하므로 노드 유지보수의 경우와 같이 가상 머신의 실시간 마이그레이션 속도가 느려집니다. 또한 노드의 전원이 끊기거나 노드가 예기치 않게 종료되면 모든 데이터가 손실됩니다.
9.20.17.2. 가상 머신용 컨테이너 디스크 준비
컨테이너 디스크를 가상 머신에서 사용하려면 가상 머신 이미지를 사용하여 빌드하고 컨테이너 레지스트리에 푸시해야 합니다. 그러면 데이터 볼륨을 사용하여 컨테이너 디스크를 PVC로 가져와서 가상 머신에 연결하거나 컨테이너 디스크를 임시 containerDisk
볼륨으로 가상 머신에 직접 연결할 수 있습니다.
컨테이너 디스크 내부의 디스크 이미지 크기는 컨테이너 디스크가 호스팅되는 레지스트리의 최대 계층 크기로 제한됩니다.
Red Hat Quay 의 경우 Red Hat Quay를 처음 배포할 때 생성된 YAML 구성 파일을 편집하여 최대 계층 크기를 변경할 수 있습니다.
사전 요구 사항
-
podman
을 아직 설치하지 않은 경우 설치합니다. - 가상 머신 이미지는 QCOW2 또는 RAW 형식이어야 합니다.
절차
Dockerfile을 생성하여 가상 머신 이미지를 컨테이너 이미지로 빌드합니다. 가상 머신 이미지는 UID가
107
인 QEMU에 속하고 컨테이너 내부의/disk/
디렉터리에 있어야 합니다. 그런 다음/disk/
디렉터리에 대한 권한을0440
으로 설정해야 합니다.다음 예제에서는 Red Hat UBI(Universal Base Image)를 사용하여 첫 번째 단계에서 이러한 구성 변경을 처리하고, 두 번째 단계에서 최소
scratch
이미지를 사용하여 결과를 저장합니다.$ cat > Dockerfile << EOF FROM registry.access.redhat.com/ubi8/ubi:latest AS builder ADD --chown=107:107 <vm_image>.qcow2 /disk/ 1 RUN chmod 0440 /disk/* FROM scratch COPY --from=builder /disk/* /disk/ EOF
- 1
- 여기서 <vm_image>는 QCOW2 또는 RAW 형식의 가상 머신 이미지입니다.
원격 가상 머신 이미지를 사용하려면<vm_image>.qcow2
를 원격 이미지의 전체 URL로 교체하십시오.
컨테이너를 빌드하고 태그를 지정합니다.
$ podman build -t <registry>/<container_disk_name>:latest .
컨테이너 이미지를 레지스트리에 푸시합니다.
$ podman push <registry>/<container_disk_name>:latest
컨테이너 레지스트리에 TLS가 없는 경우 컨테이너 디스크를 영구 스토리지로 가져오기 전에 이를 비보안 레지스트리로 추가해야 합니다.
9.20.17.3. 컨테이너 레지스트리에서 비보안 레지스트리를 사용하도록 TLS 비활성화
HyperConverged
사용자 정의 리소스의 insecureRegistries
필드를 편집하여 하나 이상의 컨테이너 레지스트리에 대해 TLS(전송 계층 보안)를 비활성화할 수 있습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 로그인합니다.
절차
HyperConverged
사용자 지정 리소스를 편집하고 비보안 레지스트리 목록을spec.storageImport.insecureRegistries
필드에 추가합니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: storageImport: insecureRegistries: 1 - "private-registry-example-1:5000" - "private-registry-example-2:5000"
- 1
- 이 목록의 예제를 유효한 레지스트리 호스트 이름으로 바꿉니다.
9.20.17.4. 다음 단계
- 컨테이너 디스크를 가상 머신의 영구저장장치로 가져옵니다.
-
임시 스토리지에
containerDisk
볼륨을 사용하는 가상 머신을 생성합니다.
9.20.18. CDI 스크래치 공간 준비
9.20.18.1. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.
9.20.18.2. 스크래치 공간 정보
CDI(Containerized Data Importer)에는 가상 머신 이미지 가져오기 및 업로드와 같은 일부 작업을 완료하기 위해 스크래치 공간(임시 스토리지)이 필요합니다. 이 프로세스 동안 CDI는 대상 DV(데이터 볼륨)를 지원하는 PVC 크기와 같은 스크래치 공간 PVC를 프로비저닝합니다. 스크래치 공간 PVC는 작업이 완료되거나 중단된 후 삭제됩니다.
HyperConverged
사용자 지정 리소스의 spec.scratchSpaceStorageClass
필드에서 스크래치 공간 PVC를 바인딩하는 데 사용되는 스토리지 클래스를 정의할 수 있습니다.
정의된 스토리지 클래스가 클러스터의 스토리지 클래스와 일치하지 않으면 클러스터에 정의된 기본 스토리지 클래스가 사용됩니다. 클러스터에 기본 스토리지 클래스가 정의되어 있지 않은 경우에는 원래 DV 또는 PVC를 프로비저닝하는 데 사용된 스토리지 클래스가 사용됩니다.
CDI에서는 원본 데이터 볼륨을 지원하는 PVC에 관계없이 file
볼륨 모드로 스크래치 공간을 요청해야 합니다. 원본 PVC를 block
볼륨 모드로 지원하는 경우 file
볼륨 모드 PVC를 프로비저닝할 수 있는 스토리지 클래스를 정의해야 합니다.
수동 프로비저닝
스토리지 클래스가 없는 경우 CDI는 프로젝트에서 이미지의 크기 요구 사항과 일치하는 PVC를 사용합니다. 이러한 요구 사항과 일치하는 PVC가 없는 경우에는 CDI 가져오기 Pod가 적절한 PVC를 사용할 수 있거나 타임아웃 기능에서 Pod를 종료할 때까지 Pending 상태로 유지됩니다.
9.20.18.3. 스크래치 공간이 필요한 CDI 작업
유형 | 이유 |
---|---|
레지스트리 가져오기 | CDI에서는 이미지를 스크래치 공간으로 다운로드하고 레이어를 추출하여 이미지 파일을 찾아야 합니다. 그런 다음 해당 이미지 파일을 원시 디스크로 변환하기 위해 QEMU-IMG로 전달합니다. |
이미지 업로드 | QEMU-IMG에서는 STDIN의 입력을 허용하지 않습니다. 대신 변환을 위해 QEMU-IMG로 전달할 수 있을 때까지 업로드할 이미지를 스크래치 공간에 저장합니다. |
보관된 이미지의 HTTP 가져오기 | QEMU-IMG에서는 CDI에서 지원하는 아카이브 형식 처리 방법을 확인할 수 없습니다. 대신, QEMU-IMG에 전달할 때까지 해당 이미지를 보관하지 않고 스크래치 공간에 저장합니다. |
인증된 이미지의 HTTP 가져오기 | QEMU-IMG에서 인증을 부적절하게 처리합니다. 대신, QEMU-IMG로 전달할 때까지 이미지를 스크래치 공간에 저장하고 인증합니다. |
사용자 정의 인증서의 HTTP 가져오기 | QEMU-IMG에서는 HTTPS 끝점의 사용자 정의 인증서를 부적절하게 처리합니다. 대신, CDI에서는 파일을 QEMU-IMG에 전달할 때까지 이미지를 스크래치 공간에 다운로드합니다. |
9.20.18.4. 스토리지 클래스 정의
spec.scratchSpaceStorageClass
필드를 HyperConverged
CR(사용자 정의 리소스)에 추가하여 CR(Containerized Data Importer)에서 스크래치 공간을 할당할 때 사용하는 스토리지 클래스를 정의할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
다음 명령을 실행하여
HyperConverged
CR을 편집합니다.$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
spec.scratchSpaceStorageClass
필드를 CR에 추가하여 해당 값을 클러스터에 존재하는 스토리지 클래스의 이름으로 설정합니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: scratchSpaceStorageClass: "<storage_class>" 1
- 1
- 스토리지 클래스를 지정하지 않으면 CDI는 채워지는 영구 볼륨 클레임의 스토리지 클래스를 사용합니다.
-
기본 편집기를 저장하고 종료하여
HyperConverged
CR을 업데이트합니다.
9.20.18.5. CDI 지원 작업 매트릭스
이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.
콘텐츠 유형 | HTTP | HTTPS | HTTP 기본 인증 | 레지스트리 | 업로드 |
---|---|---|---|---|---|
KubeVirt (QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt(RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
✓ 지원되는 작업
□ 지원되지 않는 작업
* 스크래치 공간 필요
** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요
9.20.18.6. 추가 리소스
9.20.19. 영구 볼륨 다시 사용
정적으로 프로비저닝된 PV(영구 볼륨)를 다시 사용하려면 먼저 볼륨을 회수해야 합니다. 이를 위해서는 스토리지 구성을 다시 사용할 수 있도록 PV를 삭제해야 합니다.
9.20.19.1. 정적으로 프로비저닝된 영구 볼륨 회수 정보
PV(영구 볼륨)를 회수할 때는 PVC(영구 볼륨 클레임)에서 PV를 바인딩 해제하고 PV를 삭제합니다. 기본 스토리지에 따라 공유 스토리지를 수동으로 삭제해야 할 수도 있습니다.
그런 다음 PV 구성을 다시 사용하여 다른 이름으로 PV를 생성할 수 있습니다.
정적으로 프로비저닝된 PV를 회수하려면 PV에 Retain
이라는 회수 정책이 있어야 합니다. 회수 정책이 없으면 PVC를 PV에서 바인딩 해제할 때 PV의 상태가 실패가 됩니다.
OpenShift Container Platform 4에서는 Recycle
회수 정책이 사용되지 않습니다.
9.20.19.2. 정적으로 프로비저닝된 영구 볼륨 회수
PVC(영구 볼륨 클레임)를 바인딩 해제하고 PV를 삭제하여 정적으로 프로비저닝된 PV(영구 볼륨)를 회수합니다. 공유 스토리지를 수동으로 삭제해야 할 수도 있습니다.
정적으로 프로비저닝된 PV를 회수하는 방법은 기본 스토리지에 따라 다릅니다. 이 절차에서는 일반적인 접근법을 제공하며 사용 중인 스토리지에 따라 사용자 정의가 필요할 수 있습니다.
절차
PV의 회수 정책이
Retain
으로 설정되어 있는지 확인합니다.PV의 회수 정책을 확인합니다.
$ oc get pv <pv_name> -o yaml | grep 'persistentVolumeReclaimPolicy'
persistentVolumeReclaimPolicy
가Retain
으로 설정되지 않은 경우, 다음 명령을 사용하여 회수 정책을 편집합니다.$ oc patch pv <pv_name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
PV를 사용하는 리소스가 없는지 확인합니다.
$ oc describe pvc <pvc_name> | grep 'Mounted By:'
PVC를 사용하는 모든 리소스를 제거한 후 계속합니다.
PVC를 삭제하여 PV를 해제합니다.
$ oc delete pvc <pvc_name>
선택 사항: PV 구성을 YAML 파일로 내보냅니다. 이 절차의 뒷부분에서 공유 스토리지를 수동으로 제거하는 경우 이 구성을 참조할 수 있습니다. PV를 회수한 후 새 PV를 동일한 스토리지 구성으로 생성하기 위해 이 파일의
spec
매개변수를 기반으로 사용할 수도 있습니다.$ oc get pv <pv_name> -o yaml > <file_name>.yaml
PV를 삭제합니다.
$ oc delete pv <pv_name>
선택 사항: 스토리지 유형에 따라 공유 스토리지 폴더의 내용을 제거해야 할 수 있습니다.
$ rm -rf <path_to_share_storage>
선택 사항: 삭제된 PV와 동일한 스토리지 구성을 사용하는 PV를 생성합니다. 회수된 PV 구성을 이전에 내보낸 경우 해당 파일의
spec
매개변수를 새 PV 매니페스트의 기반으로 사용할 수 있습니다.참고충돌을 피하려면 새 PV 오브젝트에 삭제한 오브젝트와 다른 이름을 지정하는 것이 좋습니다.
$ oc create -f <new_pv_name>.yaml
추가 리소스
- 가상 머신 로컬 스토리지 구성
- OpenShift Container Platform 스토리지 설명서에는 영구 스토리지에 대한 자세한 내용이 있습니다.
9.20.20. 가상 머신 디스크 확장
VM(가상 머신) 디스크의 크기를 확대하여 디스크의 PVC(영구 볼륨 클레임) 크기를 조정하여 더 큰 스토리지 용량을 제공할 수 있습니다.
그러나 VM 디스크의 크기를 줄일 수는 없습니다.
9.20.20.1. 가상 머신 디스크 등록
VM 디스크 확대를 통해 가상 머신에서 추가 공간을 사용할 수 있습니다. 그러나 VM 소유자가 스토리지 사용 방법을 결정해야 합니다.
디스크가 Filesystem
PVC인 경우 일치하는 파일이 파일 시스템 오버헤드를 위해 일부 공간을 예약하면서 나머지 크기로 확장됩니다.
절차
확장할 VM 디스크의
PersistentVolumeClaim
매니페스트를 편집합니다.$ oc edit pvc <pvc_name>
spec.resource.requests.storage
속성 값을 더 큰 크기로 변경합니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: vm-disk-expand spec: accessModes: - ReadWriteMany resources: requests: storage: 3Gi 1 ...
- 1
- 늘릴 수 있는 VM 디스크 크기
9.20.20.2. 추가 리소스
9.20.21. 데이터 볼륨 삭제
oc
명령줄 인터페이스를 사용하여 데이터 볼륨을 수동으로 삭제할 수 있습니다.
가상 머신을 삭제하면 사용하는 데이터 볼륨이 자동으로 삭제됩니다.
9.20.21.1. 데이터 볼륨 정보
Dataolume
오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.
9.20.21.2. 모든 데이터 볼륨 나열
oc
명령줄 인터페이스를 사용하여 클러스터의 데이터 볼륨을 나열할 수 있습니다.
절차
다음 명령을 실행하여 모든 데이터 볼륨을 나열합니다.
$ oc get dvs
9.20.21.3. 데이터 볼륨 삭제
oc
CLI(명령줄 인터페이스)를 사용하여 데이터 볼륨을 삭제할 수 있습니다.
사전 요구 사항
- 삭제할 데이터 볼륨의 이름을 확인합니다.
절차
다음 명령을 실행하여 데이터 볼륨을 삭제합니다.
$ oc delete dv <datavolume_name>
참고이 명령은 현재 프로젝트에 존재하는 오브젝트만 삭제합니다. 삭제하려는 오브젝트가 다른 프로젝트 또는 네임스페이스에 있는 경우
-n <project_name>
옵션을 지정하십시오.