검색

7.8. 가상 머신 내보내기

download PDF

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

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

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

참고

Migration Toolkit for Virtualization 을 사용하여 OpenShift Virtualization 클러스터 간에 가상 머신을 마이그레이션할 수 있습니다.

7.8.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에서 볼륨을 내보내는 VirtualMachineExport 매니페스트를 생성하고 example-export.yaml 로 저장합니다.

    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

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

    출력 예

    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
    내부 링크는 클러스터 내에서만 유효합니다.

7.8.2. 내보낸 가상 머신 매니페스트에 액세스

VM(가상 머신) 또는 스냅샷을 내보낸 후 내보내기 서버에서 VirtualMachine 매니페스트 및 관련 정보를 가져올 수 있습니다.

사전 요구 사항

  • VirtualMachineExport CR(사용자 정의 리소스)을 생성하여 가상 머신 또는 VM 스냅샷을 내보냈습니다.

    참고

    spec.source.kind: PersistentVolumeClaim 매개변수가 있는 VirtualMachineExport 오브젝트는 가상 머신 매니페스트를 생성하지 않습니다.

프로세스

  1. 매니페스트에 액세스하려면 먼저 소스 클러스터에서 대상 클러스터로 인증서를 복사해야 합니다.

    1. 소스 클러스터에 로그인합니다.
    2. 다음 명령을 실행하여 cacert.crt 파일에 인증서를 저장합니다.

      $ oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt 1
      1
      VirtualMachineExport 오브젝트의 metadata.name 값으로 바꿉니다 <export_name>.
    3. cacert.crt 파일을 대상 클러스터에 복사합니다.
  2. 다음 명령을 실행하여 소스 클러스터에서 토큰을 디코딩하고 token_decode 파일에 저장합니다.

    $ oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode 1
    1
    VirtualMachineExport 오브젝트의 metadata.name 값으로 바꿉니다 <export_name>.
  3. token_decode 파일을 대상 클러스터에 복사합니다.
  4. 다음 명령을 실행하여 VirtualMachineExport 사용자 정의 리소스를 가져옵니다.

    $ oc get vmexport <export_name> -o yaml
  5. 외부내부 섹션으로 나누어진 status.links 스탠자를 검토합니다. 각 섹션 내의 manifests.url 필드를 확인합니다.

    출력 예

    apiVersion: export.kubevirt.io/v1alpha1
    kind: VirtualMachineExport
    metadata:
      name: example-export
    spec:
      source:
        apiGroup: "kubevirt.io"
        kind: VirtualMachine
        name: example-vm
      tokenSecretRef: example-token
    status:
    #...
      links:
        external:
    #...
          manifests:
          - type: all
            url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/all 1
          - type: auth-header-secret
            url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret 2
        internal:
    #...
          manifests:
          - type: all
            url: https://virt-export-export-pvc.default.svc/internal/manifests/all 3
          - type: auth-header-secret
            url: https://virt-export-export-pvc.default.svc/internal/manifests/secret
      phase: Ready
      serviceName: virt-export-example-export

    1
    VirtualMachine 매니페스트, DataVolume 매니페스트(있는 경우) 및 외부 URL 수신 또는 경로에 대한 공용 인증서가 포함된 ConfigMap 매니페스트가 포함되어 있습니다.
    2
    CDI(Containerized Data Importer)와 호환되는 헤더가 포함된 보안이 포함되어 있습니다. 헤더에는 내보내기 토큰의 텍스트 버전이 포함되어 있습니다.
    3
    VirtualMachine 매니페스트, DataVolume 매니페스트(있는 경우) 및 내부 URL 내보내기 서버의 인증서가 포함된 ConfigMap 매니페스트가 포함되어 있습니다.
  6. 대상 클러스터에 로그인합니다.
  7. 다음 명령을 실행하여 시크릿 매니페스트를 가져옵니다.

    $ curl --cacert cacert.crt <secret_manifest_url> -H \ 1
    "x-kubevirt-export-token:token_decode" -H \ 2
    "Accept:application/yaml"
    1
    & lt;secret_manifest_url >을 VirtualMachineExport YAML 출력의 auth-header-secret URL로 바꿉니다.
    2
    이전에 생성한 token_decode 파일을 참조합니다.

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

    $ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"
  8. 다음 명령을 실행하여 type: all (예: ConfigMapVirtualMachine 매니페스트)의 매니페스트를 가져옵니다.

    $ curl --cacert cacert.crt <all_manifest_url> -H \ 1
    "x-kubevirt-export-token:token_decode" -H \ 2
    "Accept:application/yaml"
    1
    & lt;all_manifest_url& gt;을 VirtualMachineExport YAML 출력의 URL로 바꿉니다.
    2
    이전에 생성한 token_decode 파일을 참조합니다.

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

    $ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/all -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"

다음 단계

  • 내보낸 매니페스트를 사용하여 대상 클러스터에서 ConfigMapVirtualMachine 오브젝트를 생성할 수 있습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.