검색

8.18. 가상 머신 디스크

download PDF

8.18.1. 스토리지 기능

다음 표를 사용하여 OpenShift Virtualization의 로컬 및 공유 영구 스토리지에 대한 기능 가용성을 확인합니다.

8.18.1.1. OpenShift Virtualization 스토리지 기능 매트릭스

표 8.7. OpenShift Virtualization 스토리지 기능 매트릭스
 가상 머신 실시간 마이그레이션호스트 지원 가상 머신 디스크 복제스토리지 지원 가상 머신 디스크 복제가상 머신 스냅샷

OpenShift Container Storage: rbd 블록 모드 볼륨

있음

있음

있음

있음

OpenShift Virtualization hostpath 프로비전 프로그램

아니요

있음

아니요

아니요

기타 다중 노드 쓰기 가능 스토리지

[1]

있음

[2]

[2]

기타 단일 노드 쓰기 가능 스토리지

아니요

있음

[2]

[2]

  1. PVC에서 ReadWriteMany 액세스 모드를 요청해야 합니다.
  2. 스토리지 공급자는 Kubernetes 및 CSI Snapshot API를 모두 지원해야 합니다.
참고

다음을 사용하는 가상 머신은 실시간 마이그레이션할 수 없습니다.

  • RWO(ReadWriteOnce) 액세스 모드를 사용하는 스토리지 클래스
  • GPU 또는 SR-IOV 네트워크 인터페이스와 같은 패스스루(Passthrough) 기능 게이트가 비활성화된 GPU 또는 SR-IOV 네트워크 인터페이스

이러한 가상 머신의 경우 evictionStrategy 필드를 LiveMigrate로 설정하지 않도록 합니다.

8.18.2. 가상 머신 로컬 스토리지 구성

hostpath 프로비전 프로그램 기능을 사용하여 가상 머신의 로컬 스토리지를 구성할 수 있습니다.

8.18.2.1. hostpath 프로비전 프로그램 정보

hostpath 프로비전 프로그램은 OpenShift Virtualization용으로 설계된 로컬 스토리지 프로비전 프로그램입니다. 가상 머신의 로컬 스토리지를 구성하려면 먼저 hostpath 프로비전 프로그램을 활성화해야 합니다.

OpenShift Virtualization Operator를 설치하면 hostpath provisioner Operator가 자동으로 설치됩니다. 사용하려면 다음을 수행해야 합니다.

  • SELinux를 구성합니다.

    • RHCOS(Red Hat Enterprise Linux CoreOS) 8 작업자를 사용하는 경우 각 노드에서 MachineConfig 오브젝트를 생성해야 합니다.
    • 또는 SELinux 라벨 container_file_t를 각 노드의 PV(영구 볼륨) 백업 디렉터리에 적용합니다.
  • HostPathProvisioner 사용자 정의 리소스를 만듭니다.
  • hostpath 프로비전 프로그램에 대한 StorageClass 오브젝트를 만듭니다.

hostpath provisioner Operator는 사용자 정의 리소스를 생성할 때 각 노드에 프로비전 프로그램을 DaemonSet로 배포합니다. 사용자 정의 리소스 파일에서 hostpath 프로비전 프로그램에서 생성하는 영구 볼륨의 백업 디렉터리를 지정합니다.

8.18.2.2. RHCOS(Red Hat Enterprise Linux CoreOS) 8에서 hostpath 프로비전 프로그램에 대한 SELinux 구성

HostPathProvisioner 사용자 정의 리소스를 만들기 전에 SELinux를 구성해야 합니다. RHCOS(Red Hat Enterprise Linux CoreOS) 8 작업자에서 SELinux를 구성하려면 각 노드에 MachineConfig 오브젝트를 생성해야 합니다.

사전 요구 사항

  • 각 노드에 hostpath 프로비전 프로그램에서 생성하는 PV(영구 볼륨)에 대한 백업 디렉터리를 생성합니다.

    중요

    RHCOS에서 / 파티션을 읽기 전용이므로 백업 디렉터리는 파일 시스템의 루트 디렉터리에 있으면 안 됩니다. 예를 들어 /var/<directory_name>은 사용할 수 있지만 /< directory_name> 은 사용할 수 없습니다.

    주의

    운영 체제와 공간을 공유하는 디렉터리를 선택하면 해당 파티션의 공간이 소모되고 노드가 작동하지 않을 수 있습니다. 별도의 파티션을 생성하고 hostpath 프로비전 프로그램을 별도의 파티션으로 가리키므로 운영 체제와의 간섭을 방지합니다.

절차

  1. MachineConfig 파일을 생성합니다. 예를 들면 다음과 같습니다.

    $ touch machineconfig.yaml
  2. hostpath 프로비전 프로그램으로 PV를 생성할 디렉터리를 포함하도록 파일을 편집합니다. 예를 들면 다음과 같습니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 50-set-selinux-for-hostpath-provisioner
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.2.0
        systemd:
          units:
            - contents: |
                [Unit]
                Description=Set SELinux chcon for hostpath provisioner
                Before=kubelet.service
    
                [Service]
                ExecStart=/usr/bin/chcon -Rt container_file_t <backing_directory_path> 1
    
                [Install]
                WantedBy=multi-user.target
              enabled: true
              name: hostpath-provisioner.service
    1
    프로비전 프로그램으로 PV를 생성할 백업 디렉터리를 지정합니다. 이 디렉토리는 파일 시스템의 루트 디렉토리(/)에 있으면 안 됩니다.
  3. MachineConfig 오브젝트를 생성합니다.

    $ oc create -f machineconfig.yaml -n <namespace>

8.18.2.3. hostpath 프로비전 프로그램을 사용하여 로컬 스토리지 활성화

hostpath 프로비전 프로그램을 배포하고 가상 머신에서 로컬 스토리지를 사용하도록 설정하려면 먼저 HostPathProvisioner 사용자 정의 리소스를 만들어야 합니다.

사전 요구 사항

  • 각 노드에 hostpath 프로비전 프로그램에서 생성하는 PV(영구 볼륨)에 대한 백업 디렉터리를 생성합니다.

    중요

    / 파티션은 RHCOS(Red Hat Enterprise Linux CoreOS)에서 읽기 전용이므로 백업 디렉터리는 파일 시스템의 루트 디렉터리에 있지 않아야 합니다. 예를 들어 /var/<directory_name>은 사용할 수 있지만 /< directory_name> 은 사용할 수 없습니다.

    주의

    운영 체제와 공간을 공유하는 디렉터리를 선택하면 해당 파티션의 공간이 소모되고 노드가 작동하지 않을 수 있습니다. 별도의 파티션을 생성하고 hostpath 프로비전 프로그램을 별도의 파티션으로 가리키므로 운영 체제와의 간섭을 방지합니다.

  • SELinux 컨텍스트 container_file_t를 각 노드의 PV 백업 디렉터리에 적용합니다. 예를 들면 다음과 같습니다.

    $ sudo chcon -t container_file_t -R <backing_directory_path>
    참고

    RHCOS(Red Hat Enterprise Linux CoreOS) 8 작업자를 사용하는 경우 MachineConfig 매니페스트를 사용하여 SELinux를 구성해야 합니다.

절차

  1. HostPathProvisioner 사용자 정의 리소스 파일을 만듭니다. 예를 들면 다음과 같습니다.

    $ touch hostpathprovisioner_cr.yaml
  2. spec.pathConfig.path 값이 hostpath 프로비전 프로그램으로 PV를 생성할 디렉터리가 되도록 파일을 편집합니다. 예를 들면 다음과 같습니다.

    apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
    kind: HostPathProvisioner
    metadata:
      name: hostpath-provisioner
    spec:
      imagePullPolicy: IfNotPresent
      pathConfig:
        path: "<backing_directory_path>" 1
        useNamingPrefix: false 2
      workload: 3
    1
    프로비전 프로그램으로 PV를 생성할 백업 디렉터리를 지정합니다. 이 디렉토리는 파일 시스템의 루트 디렉토리(/)에 있으면 안 됩니다.
    2
    생성된 PV에 바인딩된 PVC(영구 볼륨 클레임) 이름을 디렉터리 이름의 접두부로 사용하려면 이 값을 true로 변경하십시오.
    3
    선택 사항: spec.workload 필드를 사용하여 hostpath 프로비전 프로그램에 대한 노드 배치 규칙을 구성할 수 있습니다.
    참고

    백업 디렉터리를 만들지 않은 경우 프로비전 프로그램에서 백업 디렉터리를 만들려고 합니다. container_file_t SELinux 컨텍스트를 적용하지 않은 경우 Permission denied 오류가 발생할 수 있습니다.

  3. openshift-cnv 네임스페이스에 사용자 정의 리소스를 만듭니다.

    $ oc create -f hostpathprovisioner_cr.yaml -n openshift-cnv

8.18.2.4. 스토리지 클래스 생성

스토리지 클래스를 생성할 때 해당 스토리지 클래스에 속하는 PV(영구 볼륨)의 동적 프로비저닝에 영향을 주는 매개변수를 설정합니다. StorageClass 오브젝트를 생성한 후에는 이 오브젝트의 매개변수를 업데이트할 수 없습니다.

중요

OpenShift Container Platform Container Storage와 함께 OpenShift Virtualization을 사용하는 경우 가상 머신 디스크를 생성할 때 RBD 블록 모드 PVC(영구 볼륨 클레임)를 지정합니다. 가상 시스템 디스크를 사용하면 RBD 블록 모드 볼륨이 더 효율적이며 Ceph FS 또는 RBD 파일 시스템 모드 PVC보다 더 나은 성능을 제공합니다.

RBD 블록 모드 PVC를 지정하려면 'ocs-storagecluster-ceph-rbd' 스토리지 클래스와 VolumeMode를 사용합니다. block.

