7.8. 가상 머신 내보내기
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을 종료해야 합니다.
프로세스
다음 예에 따라 VirtualMachine ,
VirtualMachine
SnapshotPersistentVolumeClaim
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
VirtualMachineExport
CR을 생성합니다.$ oc create -f example-export.yaml
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
7.8.2. 내보낸 가상 머신 매니페스트에 액세스
VM(가상 머신) 또는 스냅샷을 내보낸 후 내보내기 서버에서 VirtualMachine
매니페스트 및 관련 정보를 가져올 수 있습니다.
사전 요구 사항
VirtualMachineExport
CR(사용자 정의 리소스)을 생성하여 가상 머신 또는 VM 스냅샷을 내보냈습니다.참고spec.source.kind: PersistentVolumeClaim
매개변수가 있는VirtualMachineExport
오브젝트는 가상 머신 매니페스트를 생성하지 않습니다.
프로세스
매니페스트에 액세스하려면 먼저 소스 클러스터에서 대상 클러스터로 인증서를 복사해야 합니다.
- 소스 클러스터에 로그인합니다.
다음 명령을 실행하여
cacert.crt
파일에 인증서를 저장합니다.$ oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt 1
- 1
VirtualMachineExport
오브젝트의metadata.name
값으로 바꿉니다<export_name>
.
-
cacert.crt
파일을 대상 클러스터에 복사합니다.
다음 명령을 실행하여 소스 클러스터에서 토큰을 디코딩하고
token_decode
파일에 저장합니다.$ oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode 1
- 1
VirtualMachineExport
오브젝트의metadata.name
값으로 바꿉니다<export_name>
.
-
token_decode
파일을 대상 클러스터에 복사합니다. 다음 명령을 실행하여
VirtualMachineExport
사용자 정의 리소스를 가져옵니다.$ oc get vmexport <export_name> -o yaml
외부
및내부
섹션으로 나누어진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
매니페스트가 포함되어 있습니다.
- 대상 클러스터에 로그인합니다.
다음 명령을 실행하여
시크릿
매니페스트를 가져옵니다.$ curl --cacert cacert.crt <secret_manifest_url> -H \ 1 "x-kubevirt-export-token:token_decode" -H \ 2 "Accept:application/yaml"
예를 들면 다음과 같습니다.
$ 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"
다음 명령을 실행하여
type: all
(예:ConfigMap
및VirtualMachine
매니페스트)의 매니페스트를 가져옵니다.$ curl --cacert cacert.crt <all_manifest_url> -H \ 1 "x-kubevirt-export-token:token_decode" -H \ 2 "Accept:application/yaml"
예를 들면 다음과 같습니다.
$ 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"
다음 단계
-
내보낸 매니페스트를 사용하여 대상 클러스터에서
ConfigMap
및VirtualMachine
오브젝트를 생성할 수 있습니다.