10.5. 가상 머신 내보내기

VM(가상 머신) 및 관련 디스크를 내보내 VM을 다른 클러스터로 가져오거나 법의학 목적으로 볼륨을 분석할 수 있습니다.

명령줄 인터페이스를 사용하여 VirtualMachineExport CR(사용자 정의 리소스)을 생성합니다.

또는 virtctl vmexport 명령을 사용하여 VirtualMachineExport CR을 생성하고 내보낸 볼륨을 다운로드할 수 있습니다.

10.5.1. VirtualMachineExport 사용자 정의 리소스 생성

VirtualMachineExport 사용자 정의 리소스(CR)를 생성하여 다음 오브젝트를 내보낼 수 있습니다.

  • VM(가상 머신): 지정된 VM의 PVC(영구 볼륨 클레임)를 내보냅니다.
  • VM 스냅샷: VirtualMachineSnapshot CR에 포함된 PVC를 내보냅니다.
  • PVC: PVC를 내보냅니다. virt-launcher Pod와 같은 다른 Pod에서 PVC를 사용하는 경우 PVC가 더 이상 사용되지 않을 때까지 내보내기가 Pending 상태로 유지됩니다.

VirtualMachineExport CR은 내보낸 볼륨에 대한 내부 및 외부 링크를 생성합니다. 내부 링크는 클러스터 내에서 유효합니다. 외부 링크는 Ingress 또는 경로를 사용하여 액세스할 수 있습니다.

내보내기 서버는 다음 파일 형식을 지원합니다.

  • Raw : 원시 디스크 이미지 파일.
  • gzip: 압축 디스크 이미지 파일
  • dir: PVC 디렉토리 및 파일
  • tar.gz: 압축된 PVC 파일

사전 요구 사항

  • VM 내보내기에 대해 VM을 종료해야 합니다.

절차

  1. 다음 예에 따라 VirtualMachine , VirtualMachine Snapshot 또는 PersistentVolumeClaim CR에서 볼륨을 내보내고 example-export.yaml 로 저장할 VirtualMachineExport 매니페스트를 생성합니다.

    VirtualMachineExport

    apiVersion: export.kubevirt.io/v1alpha1
    kind: VirtualMachineExport
    metadata:
      name: example-export
    spec:
      source:
        apiGroup: "kubevirt.io" 1
        kind: VirtualMachine 2
        name: example-vm
      ttlDuration: 1h 3

    1
    적절한 API 그룹을 지정합니다.
    • VirtualMachine"kubevirt.io ".
    • VirtualMachineSnapshot"snapshot.kubevirt.io ".
    • PersistentVolumeClaim"".
    2
    VirtualMachine,VirtualMachineSnapshot 또는 PersistentVolumeClaim 을 지정합니다.
    3
    선택사항입니다. 기본 기간은 2 시간입니다.
  2. VirtualMachineExport CR을 생성합니다.

    $ oc create -f example-export.yaml
  3. VirtualMachineExport CR을 가져옵니다.

    $ oc get vmexport example-export -o yaml

    내보낸 볼륨의 내부 및 외부 링크는 상태 스탠자에 표시됩니다.

    출력 예

    apiVersion: export.kubevirt.io/v1alpha1
    kind: VirtualMachineExport
    metadata:
      name: example-export
      namespace: example
    spec:
      source:
        apiGroup: ""
        kind: PersistentVolumeClaim
        name: example-pvc
      tokenSecretRef: example-token
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2022-06-21T14:10:09Z"
        reason: podReady
        status: "True"
        type: Ready
      - lastProbeTime: null
        lastTransitionTime: "2022-06-21T14:09:02Z"
        reason: pvcBound
        status: "True"
        type: PVCReady
      links:
        external: 1
          cert: |-
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
          volumes:
          - formats:
            - format: raw
              url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img
            - format: gzip
              url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img.gz
            name: example-disk
        internal:  2
          cert: |-
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
          volumes:
          - formats:
            - format: raw
              url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img
            - format: gzip
              url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img.gz
            name: example-disk
      phase: Ready
      serviceName: virt-export-example-export

    1
    외부 링크는 Ingress 또는 경로를 사용하여 클러스터 외부에서 액세스할 수 있습니다.
    2
    내부 링크는 클러스터 내에서만 유효합니다.