절차

  1. 스토리지 클래스를 정의하는 YAML 파일을 만듭니다. 예를 들면 다음과 같습니다.

    $ touch storageclass.yaml
  2. 파일을 편집합니다. 예를 들면 다음과 같습니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: hostpath-provisioner 1
    provisioner: kubevirt.io/hostpath-provisioner
    reclaimPolicy: Delete 2
    volumeBindingMode: WaitForFirstConsumer 3
    1
    필요한 경우 이 값을 변경하여 스토리지 클래스의 이름을 변경할 수 있습니다.
    2
    reclaimPolicy에 사용할 수 있는 값은 DeleteRetain 두 가지입니다. 값을 지정하지 않는 경우 스토리지 클래스는 기본값인 Delete로 설정됩니다.
    3
    volumeBindingMode 값은 동적 프로비저닝 및 볼륨 바인딩이 발생하는 시기를 결정합니다. PVC(영구 볼륨 클레임)를 사용하는 Pod를 생성한 후 PV의 바인딩 및 프로비저닝을 수행하려면 WaitForFirstConsumer를 지정합니다. 이렇게 하면 PV에서 Pod의 스케줄링 요구 사항을 충족할 수 있습니다.
    참고

    가상 머신은 로컬 PV를 기반으로 하는 데이터 볼륨을 사용합니다. 로컬 PV는 특정 노드에 바인딩됩니다. 디스크 이미지는 가상 머신에서 사용할 수 있는 반면 가상 머신은 이전에 로컬 스토리지 PV가 고정된 노드에 예약할 수 없습니다.

    이 문제를 해결하려면 Kubernetes Pod 스케줄러를 사용하여 올바른 노드의 PV에 PVC를 바인딩합니다. volumeBindingModeWaitForFirstConsumer로 설정된 StorageClass를 사용하면 PVC를 사용하여 Pod가 생성될 때까지 PV의 바인딩 및 프로비저닝이 지연됩니다.

  3. StorageClass 오브젝트를 만듭니다.

    $ oc create -f storageclass.yaml

추가 리소스

8.18.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 생성을 최적화하는 값을 제공합니다. 그러나 스토리지 프로필을 사용자 지정하는 경우 스토리지 클래스에 대한 자동 설정을 구성할 수 있습니다.

8.18.3.1. 스토리지 API를 사용하여 데이터 볼륨 생성

스토리지 API를 사용하여 데이터 볼륨을 생성할 때 CDI(Containerized Data Interface)는 선택한 스토리지 클래스에서 지원하는 스토리지 유형에 따라 PVC(영구 볼륨 클레임) 할당을 최적화합니다. 데이터 볼륨 이름, 네임스페이스 및 할당할 스토리지 크기만 지정해야 합니다.

예를 들면 다음과 같습니다.

  • Ceph RBD를 사용하는 경우 accessModes 가 자동으로 ReadWriteMany 로 설정되어 실시간 마이그레이션을 활성화합니다. volumeModeBlock 으로 설정되어 성능을 극대화합니다.
  • volumeMode를 사용할 때: filesystem 파일 시스템 오버헤드를 수용해야 하는 경우 CDI에서 자동으로 더 많은 공간을 요청합니다.

다음 YAML에서 스토리지 API를 사용하면 사용 가능한 공간이 2GB인 데이터 볼륨을 요청합니다. 사용자가 필요한 PVC(영구 볼륨 클레임) 크기를 올바르게 추정하기 위해 volumeMode를 알 필요가 없습니다. CDI는 accessModesvolumeMode 속성의 최적 조합을 자동으로 선택합니다. 이러한 최적 값은 스토리지 유형 또는 스토리지 프로필에 정의된 기본값을 기반으로 합니다. 사용자 지정 값을 제공하려면 시스템 단위로 계산된 값을 재정의합니다.

데이터 볼륨 정의 예

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

1
새 데이터 볼륨의 이름입니다.
2
가져오기 소스가 기존 PVC(영구 볼륨 클레임)임을 나타냅니다.
3
소스 PVC가 존재하는 네임스페이스입니다.
4
소스 PVC의 이름입니다.
5
스토리지 API를 사용하여 할당을 나타냅니다.
6
PVC에 요청한 사용 가능한 공간의 양을 지정합니다.
7
선택 사항: 스토리지 클래스의 이름입니다. 스토리지 클래스를 지정하지 않으면 시스템 기본 스토리지 클래스가 사용됩니다.

8.18.3.2. PVC API를 사용하여 데이터 볼륨 생성

PVC API를 사용하여 데이터 볼륨을 생성할 때 CDI(Containerized Data Interface)는 다음 필드에 지정된 값을 기반으로 데이터 볼륨을 생성합니다.

  • accessModes (ReadWriteOnce,ReadWriteMany 또는 ReadOnlyMany)
  • volumeMode (Filesystem 또는 Block)
  • storagecapacity (예: 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(영구 볼륨 클레임)를 요청하여 할당 요청이 성공했는지 확인합니다.

8.18.3.3. 스토리지 프로파일 사용자 정의

프로비저너의 스토리지 클래스에 대해 StorageProfile 오브젝트를 편집하여 기본 매개변수를 지정할 수 있습니다. 이러한 기본 매개변수는 DataVolume 오브젝트에 구성되지 않은 경우에만 PVC(영구 볼륨 클레임)에 적용됩니다.

사전 요구 사항

  • 계획된 구성이 스토리지 클래스 및 해당 공급자에 의해 지원되는지 확인하십시오. 스토리지 프로필에 호환되지 않는 구성을 지정하면 볼륨 프로비저닝이 실패합니다.
참고

스토리지 프로필의 빈 status 섹션은 스토리지 프로비저너가 CDI(Containerized Data Interface)에서 인식되지 않았음을 나타냅니다. CDI에서 인식하지 않는 스토리지 프로비저너가 있는 경우 스토리지 프로필을 사용자 정의해야 합니다. 이 경우 관리자는 스토리지 프로필에 적절한 값을 설정하여 성공적으로 할당되도록 합니다.

주의

데이터 볼륨을 생성하고 YAML 속성을 생략하고 이러한 특성이 스토리지 프로필에 정의되지 않으면 요청된 스토리지가 할당되지 않고 기본 PVC(영구 볼륨 클레임)가 생성되지 않습니다.

절차

  1. 스토리지 프로파일을 편집합니다. 이 예에서 CDI는 제공자를 인식하지 못합니다.

    $ oc edit -n openshift-cnv storageprofile <storage_class>

    스토리지 프로필 예

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: <some_unknown_provisioner_class>
    #   ...
    spec: {}
    status:
      provisioner: <some_unknown_provisioner>
      storageClass: <some_unknown_provisioner_class>

  2. 스토리지 프로파일에 필요한 속성 값을 제공합니다.

    스토리지 프로필 예

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: StorageProfile
    metadata:
      name: <some_unknown_provisioner_class>
    #   ...
    spec:
      claimPropertySets:
      - accessModes:
        - ReadWriteOnce 1
        volumeMode:
          Filesystem 2
    status:
      provisioner: <some_unknown_provisioner>
      storageClass: <some_unknown_provisioner_class>

    1
    선택한 accessModes입니다.
    2
    선택한 volumeMode입니다.

    변경 사항을 저장하면 선택한 값이 스토리지 프로필 status 요소에 표시됩니다.

8.18.3.4. 추가 리소스

8.18.4. 파일 시스템 오버헤드의 PVC 공간 예약

기본적으로 CDI(Containerized Data Importer)는 Filesystem 볼륨 모드를 사용하는 PVC(영구 볼륨 클레임)의 파일 시스템의 오버헤드 데이터용 공간을 예약합니다. 전역 및 특정 스토리지 클래스에 CDI가 예약하는 백분율을 설정할 수 있습니다.

8.18.4.1. 파일 시스템 오버헤드가 가상 머신 디스크의 공간에 미치는 영향

Filesystem 볼륨 모드를 사용하는 PVC(영구 볼륨 클레임)에 가상 머신 디스크를 추가하는 경우 PVC에 다음을 위한 충분한 공간이 있는지 확인해야 합니다.

  • 가상 머신 디스크
  • CDI(Containerized Data Importer)가 메타데이터와 같은 파일 시스템 오버헤드를 위해 예약하는 공간

CDI는 기본적으로 5.5%의 PVC 공간을 오버헤드로 예약하고 해당 용량에 따라 가상 머신 디스크에 사용 가능한 공간을 줄일 수 있습니다.

다른 값이 사용 사례에 보다 적합한 경우 CDI 오브젝트를 편집하여 오버헤드를 구성할 수 있습니다. 전체적으로 값을 변경하고 특정 스토리지 클래스의 값을 지정할 수 있습니다.

8.18.4.2. 기본 파일 시스템 오버헤드 값 덮어쓰기

CDI 오브젝트의 spec.config.filesystemOverhead 속성을 편집하여 CDI(Containerized Data Importer)가 파일 시스템 오버헤드를 위해 예약하는 PVC(영구 볼륨 클레임) 공간을 변경합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 다음 명령을 실행하여 편집할 CDI를 엽니다.

    $ oc edit cdi
  2. spec.config.filesystemOverhead 필드를 편집하여 선택한 값으로 채웁니다.

    ...
    spec:
      config:
        filesystemOverhead:
          global: "<new_global_value>" 1
          storageClass:
            <storage_class_name>: "<new_value_for_this_storage_class>" 2
    1
    CDI가 클러스터에 사용하는 파일 시스템 오버헤드 백분율입니다. 예를 들면 global입니다. "0.07" 는 파일 시스템 오버헤드에 대해 PVC의 7%를 예약합니다.
    2
    지정된 스토리지 클래스의 파일 시스템 오버헤드 백분율입니다. 예를 들면 mystorageclass입니다. "0.04"mystorageclass 스토리지 클래스의 PVC의 기본 오버헤드 값을 4%로 변경합니다.
  3. 편집기를 저장하고 종료하여 CDI 오브젝트를 업데이트합니다.

검증

  • 다음 명령을 실행하여 CDI 상태를 확인한 후 변경 사항을 검토합니다.

    $ oc get cdi -o yaml

8.18.5. 컴퓨팅 리소스 할당량이 있는 네임스페이스를 사용하도록 CDI 구성

CDI(Containerized Data Importer)를 사용하면 CPU 및 메모리 리소스가 제한된 네임스페이스로 가상 머신 디스크를 가져오고, 업로드하고, 복제할 수 있습니다.

8.18.5.1. 네임스페이스의 CPU 및 메모리 할당량 정보

ResourceQuota 오브젝트로 정의하는 리소스 할당량은 네임스페이스에 제한을 적용하여 해당 네임스페이스 내의 리소스에서 사용할 수 있는 총 컴퓨팅 리소스 양을 제한합니다.

HyperConverged 사용자 지정 리소스 (CR)는 CDI(Containerized Data Importer)에 대한 사용자 구성을 정의합니다. CPU 및 메모리 요청 및 한계 값은 기본값인 0으로 설정되어 있습니다. 이렇게 하면 컴퓨팅 리소스 요구 사항 없이 CDI에서 생성한 Pod에 기본값을 제공하고 할당량으로 제한되는 네임스페이스에서 해당 Pod를 실행할 수 있습니다.

8.18.5.2. CPU 및 메모리 기본값 덮어쓰기

spec.resourceRequirements.storageWorkloads 스탠자를 HyperConverged CR(사용자 정의 리소스)에 추가하여 CPU 및 메모리 요청의 기본 설정과 사용 사례에 대한 제한을 수정합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 다음 명령을 실행하여 HyperConverged CR을 편집합니다.

    $ oc edit hco -n openshift-cnv kubevirt-hyperconverged
  2. 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"
  3. 편집기를 저장하고 종료하여 HyperConverged CR을 업데이트합니다.

8.18.5.3. 추가 리소스

8.18.6. 데이터 볼륨 주석 관리

DV(데이터 볼륨) 주석을 사용하면 Pod 동작을 관리할 수 있습니다. 하나 이상의 주석을 데이터 볼륨에 추가하면 생성된 가져오기 Pod로 전파할 수 있습니다.

8.18.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 네트워크 주석

8.18.7. 데이터 볼륨에 사전 할당 사용

CDI(Containerized Data Importer)는 데이터 볼륨을 생성할 때 쓰기 성능을 개선하기 위해 디스크 공간을 사전 할당할 수 있습니다.

특정 데이터 볼륨에 대해 사전 할당을 실행할 수 있습니다.

8.18.7.1. 사전 할당 정보

CDI(Containerized Data Importer)는 데이터 볼륨에 QEMU 사전 할당 모드를 사용하여 쓰기 성능을 향상시킬 수 있습니다. 사전 할당 모드를 사용하여 작업 가져오기 및 업로드 및 빈 데이터 볼륨을 생성할 때 사용할 수 있습니다.

사전 할당이 활성화된 경우 CDI는 기본 파일 시스템 및 장치 유형에 따라 더 나은 사전 할당 방법을 사용합니다.

fallocate
파일 시스템이 이를 지원하는 경우, CDI는 posix_fallocate 함수를 사용하여 운영 체제의 fallocate 호출을 통해 공간을 미리 할당하며, 이를 통해 블록을 할당하고 초기화되지 않음으로 표시합니다.
full
fallocate 모드를 사용할 수 없는 경우 full 모드는 기본 스토리지에 데이터를 작성하여 이미지의 공간을 할당합니다. 스토리지 위치에 따라, 비어 있는 할당된 모든 공간을 0으로 만들 수 있습니다.

8.18.7.2. 데이터 볼륨 사전 할당 활성화

데이터 볼륨 매니페스트에 spec.preallocation 필드를 포함하여 특정 데이터 볼륨에 대한 사전 할당을 활성화할 수 있습니다. 웹 콘솔에서 또는 OpenShift 클라이언트(oc)를 사용하여 사전 할당 모드를 활성화할 수 있습니다.

모든 CDI 소스 유형에서 사전 할당 모드가 지원됩니다.

절차

  • 데이터 볼륨 매니페스트에 spec.preallocation 필드를 지정합니다.

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: preallocated-datavolume
    spec:
      source: 1
        ...
      pvc:
        ...
      preallocation: true 2
    1
    모든 CDI 소스 유형은 사전 할당을 지원하지만 복제 작업에서는 사전 할당이 무시됩니다.
    2
    preallocation 필드는 기본값이 false인 부울입니다.

8.18.8. 웹 콘솔을 사용하여 로컬 디스크 이미지 업로드

웹 콘솔을 사용하여 로컬에 저장된 디스크 이미지 파일을 업로드할 수 있습니다.

8.18.8.1. 사전 요구 사항

8.18.8.2. CDI 지원 작업 매트릭스

이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.

콘텐츠 유형HTTPHTTPSHTTP 기본 인증레지스트리업로드

KubeVirt (QCOW2)

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2**
✓ GZ*
✓ XZ*

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2*
□ GZ
□ XZ

✓ QCOW2*
✓ GZ*
✓ XZ*

KubeVirt(RAW)

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW*
□ GZ
□ XZ

✓ RAW*
✓ GZ*
✓ XZ*

✓ 지원되는 작업

□ 지원되지 않는 작업

* 스크래치 공간 필요

** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요

8.18.8.3. 웹 콘솔을 사용하여 이미지 파일 업로드

웹 콘솔을 사용하여 이미지 파일을 새 PVC(영구 볼륨 클레임)에 업로드합니다. 나중에 이 PVC를 사용하여 이미지를 새 가상 머신에 연결할 수 있습니다.

사전 요구 사항

  • 다음 중 하나가 있어야 합니다.

    • ISO 또는 IMG 형식의 원시 가상 머신 이미지 파일
    • QCOW2 형식의 가상 머신 이미지 파일
  • 최상의 결과를 얻으려면 업로드하기 전에 다음 지침에 따라 이미지 파일을 압축하십시오.

    • xz 또는 gzip을 사용하여 원시 이미지 파일을 압축합니다.

      참고

      압축된 원시 이미지 파일을 사용할 때 가장 효율적으로 업로드할 수 있습니다.

    • 클라이언트에 권장되는 방법을 사용하여 QCOW2 이미지 파일을 압축합니다.

      • Linux 클라이언트를 사용하는 경우 virt-sparsify 툴을 사용하여 QCOW2 파일을 스파스(sparsify) 형식으로 변환합니다.
      • Windows 클라이언트를 사용하는 경우 xz 또는 gzip을 사용하여 QCOW2 파일을 압축합니다.

절차

  1. 웹 콘솔의 사이드 메뉴에서 스토리지 영구 볼륨 클레임을 클릭합니다.
  2. 영구 볼륨 클레임 생성 드롭다운 목록을 클릭하여 확장합니다.
  3. 사용할 데이터 업로드 폼을 클릭하여 영구 볼륨 클레임에 데이터 업로드 페이지를 엽니다.
  4. 찾아보기를 클릭하여 파일 관리자를 열고 업로드할 이미지를 선택하거나, 파일을 여기로 드래그하거나 업로드할 항목 찾아보기 필드로 파일을 드래그합니다.
  5. 선택 사항: 이 이미지를 특정 운영 체제의 기본 이미지로 설정합니다.

    1. 이 데이터를 가상 머신 운영 체제에 연결 확인란을 선택합니다.
    2. 목록에서 운영 체제를 선택합니다.
  6. 영구 볼륨 클레임 이름 필드는 고유한 이름으로 자동으로 채워지며 편집할 수 없습니다. 필요한 경우 나중에 확인할 수 있도록 PVC에 지정된 이름을 기록해 두십시오.
  7. 스토리지 클래스 목록에서 스토리지 클래스를 선택합니다.
  8. 크기 필드에 PVC 크기 값을 입력합니다. 드롭다운 목록에서 해당 측정 단위를 선택합니다.

    주의

    PVC 크기는 압축되지 않은 가상 디스크의 크기보다 커야 합니다.

  9. 선택한 스토리지 클래스와 일치하는 액세스 모드를 선택합니다.
  10. 업로드를 클릭합니다.

8.18.8.4. 추가 리소스

8.18.9. virtctl 툴을 사용하여 로컬 디스크 이미지 업로드

virtctl 명령줄 유틸리티를 사용하여 로컬에 저장된 디스크 이미지를 신규 또는 기존 데이터 볼륨에 업로드할 수 있습니다.

8.18.9.1. 사전 요구 사항

8.18.9.2. 데이터 볼륨 정보

Dataolume 오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.

8.18.9.3. 업로드 데이터 볼륨 생성

로컬 디스크 이미지를 업로드하는 데 사용할 upload 데이터 소스가 있는 데이터 볼륨을 수동으로 생성할 수 있습니다.

절차

  1. 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
    1
    데이터 볼륨의 이름입니다.
    2
    데이터 볼륨의 크기입니다. 이 값은 업로드하는 디스크의 크기와 같거나 커야 합니다.
  2. 다음 명령을 실행하여 데이터 볼륨을 생성합니다.

    $ oc create -f <upload-datavolume>.yaml

8.18.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 라우터의 인증서를 신뢰하도록 구성되어 있어야 합니다.

절차

  1. 다음 항목을 확인합니다.

    • 사용할 업로드 데이터 볼륨의 이름. 이 데이터 볼륨이 없으면 자동으로 생성됩니다.
    • 업로드 절차 중 데이터 볼륨을 생성하려는 경우 데이터 볼륨의 크기. 크기는 디스크 이미지의 크기보다 크거나 같아야 합니다.
    • 업로드하려는 가상 머신 디스크 이미지의 파일 위치.
  2. virtctl image-upload 명령을 실행하여 디스크 이미지를 업로드합니다. 이전 단계에서 확인한 매개변수를 지정합니다. 예를 들면 다음과 같습니다.

    $ virtctl image-upload dv <datavolume_name> \ 1
    --size=<datavolume_size> \ 2
    --image-path=</path/to/image> \ 3
    1
    데이터 볼륨의 이름입니다.
    2
    데이터 볼륨의 크기입니다. 예를 들면--size=500Mi, --size=1G와 같습니다.
    3
    가상 머신 디스크 이미지의 파일 경로입니다.
    참고
    • 새 데이터 볼륨을 생성하지 않으려면 --size 매개변수를 생략하고 --no-create 플래그를 포함합니다.
    • 디스크 이미지를 PVC에 업로드할 때 PVC 크기는 압축되지 않은 가상 디스크의 크기보다 커야 합니다.
    • HTTPS를 사용할 때 비보안 서버 연결을 허용하려면 --insecure 매개변수를 사용하십시오. --insecure 플래그를 사용하면 업로드 끝점의 신뢰성이 확인되지 않습니다.
  3. 선택사항입니다. 데이터 볼륨이 생성되었는지 확인하려면 다음 명령을 실행하여 모든 데이터 볼륨을 확인합니다.

    $ oc get dvs

8.18.9.5. CDI 지원 작업 매트릭스

이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.

콘텐츠 유형HTTPHTTPSHTTP 기본 인증레지스트리업로드

KubeVirt (QCOW2)

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2**
✓ GZ*
✓ XZ*

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2*
□ GZ
□ XZ

✓ QCOW2*
✓ GZ*
✓ XZ*

KubeVirt(RAW)

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW*
□ GZ
□ XZ

✓ RAW*
✓ GZ*
✓ XZ*

✓ 지원되는 작업

□ 지원되지 않는 작업

* 스크래치 공간 필요

** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요

8.18.9.6. 추가 리소스

8.18.10. 블록 스토리지 데이터 볼륨에 로컬 디스크 이미지 업로드

virtctl 명령줄 유틸리티를 사용하여 로컬 디스크 이미지를 블록 데이터 볼륨에 업로드할 수 있습니다.

이 워크플로우에서는 영구 볼륨으로 사용할 로컬 블록 장치를 생성한 후 이 블록 볼륨을 upload 데이터 볼륨과 연결하고, virtctl을 사용하여 로컬 디스크 이미지를 데이터 볼륨에 업로드합니다.

8.18.10.1. 사전 요구 사항

8.18.10.2. 데이터 볼륨 정보

Dataolume 오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.

8.18.10.3. 블록 영구 볼륨 정보

PV(블록 영구 볼륨)는 원시 블록 장치에서 지원하는 PV입니다. 이러한 볼륨은 파일 시스템이 없으며 오버헤드를 줄여 가상 머신의 성능을 향상시킬 수 있습니다.

원시 블록 볼륨은 volumeMode를 지정하여 프로비저닝됩니다. PV 및 PVC(영구 볼륨 클레임) 사양에서 block

8.18.10.4. 로컬 블록 영구 볼륨 생성

파일을 채우고 루프 장치로 마운트하여 노드에 로컬 블록 PV(영구 볼륨)를 생성합니다. 그런 다음 PV 매니페스트에서 이 루프 장치를 Block 볼륨으로 참조하고 가상 머신 이미지의 블록 장치로 사용할 수 있습니다.

절차

  1. 로컬 PV를 생성할 노드에 root로 로그인합니다. 이 절차에서는 예제로 node01을 사용합니다.
  2. 블록 장치로 사용할 수 있도록 파일을 생성하고 null 문자로 채웁니다. 다음 예제에서는 크기가 2Gb(20X100Mb 블록)인 파일 loop10을 생성합니다.

    $ dd if=/dev/zero of=<loop10> bs=100M count=20
  3. loop10 파일을 루프 장치로 마운트합니다.

    $ losetup </dev/loop10>d3 <loop10> 1 2
    1
    루프 장치가 마운트된 파일 경로입니다.
    2
    이전 단계에서 생성된 파일은 루프 장치로 마운트됩니다.
  4. 마운트된 루프 장치를 참조하는 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
    1
    노드에 있는 루프 장치의 경로입니다.
    2
    블록 PV임을 나타냅니다.
    3
    선택 사항: PV의 스토리지 클래스를 설정합니다. 생략하면 클러스터 기본값이 사용됩니다.
    4
    블록 장치가 마운트된 노드입니다.
  5. 블록 PV를 생성합니다.

    # oc create -f <local-block-pv10.yaml>1
    1
    이전 단계에서 생성한 영구 볼륨의 파일 이름입니다.

8.18.10.5. 업로드 데이터 볼륨 생성

로컬 디스크 이미지를 업로드하는 데 사용할 upload 데이터 소스가 있는 데이터 볼륨을 수동으로 생성할 수 있습니다.

절차

  1. 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
    1
    데이터 볼륨의 이름입니다.
    2
    데이터 볼륨의 크기입니다. 이 값은 업로드하는 디스크의 크기와 같거나 커야 합니다.
  2. 다음 명령을 실행하여 데이터 볼륨을 생성합니다.

    $ oc create -f <upload-datavolume>.yaml

8.18.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 라우터의 인증서를 신뢰하도록 구성되어 있어야 합니다.

절차

  1. 다음 항목을 확인합니다.

    • 사용할 업로드 데이터 볼륨의 이름. 이 데이터 볼륨이 없으면 자동으로 생성됩니다.
    • 업로드 절차 중 데이터 볼륨을 생성하려는 경우 데이터 볼륨의 크기. 크기는 디스크 이미지의 크기보다 크거나 같아야 합니다.
    • 업로드하려는 가상 머신 디스크 이미지의 파일 위치.
  2. virtctl image-upload 명령을 실행하여 디스크 이미지를 업로드합니다. 이전 단계에서 확인한 매개변수를 지정합니다. 예를 들면 다음과 같습니다.

    $ virtctl image-upload dv <datavolume_name> \ 1
    --size=<datavolume_size> \ 2
    --image-path=</path/to/image> \ 3
    1
    데이터 볼륨의 이름입니다.
    2
    데이터 볼륨의 크기입니다. 예를 들면--size=500Mi, --size=1G와 같습니다.
    3
    가상 머신 디스크 이미지의 파일 경로입니다.
    참고
    • 새 데이터 볼륨을 생성하지 않으려면 --size 매개변수를 생략하고 --no-create 플래그를 포함합니다.
    • 디스크 이미지를 PVC에 업로드할 때 PVC 크기는 압축되지 않은 가상 디스크의 크기보다 커야 합니다.
    • HTTPS를 사용할 때 비보안 서버 연결을 허용하려면 --insecure 매개변수를 사용하십시오. --insecure 플래그를 사용하면 업로드 끝점의 신뢰성이 확인되지 않습니다.
  3. 선택사항입니다. 데이터 볼륨이 생성되었는지 확인하려면 다음 명령을 실행하여 모든 데이터 볼륨을 확인합니다.

    $ oc get dvs

8.18.10.7. CDI 지원 작업 매트릭스

이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.

콘텐츠 유형HTTPHTTPSHTTP 기본 인증레지스트리업로드

KubeVirt (QCOW2)

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2**
✓ GZ*
✓ XZ*

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2*
□ GZ
□ XZ

✓ QCOW2*
✓ GZ*
✓ XZ*

KubeVirt(RAW)

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW*
□ GZ
□ XZ

✓ RAW*
✓ GZ*
✓ XZ*

✓ 지원되는 작업

□ 지원되지 않는 작업

* 스크래치 공간 필요

** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요

8.18.10.8. 추가 리소스

8.18.11. 오프라인 가상 머신 스냅샷 관리

전원이 꺼진(오프라인 상태의) VM에 대해 VM(가상 머신) 스냅샷을 생성, 복원, 삭제할 수 있습니다. OpenShift Virtualization은 다음에서 오프라인 VM 스냅샷을 지원합니다.

  • Red Hat OpenShift 컨테이너 스토리지
  • Kubernetes Volume Snapshot API를 지원하는 CSI(Container Storage Interface) 드라이버가 있는 기타 스토리지 공급자

8.18.11.1. 가상 머신 스냅샷 정보

스냅샷은 특정 시점의 VM(가상 머신) 상태 및 데이터를 나타냅니다. 스냅샷을 사용하면 백업 및 재해 복구를 위해 기존 VM을 (스냅샷에 표시된) 이전 상태로 복원하거나 이전 개발 버전으로 신속하게 롤백할 수 있습니다.

오프라인 VM 스냅샷은 전원이 꺼진(중지됨 상태) VM에서 생성됩니다. 스냅샷에는 VM에 연결된 각 CSI(Container Storage Interface) 볼륨 복사본과 VM 사양 및 메타데이터 복사본이 저장됩니다. 스냅샷을 생성한 후에는 변경할 수 없습니다.

클러스터 관리자와 애플리케이션 개발자는 오프라인 VM 스냅샷 기능을 사용하여 다음을 수행할 수 있습니다.

  • 새 프로젝트 생성
  • 특정 VM에 연결된 모든 스냅샷 나열
  • 스냅샷에서 VM 복원
  • 기존 VM 스냅샷 삭제
8.18.11.1.1. 가상 머신 스냅샷 컨트롤러 및 CRD(사용자 정의 리소스 정의)

스냅샷 관리를 위해 VM 스냅샷 기능에 다음과 같이 CRD로 정의되는 새 API 오브젝트 세 가지가 도입되었습니다.

  • VirtualMachineSnapshot: 스냅샷 생성에 대한 사용자 요청을 나타냅니다. 여기에는 VM의 현재 상태 정보가 포함됩니다.
  • VirtualMachineSnapshotContent: 클러스터에서 프로비저닝된 리소스(스냅샷)를 나타냅니다. VM 스냅샷 컨트롤러에서 생성하며 VM을 복원하는 데 필요한 모든 리소스에 대한 참조를 포함합니다.
  • VirtualMachineRestore: 스냅샷에서 VM을 복원하라는 사용자 요청을 나타냅니다.

VM 스냅샷 컨트롤러는 VirtualMachineSnapshot 오브젝트와 이 오브젝트에 대해 생성된 VirtualMachineSnapshotContent 오브젝트를 일대일 매핑으로 바인딩합니다.

8.18.11.2. 웹 콘솔에서 오프라인 가상 머신 스냅샷 생성

웹 콘솔을 사용하여 VM(가상 머신) 스냅샷을 생성할 수 있습니다.

참고

VM 스냅샷에는 다음 요구 사항을 충족하는 디스크만 포함됩니다.

  • 데이터 볼륨 또는 영구 볼륨 클레임 중 하나여야 합니다.
  • CSI(Container Storage Interface) 볼륨 스냅샷을 지원하는 스토리지 클래스에 속해야 합니다.

VM 스토리지에 스냅샷을 지원하지 않는 디스크가 포함된 경우 이를 편집하거나 클러스터 관리자에게 문의할 수 있습니다.

프로세스

  1. 사이드 메뉴에서 워크로드 가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. 가상 머신을 선택하여 가상 머신 개요 화면을 엽니다.
  4. 가상 머신이 실행 중인 경우 작업 가상 머신 중지를 클릭하여 전원을 끕니다.
  5. 스냅샷 탭을 클릭한 후 스냅샷 찍기를 클릭합니다.
  6. 스냅샷 이름 및 선택 사항으로 설명 필드를 작성합니다.
  7. 이 스냅샷에 포함된 디스크를 확장하여 스냅샷에 스토리지 볼륨이 포함되어 있는지 확인합니다.
  8. VM에 스냅샷에 포함할 수 없는 디스크가 있고 계속 진행하려면 이 경고에 대해 인식하고 있으며 계속 진행하겠습니다. 확인란을 선택합니다.
  9. 저장을 클릭합니다.

8.18.11.3. CLI에서 오프라인 가상 머신 스냅샷 생성

VirtualMachineSnapshot 오브젝트를 생성하여 오프라인 VM에 대한 VM(가상 머신) 스냅샷을 생성할 수 있습니다.

사전 요구 사항

  • PVC(영구 볼륨 클레임)이 CSI(Container Storage Interface) 볼륨 스냅샷을 지원하는 스토리지 클래스에 있는지 확인합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • 스냅샷을 생성할 VM의 전원을 끕니다.

프로세스

  1. 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
    1
    VirtualMachineSnapshot 오브젝트의 이름입니다.
    2
    소스 VM의 이름입니다.
  2. VirtualMachineSnapshot 리소스를 생성합니다. 스냅샷 컨트롤러에서 VirtualMachineSnapshotContent 오브젝트를 생성하여 VirtualMachineSnapshot에 바인딩하고 VirtualMachineSnapshot 오브젝트의 statusreadyToUse 필드를 업데이트합니다.

    $ oc create -f <my-vmsnapshot>.yaml

검증

  1. 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

    1
    status 필드의 Progressing 조건은 스냅샷이 아직 생성 중인지를 나타냅니다.
    2
    status 필드의 Ready 조건은 스냅샷 생성 프로세스가 완료되었는지를 나타냅니다.
    3
    스냅샷을 사용할 준비가 되었는지를 나타냅니다.
    4
    스냅샷이 스냅샷 컨트롤러에서 생성한 VirtualMachineSnapshotContent 오브젝트에 바인딩되도록 지정합니다.
  2. VirtualMachineSnapshotContent 리소스의 spec:volumeBackups 속성을 확인하여 예상 PVC가 스냅샷에 포함되어 있는지 확인합니다.

8.18.11.4. 웹 콘솔을 사용하여 스냅샷에서 가상 머신 복원

웹 콘솔에서 스냅샷으로 표시한 이전 구성으로 VM(가상 머신)을 복원할 수 있습니다.

절차

  1. 사이드 메뉴에서 워크로드 가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. 가상 머신을 선택하여 가상 머신 개요 화면을 엽니다.
  4. 가상 머신이 실행 중인 경우 작업 가상 머신 중지를 클릭하여 전원을 끕니다.
  5. 스냅샷 탭을 클릭합니다. 페이지에는 가상 머신과 연결된 스냅샷 목록이 표시됩니다.
  6. VM 스냅샷을 복원하는 다음 방법 중 하나를 선택합니다.

    1. VM을 복원하기 위해 소스로 사용할 스냅샷에서 복원을 클릭합니다.
    2. 스냅샷을 선택하여 스냅샷 세부 정보 화면을 열고 작업 가상 머신 스냅샷 복원을 클릭합니다.
  7. 확인 팝업 창에서 복원을 클릭하여 스냅샷에 표시된 VM을 이전 구성으로 복원합니다.

8.18.11.5. CLI를 사용하여 스냅샷에서 가상 머신 복원

VM 스냅샷을 사용하여 기존 VM(가상 머신)을 이전 구성으로 복원할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • 이전 상태로 복원하려는 VM의 전원을 끕니다.

절차

  1. 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
    1
    VirtualMachineRestore 오브젝트의 이름입니다.
    2
    복원할 대상 VM의 이름입니다.
    3
    소스로 사용할 VirtualMachineSnapshot 오브젝트의 이름입니다.
  2. 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

    1
    VM을 스냅샷에 표시된 상태로 복원하는 프로세스가 완료되었는지를 나타냅니다.
    2
    status 필드의 Progressing 조건은 VM이 아직 복원 중인지를 나타냅니다.
    3
    status 필드의 Ready 조건은 VM 복원 프로세스가 완료되었는지를 나타냅니다.

8.18.11.6. 웹 콘솔에서 가상 머신 스냅샷 삭제

웹 콘솔을 사용하여 기존 가상 머신 스냅샷을 삭제할 수 있습니다.

절차

  1. 사이드 메뉴에서 워크로드 가상화를 클릭합니다.
  2. 가상 머신 탭을 클릭합니다.
  3. 가상 머신을 선택하여 가상 머신 개요 화면을 엽니다.
  4. 스냅샷 탭을 클릭합니다. 페이지에는 가상 머신과 연결된 스냅샷 목록이 표시됩니다.
  5. 가상 머신 스냅샷을 삭제하는 다음 방법 중 하나를 선택합니다.

    1. 삭제할 가상 머신의 옵션 메뉴 kebab 를 클릭하고 가상 머신 스냅샷 삭제를 선택합니다.
    2. 스냅샷을 선택하여 스냅샷 세부 정보 화면을 열고 작업 가상 머신 스냅샷 삭제를 클릭합니다.
  6. 확인 팝업 창에서 삭제를 클릭하여 스냅샷을 삭제합니다.

8.18.11.7. CLI에서 가상 머신 스냅샷 삭제

적절한 VirtualMachineSnapshot 오브젝트를 삭제하여 기존 VM(가상 머신) 스냅샷을 삭제할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.

절차

  • VirtualMachineSnapshot 오브젝트를 삭제합니다. 스냅샷 컨트롤러는 VirtualMachineSnapshot을 연결된 VirtualMachineSnapshotContent 오브젝트와 함께 삭제합니다.

    $ oc delete vmsnapshot <my-vmsnapshot>

검증

  • 스냅샷이 삭제되고 더 이상 이 VM에 연결되어 있지 않은지 확인합니다.

    $ oc get vmsnapshot

8.18.11.8. 추가 리소스

8.18.12. 로컬 가상 머신 디스크를 다른 노드로 이동

로컬 볼륨 스토리지를 사용하는 가상 머신을 특정 노드에서 실행하도록 이동할 수 있습니다.

다음과 같은 이유로 가상 머신을 특정 노드로 이동할 수 있습니다.

  • 현재 노드에서는 로컬 스토리지 구성을 제한합니다.
  • 새 노드가 해당 가상 머신의 워크로드에 더 최적화되어 있습니다.

로컬 스토리지를 사용하는 가상 머신을 이동하려면 데이터 볼륨을 사용하여 기본 볼륨을 복제해야 합니다. 복제 작업이 완료되면 새 데이터 볼륨을 사용하도록 가상 머신 구성을 편집하거나 새 데이터 볼륨을 다른 가상 머신에 추가할 수 있습니다.

작은 정보

사전 할당을 활성화하거나 단일 데이터 볼륨에 대해 복제 중에 디스크 공간을 사전 할당하는 경우 CDI(Containerized Data Importer)가 디스크 공간을 사전 할당합니다. 사전 할당을 통해 쓰기 성능이 향상됩니다. 자세한 내용은 데이터 볼륨에 대한 사전 할당 사용을 참조하십시오.

참고

cluster-admin 역할이 없는 사용자는 다른 네임스페이스에 볼륨을 복제하려면 추가 사용자 권한이 있어야 합니다.

8.18.12.1. 다른 노드에 로컬 볼륨 복제

가상 머신 디스크를 특정 노드에서 실행하기 위해 기본 PVC(영구 볼륨 클레임)를 복제하여 가상 머신 디스크를 이동할 수 있습니다.

가상 머신 디스크가 올바른 노드에 복제되었는지 확인하려면 새 PV(영구 볼륨)를 생성하거나 올바른 노드에서 가상 머신 디스크를 확인합니다. 데이터 볼륨에서 참조할 수 있도록 PV에 고유한 라벨을 적용하십시오.

참고

대상 PV는 소스 PVC와 크기가 같거나 커야 합니다. 대상 PV가 소스 PVC보다 작으면 복제 작업이 실패합니다.

사전 요구 사항

  • 가상 머신이 실행되고 있지 않아야 합니다. 가상 머신 디스크를 복제하기 전에 가상 머신의 전원을 끄십시오.

절차

  1. 노드에 새 로컬 PV를 생성하거나 노드의 기존 로컬 PV를 확인합니다.

    • nodeAffinity.nodeSelectorTerms 매개변수를 포함하는 로컬 PV를 생성합니다. 다음 매니페스트에서는 node0110Gi 로컬 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
      1
      PV의 이름입니다.
      2
      PV의 크기입니다. 충분한 공간을 할당해야 합니다. 그러지 않으면 복제 작업이 실패합니다. 크기는 소스 PVC와 같거나 커야 합니다.
      3
      노드의 마운트 경로입니다.
      4
      PV를 생성하려는 노드의 이름입니다.
    • 대상 노드에 이미 존재하는 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
      ...

      1
      kubernetes.io/hostname 키는 노드 호스트 이름을 사용하여 노드를 선택합니다.
      2
      노드의 호스트 이름입니다.
  2. PV에 고유한 라벨을 추가합니다.

    $ oc label pv <destination-pv> node=node01
  3. 다음을 참조하는 데이터 볼륨 매니페스트를 생성합니다.

    • 가상 머신의 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
      1
      새 데이터 볼륨의 이름입니다.
      2
      소스 PVC의 이름입니다. PVC 이름을 모르는 경우 가상 머신 구성의 spec.volumes.persistentVolumeClaim.claimName에서 확인할 수 있습니다.
      3
      소스 PVC가 존재하는 네임스페이스입니다.
      4
      이전 단계에서 PV에 적용한 라벨입니다.
      5
      대상 PV의 크기
  4. 클러스터에 데이터 볼륨 매니페스트를 적용하여 복제 작업을 시작합니다.

    $ oc apply -f <clone-datavolume.yaml>

데이터 볼륨은 가상 머신의 PVC를 특정 노드의 PV에 복제합니다.

8.18.13. 빈 디스크 이미지를 추가하여 가상 스토리지 확장

OpenShift Virtualization에 빈 디스크 이미지를 추가하여 스토리지 용량을 늘리거나 새 데이터 파티션을 만들 수 있습니다.

8.18.13.1. 데이터 볼륨 정보

Dataolume 오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.

8.18.13.2. 데이터 볼륨에 빈 디스크 이미지 만들기

데이터 볼륨 구성 파일을 사용자 정의하고 배포하여 영구 볼륨 클레임에 빈 디스크 이미지를 새로 만들 수 있습니다.

사전 요구 사항

  • 사용 가능한 영구 볼륨이 1개 이상 있습니다.
  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 데이터 볼륨 구성 파일을 편집합니다.

    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
  2. 다음 명령을 실행하여 빈 디스크 이미지를 만듭니다.

    $ oc create -f <blank-image-datavolume>.yaml

8.18.13.3. 템플릿: 빈 디스크 이미지의 데이터 볼륨 구성 파일

blank-image-datavolume.yaml

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

8.18.13.4. 추가 리소스

8.18.14. 스마트 복제를 사용하여 데이터 볼륨 복제

스마트 복제는 복제 프로세스의 성능을 향상시키도록 설계된 OCS(OpenShift Container Platform Storage)의 기본 제공 기능입니다. 스마트 복제로 생성된 복제본은 호스트 지원 복제로 생성된 복제본보다 더 빠르고 효율적입니다.

스마트 복제를 활성화하기 위해 특별히 수행해야 할 작업은 없지만 이 기능을 사용하려면 스토리지 환경이 스마트 복제와 호환되는지 확인해야 합니다.

PVC(영구 볼륨 클레임) 소스를 사용하여 데이터 볼륨을 생성하면 복제 프로세스가 자동으로 시작됩니다. 해당 환경에서 스마트 복제를 지원하는지와 관계없이 데이터 볼륨 복제본은 항상 제공됩니다. 그러나 스토리지 공급자가 스마트 복제를 지원하는 경우에만 스마트 복제의 성능적인 이점을 활용할 수 있습니다.

8.18.14.1. 스마트 복제 이해

데이터 볼륨이 스마트 복제될 때는 다음 작업이 수행됩니다.

  1. 소스 PVC(영구 볼륨 클레임)의 스냅샷이 생성됩니다.
  2. 스냅샷에서 PVC가 생성됩니다.
  3. 스냅샷이 삭제됩니다.

8.18.14.2. 데이터 볼륨 복제

사전 요구 사항

스마트 복제를 수행하려면 다음 조건이 필요합니다.

  • 스토리지 공급자에서 스냅샷을 지원해야 합니다.
  • 소스 및 대상 PVC가 동일한 스토리지 클래스에 정의되어 있어야 합니다.
  • VolumeSnapshotClass 오브젝트에서 소스 및 대상 PVC 모두에 정의된 스토리지 클래스를 참조해야 합니다.

절차

데이터 볼륨 복제를 시작하려면 다음을 수행합니다.

  1. 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
    1
    새 데이터 볼륨의 이름입니다.
    2
    소스 PVC가 존재하는 네임스페이스입니다.
    3
    소스 PVC의 이름입니다.
    4
    스토리지 API로 할당을 지정합니다.
    5
    새 데이터 볼륨의 크기입니다.
  2. 데이터 볼륨을 생성하여 PVC 복제를 시작합니다.

    $ oc create -f <cloner-datavolume>.yaml
    참고

    데이터 볼륨이 있으면 PVC가 준비될 때까지 가상 머신이 시작되지 않으므로 PVC가 복제되는 동안 새 데이터 볼륨을 참조하는 가상 머신을 생성할 수 있습니다.

8.18.14.3. 추가 리소스

8.18.15. 부팅 소스 생성 및 사용

부팅 소스에는 부팅 가능한 운영 체제(OS) 및 OS의 모든 구성 설정(예: 드라이버)이 포함되어 있습니다.

부팅 소스를 사용하여 특정 구성으로 가상 머신 템플릿을 생성합니다. 이러한 템플릿은 사용 가능한 여러 가상 머신을 생성하는 데 사용할 수 있습니다.

빠른 시작 둘러보기는 사용자 정의 부팅 소스 생성, 부팅 소스 업로드 및 기타 작업을 지원하기 위해 OpenShift Container Platform 웹 콘솔에서 사용할 수 있습니다. 도움말 메뉴에서 빠른 시작을 선택하여 빠른 시작 둘러보기를 확인합니다.

8.18.15.1. 가상 머신 및 부팅 소스 정보

가상 시스템은 가상 시스템 정의와 데이터 볼륨에서 지원하는 하나 이상의 디스크로 구성됩니다. 가상 머신 템플릿을 사용하면 사전 정의된 가상 머신 사양을 사용하여 가상 머신을 생성할 수 있습니다.

모든 가상 머신 템플릿에는 구성된 드라이버를 포함하여 완전히 구성된 가상 머신 디스크 이미지인 부팅 소스가 필요합니다. 각 가상 머신 템플릿에는 부팅 소스에 대한 포인터가 있는 가상 시스템 정의가 포함되어 있습니다. 각 부팅 소스에는 사전 정의된 이름과 네임스페이스가 있습니다. 일부 운영 체제의 경우 부팅 소스가 자동으로 제공됩니다. 제공되지 않는 경우 관리자는 사용자 지정 부팅 소스를 준비해야 합니다.

제공된 부팅 소스가 최신 버전의 운영 체제로 자동 업데이트됩니다. 자동 업데이트됨 부팅 소스의 경우 PVC(영구 볼륨 클레임)가 클러스터의 기본 스토리지 클래스를 사용하여 생성됩니다. 구성 후 다른 기본 스토리지 클래스를 선택하는 경우 이전 기본 스토리지 클래스로 구성된 클러스터 네임스페이스의 기존 데이터 볼륨을 삭제해야 합니다.

부팅 소스 기능을 사용하려면 OpenShift Virtualization의 최신 릴리스를 설치합니다. 네임스페이스 openshift-virtualization-os-images는 기능을 활성화하고 OpenShift Virtualization Operator와 함께 설치됩니다. 부팅 소스 기능이 설치되면 부팅 소스를 생성하고 템플릿에 연결한 다음 템플릿에서 가상 머신을 생성할 수 있습니다.

로컬 파일 업로드, 기존 PVC 복제, 레지스트리에서 가져오기 또는 URL을 통해 채워지는 PVC(영구 볼륨 클레임)를 사용하여 부팅 소스를 정의합니다. 웹 콘솔을 사용하여 가상 머신 템플릿에 부팅 소스를 연결합니다. 부팅 소스를 가상 머신 템플릿에 연결한 후 템플릿에서 완전히 구성된 즉시 사용할 수 있는 가상 시스템을 원하는 만큼 생성합니다.

8.18.15.2. 부팅 소스로 Red Hat Enterprise Linux 이미지 가져오기

이미지의 URL 주소를 지정하여 RHEL(Red Hat Enterprise Linux) 이미지를 부팅 소스로 가져올 수 있습니다.

사전 요구 사항

  • 운영 체제 이미지를 사용하여 웹 서버에 액세스해야 합니다. 예를 들면 다음과 같습니다. 이미지가 포함된 Red Hat Enterprise Linux 웹 페이지.

절차

  1. OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드 가상화를 클릭합니다.
  2. 템플릿 탭을 클릭합니다.
  3. 부팅 소스를 구성할 RHEL 템플릿을 확인하고 소스 추가를 클릭합니다.
  4. 템플릿에 부팅 소스 추가 창의 Boot 소스 유형 목록에서 URL을 통해 가져오기 (PVC 생성)을 선택합니다.
  5. RHEL 다운로드 페이지를 클릭하여 Red Hat 고객 포털에 액세스합니다. 사용 가능한 설치 프로그램 및 이미지 목록이 Red Hat Enterprise Linux 다운로드 페이지에 표시됩니다.
  6. 다운로드하려는 Red Hat Enterprise Linux KVM 게스트 이미지를 식별합니다. 지금 다운로드를 마우스 오른쪽 버튼으로 클릭하고 이미지의 URL을 복사합니다.
  7. 템플릿에 부팅 소스 추가 창에서 게스트 이미지의 복사된 URL을 URL 가져오기 필드에 붙여넣고 저장 및 가져오기를 클릭합니다.

검증

템플릿에 부팅 소스가 추가되었는지 확인하려면 다음을 수행합니다.

  1. 템플릿 탭을 클릭합니다.
  2. 이 템플릿의 타일에 녹색 확인 마크가 표시되는지 확인합니다.

이제 이 템플릿을 사용하여 RHEL 가상 머신을 생성할 수 있습니다.

8.18.15.3. 가상 머신 템플릿용 부팅 소스 추가

가상 머신 또는 사용자 지정 템플릿을 생성하기 위해 사용할 가상 머신 템플릿을 위한 부팅 소스를 구성할 수 있습니다. 가상 머신 템플릿이 부팅 소스로 구성된 경우 템플릿 탭에서 사용 가능으로 라벨을 지정할 수 있습니다. 템플릿에 부팅 소스를 추가한 후 템플릿에서 새 가상 머신을 생성할 수 있습니다.

다음과 같은 4가지 방법으로 웹 콘솔에서 부팅 소스를 선택하고 추가할 수 있습니다.

  • 로컬 파일 업로드 (PVC 생성)
  • URL을 통해 가져오기(PVC 생성)
  • 기존 PVC 복제 (PVC 생성)
  • 레지스트리를 통해 가져오기(PVC 생성)

사전 요구 사항

  • 부팅 소스를 추가하려면, os-images.kubevirt.io:edit RBAC 역할의 사용자 또는 관리자로 로그인해야 합니다. 부팅 소스가 추가된 템플릿에서 가상 머신을 생성하려면 특정 권한이 필요하지 않습니다.
  • 로컬 파일을 업로드하려면 운영 체제 이미지 파일이 로컬 머신에 있어야 합니다.
  • URL을 통해 가져오려면 운영 체제 이미지를 사용하여 웹 서버에 액세스해야 합니다. 예를 들면 이미지가 포함된 Red Hat Enterprise Linux 웹 페이지입니다.
  • 기존 PVC를 복제하려면 PVC를 사용하여 프로젝트에 대한 액세스가 필요합니다.
  • 레지스트리를 통해 가져오려면 컨테이너 레지스트리에 대한 액세스가 필요합니다.

절차

  1. OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드 가상화를 클릭합니다.
  2. 템플릿 탭을 클릭합니다.
  3. 부팅 소스를 구성할 가상 머신 템플릿을 확인하고 소스 추가를 클릭합니다.
  4. 템플릿에 부팅 소스 추가 창에서 부팅 소스 선택을 클릭하고 PVC(영구 볼륨 클레임)를 생성하는 방법을 선택합니다. 로컬 파일 업로드,URL을 통해 가져오기,기존 PVC 복제 또는 레지스트리를 통해 가져오기.
  5. 선택 사항: This is a CD-ROM boot source (CD-ROM 부팅 소스)를 클릭하여 CD-ROM을 마운트하고 이를 사용하여 운영 체제를 빈 디스크에 설치합니다. 추가 빈 디스크는 OpenShift Virtualization에 의해 자동으로 생성 및 마운트됩니다. 추가 디스크가 필요하지 않은 경우 가상 머신을 생성할 때 제거할 수 있습니다.
  6. 영구 볼륨 클레임(PVC) 크기에 값을 입력하여 압축이 해제되지 않은 이미지에 적합한 PVC 크기를 지정하고 필요한 추가 공간을 지정합니다.

    1. 선택 사항: 소스 프로바이더 의 이름을 입력하여 이름을 이 템플릿과 연결합니다.
    2. 선택 사항: 고급 스토리지 설정: Storage(스토리지) 클래스를 클릭하고 디스크를 생성하는 데 사용되는 스토리지 클래스를 선택합니다. 일반적으로 이 스토리지 클래스는 모든 PVC에서 사용하도록 생성되는 기본 스토리지 클래스입니다.

      참고

      제공된 부팅 소스가 최신 버전의 운영 체제로 자동 업데이트됩니다. 자동 업데이트됨 부팅 소스의 경우 PVC(영구 볼륨 클레임)가 클러스터의 기본 스토리지 클래스를 사용하여 생성됩니다. 구성 후 다른 기본 스토리지 클래스를 선택하는 경우 이전 기본 스토리지 클래스로 구성된 클러스터 네임스페이스의 기존 데이터 볼륨을 삭제해야 합니다.

    3. 선택 사항: 고급 스토리지 설정: 액세스 모드를 클릭하고 영구 볼륨에 대한 액세스 모드를 선택합니다.

      • 단일 사용자(RWO) 는 볼륨을 단일 노드에서 읽기-쓰기로 마운트합니다.
      • 공유 액세스(RWX) 는 볼륨을 여러 노드에서 읽기-쓰기로 마운트합니다.
      • 읽기 전용(ROX) 은 볼륨을 여러 노드에서 읽기 전용으로 마운트합니다.
    4. 선택 사항: 고급 스토리지 설정: 기본값인 파일 시스템 대신 Block 을 선택하려면 볼륨 모드를 클릭합니다. OpenShift Virtualization은 원시 블록 볼륨을 정적으로 프로비저닝할 수 있습니다. 이러한 볼륨에는 파일 시스템이 없으며 디스크에 직접 쓰거나 자체 스토리지 서비스를 구현하는 애플리케이션에 성능 이점을 제공할 수 있습니다.
  7. 다음과 같이 부팅 소스를 저장할 적절한 방법을 선택합니다.

    1. 로컬 파일을 업로드한 경우 저장 및 업로드를 클릭합니다.
    2. URL 또는 레지스트리에서 콘텐츠를 가져온 경우 저장 및 가져오기를 클릭합니다.
    3. 기존 PVC를 복제한 경우 저장 및 복제를 클릭합니다.

부팅 소스가 포함된 사용자 지정 가상 머신 템플릿은 템플릿 탭에 나열되며, 이 템플릿을 사용하여 가상 머신을 생성할 수 있습니다.

8.18.15.4. 연결된 부팅 소스를 사용하여 템플릿에서 가상 머신 생성

템플릿에 부팅 소스를 추가한 후 템플릿에서 새 가상 머신을 생성할 수 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 사이드 메뉴에서 워크로드 > 가상화를 클릭합니다.
  2. 가상 머신 탭 또는 템플릿 탭에서 생성을 클릭하고 마법사를 통한 가상 머신을 선택합니다.
  3. 템플릿 선택 단계의 OS 및 버전 이름 옆에 (사용 가능한 소스) 레이블이 있는 운영 체제 목록에서 OS를 선택합니다. (사용 가능한 소스) 라벨은 이 OS에서 부팅 소스를 사용할 수 있음을 나타냅니다.
  4. 검토 및 확인을 클릭합니다.
  5. 필요한 경우 가상 머신 설정을 검토한 후 편집합니다.
  6. 가상 머신 생성을 클릭하여 가상 머신을 생성합니다. 가상 머신 템플릿을 성공적으로 생성했습니다. 페이지가 표시됩니다.

8.18.15.5. 사용자 정의 부팅 소스 생성

부팅 소스로 사용하기 위해 기존 디스크 이미지를 기반으로 사용자 지정 디스크 이미지를 준비할 수 있습니다.

다음 작업을 완료하려면 다음 절차를 사용하십시오.

  • 사용자 지정 디스크 이미지 준비
  • 사용자 지정 디스크 이미지에서 부팅 소스 생성
  • 사용자 지정 템플릿에 부팅 소스 연결

절차

  1. OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드 > 가상화를 클릭합니다.
  2. 템플릿 탭을 클릭합니다.
  3. 사용자 지정할 템플릿의 Source 공급자 열에서 링크를 클릭합니다. 템플릿에 현재 정의된 소스가 있음을 나타내는 창이 표시됩니다.
  4. 창에서 소스 사용자 지정 링크를 클릭합니다.
  5. 부팅 소스 사용자 지정 프로세스에 대한 정보를 읽은 후에 사용자 지정 정보로 진행하려면 부팅 소스 사용자 지정 창에서 계속을 클릭합니다.
  6. 부팅 소스 사용자 지정 준비 페이지의 새 템플릿 정의 섹션에서 다음을 수행합니다.

    1. 새 템플릿 네임스페이스 필드를 선택한 다음 프로젝트를 선택합니다.
    2. 새 템플릿 이름 필드에 사용자 지정 템플릿의 이름을 입력합니다.
    3. 새 템플릿 공급자 필드에 템플릿 프로바이더의 이름을 입력합니다.
    4. 새 템플릿 지원 필드를 선택한 다음, 생성한 사용자 지정 템플릿에 대한 지원 연락처를 나타내는 적절한 값을 선택합니다.
    5. 새 템플릿 플레이버 필드를 선택한 다음 생성한 사용자 지정 이미지의 적절한 CPU 및 메모리 값을 선택합니다.
  7. 사용자 지정에 대한 부팅 소스 준비 섹션에서 필요한 경우 cloud-init YAML 스크립트를 사용자 지정하여 로그인 인증 정보를 정의합니다. 그렇지 않으면 스크립트가 기본 인증 정보를 생성합니다.
  8. 사용자 지정 시작을 클릭합니다. 사용자 지정 프로세스가 시작되고 부팅 소스 사용자 지정 준비 페이지가 표시된 다음 부팅 소스 사용자 지정 페이지가 표시됩니다. 부팅 소스 사용자 지정 페이지에 실행 중인 스크립트의 출력이 표시됩니다. 스크립트가 완료되면 사용자 지정 이미지를 사용할 수 있습니다.
  9. VNC 콘솔게스트 로그인 인증 정보 섹션에서 암호 표시를 클릭합니다. 로그인 인증 정보가 표시됩니다.
  10. 이미지가 로그인할 준비가 되면 게스트 로그인 인증 정보 섹션에 표시된 사용자 이름과 암호를 제공하여 VNC 콘솔로 로그인합니다.
  11. 사용자 지정 이미지가 예상대로 작동하는지 확인합니다. 부팅 가능한 경우 부팅 소스 사용 가능을 클릭합니다.
  12. 사용자 지정 완료 및 템플릿 사용 가능 창에서 I have sealed the boot source so it can be used as a template를 선택한 다음 적용을 클릭합니다.
  13. 부팅 소스 사용자 지정 완료 페이지에서 템플릿 생성 프로세스가 완료될 때까지 기다립니다. 템플릿 세부 정보 탐색또는 템플릿 목록으로 이동을 클릭하여 사용자 지정 부팅 소스에서 생성한 사용자 지정 템플릿을 확인합니다.

8.18.15.6. 추가 리소스

8.18.16. 가상 디스크 핫플러그

중요

가상 디스크 핫플러그는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 https://access.redhat.com/support/offerings/techpreview/를 참조하십시오.

가상 시스템 또는 가상 시스템 인스턴스를 중지하지 않고 가상 디스크를 추가하거나 제거하려면 해당 디스크를 핫 플러그 및 핫 플러그 해제합니다. 이 기능은 가동 중지 시간을 사용하지 않고 실행 중인 가상 시스템에 스토리지를 추가해야 하는 경우에 유용합니다.

가상 디스크를 핫플러그하는 경우 가상 머신이 실행되는 동안 가상 디스크를 가상 머신 인스턴스에 연결합니다.

가상 디스크를 핫 플러그 해제하는 경우 가상 머신이 실행되는 동안 가상 머신 인스턴스에서 가상 디스크를 분리합니다.

데이터 볼륨 및 PVC(영구 볼륨 클레임)만 핫 플러그로 연결할 수 있습니다. 컨테이너 디스크를 핫플러그 또는 핫 플러그 해제할 수 없습니다.

주의

핫플러그 가상 디스크를 가상 머신에 연결하면 가상 머신에서 실시간 마이그레이션을 수행할 수 없습니다. 핫플러그 디스크가 연결된 가상 머신에서 실시간 마이그레이션을 수행하려고 하면 실시간 마이그레이션이 실패합니다.

8.18.16.1. CLI를 사용하여 가상 디스크 핫플러그

가상 머신이 실행되는 동안 VMI(가상 머신 인스턴스)에 연결하려는 가상 디스크를 핫플러그합니다.

사전 요구 사항

  • 가상 디스크를 핫 플러그하려면 실행 중인 가상 머신이 있어야 합니다.
  • 핫 플러그에 사용할 수 있는 데이터 볼륨 또는 PVC(영구 볼륨 클레임)가 하나 이상 있어야 합니다.

절차

  • 다음 명령을 실행하여 가상 디스크를 핫 플러그합니다.

    $ virtctl addvolume <virtual-machine|virtual-machine-instance> --volume-name=<datavolume|PVC> \
    [--persist] [--serial=<label-name>]
    • 선택적 --persist 플래그를 사용하여 핫플러그 디스크를 가상 머신 사양에 영구적으로 마운트된 가상 디스크로 추가합니다. 가상 시스템을 중지, 다시 시작 또는 재부팅하여 가상 디스크를 영구적으로 마운트합니다. --persist 플래그를 지정한 후에는 더 이상 가상 디스크를 핫플러그하거나 연결할 수 없습니다. --persist 플래그는 가상 시스템 인터페이스가 아닌 가상 시스템에 적용됩니다.
    • 선택적 --serial 플래그를 사용하면 선택한 영숫자 문자열 레이블을 추가할 수 있습니다. 이렇게 하면 게스트 가상 시스템에서 핫플러그된 디스크를 식별하는 데 도움이 됩니다. 이 옵션을 지정하지 않으면 라벨의 기본값이 핫플러그된 데이터 볼륨 또는 PVC의 이름으로 설정됩니다.

8.18.16.2. CLI를 사용하여 가상 디스크 핫 플러그 연결

가상 머신이 실행되는 동안 VMI(가상 머신 인스턴스)에서 분리할 가상 디스크의 핫-언플러그입니다.

사전 요구 사항

  • 가상 머신이 실행 중이어야 합니다.
  • 하나 이상의 데이터 볼륨 또는 PVC(영구 볼륨 클레임)를 사용할 수 있고 핫플러그해야 합니다.

절차

  • 다음 명령을 실행하여 가상 디스크의 핫 플러그를 해제합니다

    $ virtctl removevolume <virtual-machine|virtual-machine-instance> --volume-name=<datavolume|PVC>

8.18.17. 가상 머신에서 컨테이너 디스크 사용

가상 머신 이미지를 컨테이너 디스크에 빌드하고 컨테이너 레지스트리에 저장할 수 있습니다. 그러면 컨테이너 디스크를 가상 머신의 영구 스토리지로 가져오거나 임시 저장을 위해 가상 머신에 직접 연결할 수 있습니다.

중요

대규모 컨테이너 디스크를 사용하는 경우 I/O 트래픽이 증가하여 작업자 노드에 영향을 줄 수 있습니다. 이로 인해 노드를 사용할 수 없게 될 수 있습니다. 다음을 통해 이를 해결할 수 있습니다.

8.18.17.1. 컨테이너 디스크 정보

컨테이너 디스크는 컨테이너 이미지 레지스트리에 컨테이너 이미지로 저장되어 있는 가상 머신 이미지입니다. 컨테이너 디스크를 사용하면 동일한 디스크 이미지를 여러 가상 머신에 제공하고 다수의 가상 머신 복제본을 생성할 수 있습니다.

컨테이너 디스크는 가상 머신에 연결된 데이터 볼륨을 사용하여 PVC(영구 볼륨 클레임)로 가져오거나 가상 머신에 임시 containerDisk 볼륨으로 직접 연결할 수 있습니다.

8.18.17.1.1. 데이터 볼륨을 사용하여 컨테이너 디스크를 PVC로 가져오기

CDI(Containerized Data Importer)를 사용하여 데이터 볼륨을 통해 컨테이너 디스크를 PVC로 가져옵니다. 그러면 영구 저장을 위해 데이터 볼륨을 가상 머신에 연결할 수 있습니다.

8.18.17.1.2. 컨테이너 디스크를 가상 머신에 containerDisk 볼륨으로 연결

containerDisk는 임시 볼륨입니다. 이 볼륨은 가상 머신이 중지, 재시작 또는 삭제될 때 삭제됩니다. containerDisk 볼륨이 포함된 가상 머신이 시작되면 레지스트리에서 컨테이너 이미지가 풀링되어 가상 머신이 호스팅되는 노드에서 호스팅됩니다.

CD-ROM과 같은 읽기 전용 파일 시스템이나 일회용 가상 머신에는 containerDisk 볼륨을 사용하십시오.

중요

데이터가 호스팅 노드의 로컬 스토리지에 임시로 기록되므로 읽기-쓰기 파일 시스템에는 containerDisk 볼륨을 사용하지 않는 것이 좋습니다. 이 볼륨을 사용하면 데이터를 대상 노드로 마이그레이션해야 하므로 노드 유지보수의 경우와 같이 가상 머신의 실시간 마이그레이션 속도가 느려집니다. 또한 노드의 전원이 끊기거나 노드가 예기치 않게 종료되면 모든 데이터가 손실됩니다.

8.18.17.2. 가상 머신용 컨테이너 디스크 준비

컨테이너 디스크를 가상 머신에서 사용하려면 가상 머신 이미지를 사용하여 빌드하고 컨테이너 레지스트리에 푸시해야 합니다. 그러면 데이터 볼륨을 사용하여 컨테이너 디스크를 PVC로 가져와서 가상 머신에 연결하거나 컨테이너 디스크를 임시 containerDisk 볼륨으로 가상 머신에 직접 연결할 수 있습니다.

컨테이너 디스크 내부의 디스크 이미지 크기는 컨테이너 디스크가 호스팅되는 레지스트리의 최대 계층 크기로 제한됩니다.

참고

Red Hat Quay의 경우 Red Hat Quay 를 처음 배포할 때 생성되는 YAML 구성 파일을 편집하여 최대 계층 크기를 변경할 수 있습니다.

사전 요구 사항

  • podman을 아직 설치하지 않은 경우 설치합니다.
  • 가상 머신 이미지는 QCOW2 또는 RAW 형식이어야 합니다.

절차

  1. 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로 교체하십시오.
  2. 컨테이너를 빌드하고 태그를 지정합니다.

    $ podman build -t <registry>/<container_disk_name>:latest .
  3. 컨테이너 이미지를 레지스트리에 푸시합니다.

    $ podman push <registry>/<container_disk_name>:latest

컨테이너 레지스트리에 TLS가 없는 경우 컨테이너 디스크를 영구 스토리지로 가져오기 전에 이를 비보안 레지스트리로 추가해야 합니다.

8.18.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
    이 목록의 예제를 유효한 레지스트리 호스트 이름으로 바꿉니다.

8.18.17.4. 다음 단계

8.18.18. CDI 스크래치 공간 준비

8.18.18.1. 데이터 볼륨 정보

Dataolume 오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.

8.18.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 상태로 유지됩니다.

8.18.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에 전달할 때까지 이미지를 스크래치 공간에 다운로드합니다.

8.18.18.4. 스토리지 클래스 정의

spec.scratchSpaceStorageClass 필드를 HyperConverged CR(사용자 정의 리소스)에 추가하여 CR(Containerized Data Importer)에서 스크래치 공간을 할당할 때 사용하는 스토리지 클래스를 정의할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.

절차

  1. 다음 명령을 실행하여 HyperConverged CR을 편집합니다.

    $ oc edit hco -n openshift-cnv kubevirt-hyperconverged
  2. spec.scratchSpaceStorageClass 필드를 CR에 추가하여 해당 값을 클러스터에 존재하는 스토리지 클래스의 이름으로 설정합니다.

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      scratchSpaceStorageClass: "<storage_class>" 1
    1
    스토리지 클래스를 지정하지 않으면 CDI는 채워지는 영구 볼륨 클레임의 스토리지 클래스를 사용합니다.
  3. 기본 편집기를 저장하고 종료하여 HyperConverged CR을 업데이트합니다.

8.18.18.5. CDI 지원 작업 매트릭스

이 매트릭스에는 끝점에 대한 콘텐츠 유형에 따라 지원되는 CDI 작업과 이러한 작업 중 스크래치 공간이 필요한 작업이 표시되어 있습니다.

콘텐츠 유형HTTPHTTPSHTTP 기본 인증레지스트리업로드

KubeVirt (QCOW2)

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2**
✓ GZ*
✓ XZ*

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2*
□ GZ
□ XZ

✓ QCOW2*
✓ GZ*
✓ XZ*

KubeVirt(RAW)

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW*
□ GZ
□ XZ

✓ RAW*
✓ GZ*
✓ XZ*

✓ 지원되는 작업

□ 지원되지 않는 작업

* 스크래치 공간 필요

** 사용자 정의 인증 기관이 필요한 경우 스크래치 공간 필요

8.18.18.6. 추가 리소스

8.18.19. 영구 볼륨 다시 사용

정적으로 프로비저닝된 PV(영구 볼륨)를 다시 사용하려면 먼저 볼륨을 회수해야 합니다. 이를 위해서는 스토리지 구성을 다시 사용할 수 있도록 PV를 삭제해야 합니다.

8.18.19.1. 정적으로 프로비저닝된 영구 볼륨 회수 정보

PV(영구 볼륨)를 회수할 때는 PVC(영구 볼륨 클레임)에서 PV를 바인딩 해제하고 PV를 삭제합니다. 기본 스토리지에 따라 공유 스토리지를 수동으로 삭제해야 할 수도 있습니다.

그런 다음 PV 구성을 다시 사용하여 다른 이름으로 PV를 생성할 수 있습니다.

정적으로 프로비저닝된 PV를 회수하려면 PV에 Retain이라는 회수 정책이 있어야 합니다. 회수 정책이 없으면 PVC를 PV에서 바인딩 해제할 때 PV의 상태가 실패가 됩니다.

중요

OpenShift Container Platform 4에서는 Recycle 회수 정책이 사용되지 않습니다.

8.18.19.2. 정적으로 프로비저닝된 영구 볼륨 회수

PVC(영구 볼륨 클레임)를 바인딩 해제하고 PV를 삭제하여 정적으로 프로비저닝된 PV(영구 볼륨)를 회수합니다. 공유 스토리지를 수동으로 삭제해야 할 수도 있습니다.

정적으로 프로비저닝된 PV를 회수하는 방법은 기본 스토리지에 따라 다릅니다. 이 절차에서는 일반적인 접근법을 제공하며 사용 중인 스토리지에 따라 사용자 정의가 필요할 수 있습니다.

절차

  1. PV의 회수 정책이 Retain으로 설정되어 있는지 확인합니다.

    1. PV의 회수 정책을 확인합니다.

      $ oc get pv <pv_name> -o yaml | grep 'persistentVolumeReclaimPolicy'
    2. persistentVolumeReclaimPolicyRetain으로 설정되지 않은 경우, 다음 명령을 사용하여 회수 정책을 편집합니다.

      $ oc patch pv <pv_name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
  2. PV를 사용하는 리소스가 없는지 확인합니다.

    $ oc describe pvc <pvc_name> | grep 'Mounted By:'

    PVC를 사용하는 모든 리소스를 제거한 후 계속합니다.

  3. PVC를 삭제하여 PV를 해제합니다.

    $ oc delete pvc <pvc_name>
  4. 선택 사항: PV 구성을 YAML 파일로 내보냅니다. 이 절차의 뒷부분에서 공유 스토리지를 수동으로 제거하는 경우 이 구성을 참조할 수 있습니다. PV를 회수한 후 새 PV를 동일한 스토리지 구성으로 생성하기 위해 이 파일의 spec 매개변수를 기반으로 사용할 수도 있습니다.

    $ oc get pv <pv_name> -o yaml > <file_name>.yaml
  5. PV를 삭제합니다.

    $ oc delete pv <pv_name>
  6. 선택 사항: 스토리지 유형에 따라 공유 스토리지 폴더의 콘텐츠를 제거해야 할 수 있습니다.

    $ rm -rf <path_to_share_storage>
  7. 선택 사항: 삭제된 PV와 동일한 스토리지 구성을 사용하는 PV를 생성합니다. 회수된 PV 구성을 이전에 내보낸 경우 해당 파일의 spec 매개변수를 새 PV 매니페스트의 기반으로 사용할 수 있습니다.

    참고

    충돌을 피하려면 새 PV 오브젝트에 삭제한 오브젝트와 다른 이름을 지정하는 것이 좋습니다.

    $ oc create -f <new_pv_name>.yaml

추가 리소스

8.18.20. 데이터 볼륨 삭제

oc 명령줄 인터페이스를 사용하여 데이터 볼륨을 수동으로 삭제할 수 있습니다.

참고

가상 머신을 삭제하면 사용하는 데이터 볼륨이 자동으로 삭제됩니다.

8.18.20.1. 데이터 볼륨 정보

Dataolume 오브젝트는 CDI(Containerized Data Importer) 프로젝트에서 제공하는 사용자 정의 리소스입니다. 데이터 볼륨은 기본 PVC(영구 볼륨 클레임)와 관련된 가져오기, 복제, 업로드 작업을 오케스트레이션합니다. 데이터 볼륨은 OpenShift Virtualization과 통합되며 PVC가 준비되기 전에 가상 머신이 시작되지 않도록 합니다.

8.18.20.2. 모든 데이터 볼륨 나열

oc 명령줄 인터페이스를 사용하여 클러스터의 데이터 볼륨을 나열할 수 있습니다.

절차

  • 다음 명령을 실행하여 모든 데이터 볼륨을 나열합니다.

    $ oc get dvs

8.18.20.3. 데이터 볼륨 삭제

oc CLI(명령줄 인터페이스)를 사용하여 데이터 볼륨을 삭제할 수 있습니다.

사전 요구 사항

  • 삭제할 데이터 볼륨의 이름을 확인합니다.

절차

  • 다음 명령을 실행하여 데이터 볼륨을 삭제합니다.

    $ oc delete dv <datavolume_name>
    참고

    이 명령은 현재 프로젝트에 존재하는 오브젝트만 삭제합니다. 삭제하려는 오브젝트가 다른 프로젝트 또는 네임스페이스에 있는 경우 -n <project_name> 옵션을 지정하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.