Migration Toolkit for Virtualization 설치 및 사용
VMware vSphere 또는 Red Hat Virtualization에서 Red Hat OpenShift Virtualization으로 마이그레이션
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
1장. Migration Toolkit for Virtualization 정보
MCP(Migration Toolkit for Virtualization)를 사용하여 다음 소스 공급자에서 OpenShift Virtualization 대상 공급자로 가상 머신을 마이그레이션할 수 있습니다.
- VMware vSphere
- RHV(Red Hat Virtualization)
- OpenStack
- VMware vSphere에서 생성한 오픈 가상 어플라이언스(OVA)
- 원격 OpenShift Virtualization 클러스터
추가 리소스
1.1. 콜드 및 웜 마이그레이션 정보
MTV는 다음에서 콜드 마이그레이션을 지원합니다.
- VMware vSphere
- RHV(Red Hat Virtualization)
- OpenStack
- 원격 OpenShift Virtualization 클러스터
MTV는 VMware vSphere 및 RHV에서 웜 마이그레이션을 지원합니다.
1.1.1. 콜드 마이그레이션
콜드 마이그레이션은 기본 마이그레이션 유형입니다. 데이터가 복사되는 동안 소스 가상 머신이 종료됩니다.
1.1.2. 웜 마이그레이션
대부분의 데이터는 사전 복사 단계에서 복사되며 소스 VM(가상 머신)이 실행 중입니다.
그런 다음 VM이 종료되고 나머지 데이터가 컷오버 단계에서 복사됩니다.
Precopy 단계
사전 복사 단계에서 VM이 종료되지 않습니다.
VM 디스크는 변경된 블록 추적(CBT) 스냅샷을 사용하여 증분적으로 복사됩니다. 스냅샷은 기본적으로 1시간 간격으로 생성됩니다. forklift-controller
배포를 업데이트하여 스냅샷 간격을 변경할 수 있습니다.
각 소스 VM 및 각 VM 디스크에 대해 CBT를 활성화해야 합니다.
VM은 최대 28개의 CBT 스냅샷을 지원할 수 있습니다. 소스 VM에 CBT 스냅샷이 너무 많고 Migration Controller
서비스가 새 스냅샷을 생성할 수 없는 경우 웜 마이그레이션이 실패할 수 있습니다. Migration Controller
서비스는 스냅샷이 더 이상 필요하지 않은 경우 각 스냅샷을 삭제합니다.
사전 복사 단계는 컷오버 단계가 수동으로 시작되거나 시작되도록 예약될 때까지 실행됩니다.
컷오버 단계
VM은 컷오버 단계에서 종료되고 나머지 데이터가 마이그레이션됩니다. RAM에 저장된 데이터는 마이그레이션되지 않습니다.
MTV 콘솔을 사용하여 컷오버 단계를 수동으로 시작하거나 마이그레이션
매니페스트에서 컷오버 시간을 예약할 수 있습니다.
2장. 사전 요구 사항
다음 사전 요구 사항을 검토하여 환경에서 마이그레이션할 준비가 되었는지 확인합니다.
2.1. 소프트웨어 요구 사항
호환되는 Red Hat OpenShift 및 OpenShift Virtualization 버전을 설치해야 합니다.
2.2. 스토리지 지원 및 기본 모드
MTV는 지원되는 스토리지에 다음과 같은 기본 볼륨 및 액세스 모드를 사용합니다.
프로비저너 | 볼륨 모드 | 액세스 모드 |
---|---|---|
kubernetes.io/aws-ebs | 블록 | ReadWriteOnce |
kubernetes.io/azure-disk | 블록 | ReadWriteOnce |
kubernetes.io/azure-file | 파일 시스템 | ReadWriteMany |
kubernetes.io/cinder | 블록 | ReadWriteOnce |
kubernetes.io/gce-pd | 블록 | ReadWriteOnce |
kubernetes.io/hostpath-provisioner | 파일 시스템 | ReadWriteOnce |
manila.csi.openstack.org | 파일 시스템 | ReadWriteMany |
openshift-storage.cephfs.csi.ceph.com | 파일 시스템 | ReadWriteMany |
openshift-storage.rbd.csi.ceph.com | 블록 | ReadWriteOnce |
kubernetes.io/rbd | 블록 | ReadWriteOnce |
kubernetes.io/vsphere-volume | 블록 | ReadWriteOnce |
OpenShift Virtualization 스토리지에서 동적 프로비저닝 을 지원하지 않는 경우 다음 설정을 적용해야 합니다.
파일 시스템
볼륨 모드파일 시스템
볼륨 모드가블록
볼륨 모드보다 느립니다.ReadWriteOnce
액세스 모드ReadWriteOnce
액세스 모드는 실시간 가상 머신 마이그레이션을 지원하지 않습니다.
스토리지 프로필 편집에 대한 자세한 내용은 정적으로 프로비저닝된 스토리지 클래스 활성화를 참조하십시오.
마이그레이션에서 EXT4 파일 시스템으로 생성된 블록 스토리지 및 영구 볼륨을 사용하는 경우 CDI의 파일 시스템 오버헤드를 10% 이상으로 늘립니다. CDI에서 가정하는 기본 오버헤드에는 루트 파티션의 예약된 위치가 완전히 포함되지 않습니다. CDI의 파일 시스템 오버헤드를 이 용량으로 늘리지 않으면 마이그레이션이 실패할 수 있습니다.
OpenStack에서 마이그레이션하거나 RHV에서 MTV가 배포된 OCP 클러스터로 콜드 마이그레이션을 실행하는 경우 마이그레이션은 CDI 없이 영구 볼륨을 할당합니다. 이러한 경우 파일 시스템 오버헤드를 조정해야 할 수 있습니다.
기본값이 10%인 구성된 파일 시스템 오버헤드가 너무 낮으면 공간 부족으로 인해 디스크 전송이 실패합니다. 이러한 경우 파일 시스템 오버헤드를 늘려야 합니다.
그러나 경우에 따라 스토리지 사용을 줄이기 위해 파일 시스템 오버헤드를 줄일 수 있습니다.
2.3. 네트워크 사전 요구 사항
다음 사전 요구 사항은 모든 마이그레이션에 적용됩니다.
- IP 주소, VLAN 및 기타 네트워크 구성 설정은 마이그레이션 전이나 마이그레이션 중에 변경할 수 없습니다. 마이그레이션 중에 가상 머신의 MAC 주소는 유지됩니다.
- 소스 환경, OpenShift Virtualization 클러스터 및 복제 리포지토리 간의 네트워크 연결은 안정적이고 중단되지 않아야 합니다.
- 둘 이상의 소스 및 대상 네트워크를 매핑하는 경우 추가 대상 네트워크에 대한 네트워크 연결 정의를 생성해야 합니다.
2.3.1. 포트
방화벽은 다음 포트를 통한 트래픽을 활성화해야 합니다.
포트 | 프로토콜 | 소스 | 대상 | 목적 |
---|---|---|---|---|
443 | TCP | OpenShift 노드 | VMware vCenter | VMware 공급자 인벤토리 디스크 전송 인증 |
443 | TCP | OpenShift 노드 | VMware ESXi 호스트 | 디스크 전송 인증 |
902 | TCP | OpenShift 노드 | VMware ESXi 호스트 | 디스크 전송 데이터 사본 |
포트 | 프로토콜 | 소스 | 대상 | 목적 |
---|---|---|---|---|
443 | TCP | OpenShift 노드 | RHV 엔진 | RHV 공급자 인벤토리 디스크 전송 인증 |
443 | TCP | OpenShift 노드 | RHV 호스트 | 디스크 전송 인증 |
54322 | TCP | OpenShift 노드 | RHV 호스트 | 디스크 전송 데이터 사본 |
2.4. 소스 가상 머신 사전 요구 사항
다음 사전 요구 사항은 모든 마이그레이션에 적용됩니다.
- ISO/CDROM 디스크를 마운트 해제해야 합니다.
- 각 NIC에는 하나의 IPv4 및/또는 하나의 IPv6 주소가 포함되어야 합니다.
- VM 운영 체제는 OpenShift Virtualization에서 게스트 운영 체제로 사용하기 위해 인증 및 지원되어야 합니다.
-
VM 이름에는 소문자(
a-z
), 숫자(0-9
) 또는 하이픈(-
)만 최대 253자까지 포함되어야 합니다. 첫 문자와 마지막 문자는 영숫자여야 합니다. 이름에는 대문자, 공백, 마침표(.
) 또는 특수 문자가 포함되어서는 안 됩니다. VM 이름은 OpenShift Virtualization 환경에서 VM의 이름을 복제해서는 안 됩니다.
참고Migration Toolkit for Virtualization은 규칙을 준수하지 않는 VM에 새 이름을 자동으로 할당합니다.
Migration Toolkit for Virtualization에서는 새 VM 이름을 자동으로 생성할 때 다음과 같이 변경합니다.
- 제외된 문자가 제거됩니다.
- 대문자는 소문자로 전환됩니다.
-
밑줄(
_
)은 대시(-
)로 변경됩니다.
이 기능을 사용하면 규칙을 따르지 않는 VM 이름을 입력한 경우에도 마이그레이션이 원활하게 진행할 수 있습니다.
2.5. Red Hat Virtualization 사전 요구 사항
다음 사전 요구 사항이 Red Hat Virtualization 마이그레이션에 적용됩니다.
-
소스 공급자를 생성하려면 최소한
UserRole
및ReadOnlyAdmin
역할이 할당되어 있어야 합니다. 필요한 최소 권한도 있지만 다른 관리자 또는 슈퍼유저 권한도 작동합니다.
소스 공급자의 가상 머신이 마이그레이션될 때까지 UserRole
및 ReadOnlyAdmin
역할을 유지해야 합니다. 그러지 않으면 마이그레이션이 실패합니다.
가상 머신을 마이그레이션하려면 다음을 수행합니다.
다음 중 하나가 있어야 합니다.
- RHV 관리자 권한. 이러한 권한을 사용하면 시스템의 모든 가상 머신을 마이그레이션할 수 있습니다.
-
마이그레이션하려는 모든 가상 머신에 대한
DiskCreator
및UserVmManager
권한
- 호환되는 Red Hat Virtualization 버전을 사용해야 합니다.
타사 인증서로 대체되지 않은 경우 Manager CA 인증서가 있어야 합니다. 이 경우 Manager Apache CA 인증서를 지정합니다.
브라우저에서 https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA로 이동하여 Manager CA 인증서를 가져올 수 있습니다.
- 직접 LUN 디스크를 사용하여 가상 머신을 마이그레이션하는 경우 VM을 실행할 것으로 예상되는 OpenShift Virtualization 대상 클러스터의 노드가 백엔드 스토리지에 액세스할 수 있는지 확인합니다.
- 소스 공급자에서 대상 공급자로 복사 되는 디스크 이미지와 달리 LUN은 소스 공급자의 가상 머신에서분리되지만 제거되지 않은 다음 대상 공급자에 생성된 가상 머신(VM)에 연결됩니다.
- 소스 공급자에 대한 대체가 필요한 경우 마이그레이션 중에 원본 공급자에서 LUN을 제거하지 않습니다. 그러나 소스 공급자의 VM에 LUN을 다시 연결하기 전에 대상 환경의 VM에서 LUN을 사용하지 않도록 하여 데이터 손상이 발생할 수 있습니다.
2.6. OpenStack 사전 요구 사항
다음 사전 요구 사항이 OpenStack 마이그레이션에 적용됩니다.
- 호환되는 OpenStack 버전을 사용해야 합니다.
2.6.1. OpenStack 소스 공급자를 통한 마이그레이션에 대한 추가 인증 방법
MTV 버전 2.6 이상에서는 표준 사용자 이름 및 암호 인증 정보 세트 외에 OpenStack 소스 공급자와의 마이그레이션에 다음과 같은 인증 방법을 지원합니다.
- 토큰 인증
- 애플리케이션 인증 정보 인증
이러한 방법을 사용하여 Secret
매니페스트를 준비하는 방법을 제외하고 CLI를 사용하여 다른 가상 머신을 마이그레이션하는 것과 동일한 방식으로 OpenStack 소스 공급자가 있는 가상 머신을 마이그레이션할 수 있습니다.
2.6.1.1. OpenStack 소스 공급자에서 토큰 인증 사용
OpenStack 소스 공급자를 생성할 때 사용자 이름 및 암호 인증 대신 토큰 인증을 사용할 수 있습니다.
MTV는 다음 두 가지 유형의 토큰 인증을 지원합니다.
- 사용자 ID가 있는 토큰
- 사용자 이름이 있는 토큰
각 유형의 토큰 인증에 대해 OpenStack의 데이터를 사용하여 시크릿
매니페스트를 생성해야 합니다.
사전 요구 사항
OpenStack 계정이 있어야 합니다.
프로세스
- OpenStack 웹 콘솔의 대시보드에서 프로젝트 > API 액세스를 클릭합니다.
OpenStack RC 파일 다운로드를 확장하고 OpenStack RC 파일을 클릭합니다.
여기에서 <
openstack_rc_file>이라고 하는 다운로드된 파일에
는 토큰 인증에 사용되는 다음 필드가 포함되어 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
토큰 인증에 필요한 데이터를 가져오려면 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack token issue
$ openstack token issue
여기에서 <
openstack_token_output
>이라고 하는 출력에는사용자 ID
가 있는토큰
을 사용하여 인증하는 데 필요한 토큰, userID 및projectID
가 포함됩니다.다음과 유사한
시크릿
매니페스트를 생성합니다.사용자 ID가 있는 토큰을 사용한 인증의 경우:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-tokenid namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: token token: <token_from_openstack_token_output> projectID: <projectID_from_openstack_token_output> userID: <userID_from_openstack_token_output> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-tokenid namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: token token: <token_from_openstack_token_output> projectID: <projectID_from_openstack_token_output> userID: <userID_from_openstack_token_output> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
사용자 이름이 있는 토큰을 사용한 인증의 경우:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-tokenname namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: token token: <token_from_openstack_token_output> domainName: <OS_DOMAIN_NAME_from_openstack_rc_file> projectName: <OS_PROJECT_NAME_from_openstack_rc_file> username: <OS_USERNAME_from_openstack_rc_file> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-tokenname namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: token token: <token_from_openstack_token_output> domainName: <OS_DOMAIN_NAME_from_openstack_rc_file> projectName: <OS_PROJECT_NAME_from_openstack_rc_file> username: <OS_USERNAME_from_openstack_rc_file> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
-
2 단계부터 "소스 공급자의
공급자
매니페스트 생성"부터 가상 머신 마이그레이션의 절차에 따라 가상 머신을 계속 마이그레이션합니다.
2.6.1.2. OpenStack 소스 공급자에서 애플리케이션 인증 정보 사용
OpenStack 소스 공급자를 생성할 때 사용자 이름 및 암호 인증 대신 애플리케이션 자격 증명 인증을 사용할 수 있습니다.
MTV는 다음 두 가지 유형의 애플리케이션 인증 정보를 지원합니다.
- 애플리케이션 인증 정보 ID
- 애플리케이션 인증 정보 이름
각 애플리케이션 인증 유형에 대해 OpenStack의 데이터를 사용하여 시크릿
매니페스트를 생성해야 합니다.
사전 요구 사항
OpenStack 계정이 있어야 합니다.
프로세스
- OpenStack 웹 콘솔의 대시보드에서 프로젝트 > API 액세스를 클릭합니다.
OpenStack RC 파일 다운로드를 확장하고 OpenStack RC 파일을 클릭합니다.
여기에서 <
openstack_rc_file>이라고 하는 다운로드된 파일에
는 애플리케이션 인증 정보 인증에 사용되는 다음 필드가 포함되어 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
애플리케이션 인증 정보 인증에 필요한 데이터를 가져오려면 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack application credential create --role member --role reader --secret redhat forklift
$ openstack application credential create --role member --role reader --secret redhat forklift
여기에서 <
openstack_credential_output>이라고 하는 출력에는
다음이 포함됩니다.-
애플리케이션 인증 정보 ID를 사용하여 인증에 필요한 ID 및
시크릿
-
애플리케이션 인증 정보
이름을
사용하여 인증에 필요한 이름 및시크릿
-
애플리케이션 인증 정보 ID를 사용하여 인증에 필요한 ID 및
다음과 유사한
시크릿
매니페스트를 생성합니다.애플리케이션 인증 정보 ID를 사용한 인증의 경우:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-appid namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: applicationcredential applicationCredentialID: <id_from_openstack_credential_output> applicationCredentialSecret: <secret_from_openstack_credential_output> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-appid namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: applicationcredential applicationCredentialID: <id_from_openstack_credential_output> applicationCredentialSecret: <secret_from_openstack_credential_output> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
애플리케이션 인증 정보 이름을 사용한 인증의 경우:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-appname namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: applicationcredential applicationCredentialName: <name_from_openstack_credential_output> applicationCredentialSecret: <secret_from_openstack_credential_output> domainName: <OS_DOMAIN_NAME_from_openstack_rc_file> username: <OS_USERNAME_from_openstack_rc_file> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: openstack-secret-appname namespace: openshift-mtv labels: createdForProviderType: openstack type: Opaque stringData: authType: applicationcredential applicationCredentialName: <name_from_openstack_credential_output> applicationCredentialSecret: <secret_from_openstack_credential_output> domainName: <OS_DOMAIN_NAME_from_openstack_rc_file> username: <OS_USERNAME_from_openstack_rc_file> url: <OS_AUTH_URL_from_openstack_rc_file> EOF
-
2 단계부터 "소스 공급자의
공급자
매니페스트 생성"부터 가상 머신 마이그레이션의 절차에 따라 가상 머신을 계속 마이그레이션합니다.
2.7. VMware 사전 요구 사항
마이그레이션을 가속화하기 위해 VDDK 이미지를 생성하는 것이 좋습니다. 자세한 내용은 VDDK 이미지 생성을 참조하십시오.
VMware 마이그레이션에는 다음과 같은 사전 요구 사항이 적용됩니다.
- 호환되는 VMware vSphere 버전을 사용해야 합니다.
- 최소 VMware 권한 세트가 있는 사용자로 로그인해야 합니다.
- 사전 마이그레이션 후크를 사용하여 가상 머신에 액세스하려면 소스 가상 머신에 VMware Tools 를 설치해야 합니다.
-
VM 운영 체제는 OpenShift Virtualization에서 게스트 운영 체제로 사용하고
virt-v2v
를 사용한 KVM으로 변환하려면 인증 및 지원되어야 합니다. - 웜 마이그레이션을 실행하는 경우 VM 및 VM 디스크에서 변경된 블록 추적(CBT) 을 활성화해야 합니다.
- 동일한 마이그레이션 계획에서 ESXi 호스트에서 10개 이상의 VM을 마이그레이션하는 경우 호스트의 Cryostat 서비스 메모리를 늘려야 합니다.
- MTV(Migration Toolkit for Virtualization)가 절전 머신 마이그레이션을 지원하지 않기 때문에 하이버네이션을 비활성화하는 것이 좋습니다.
정전이 발생하면 중단이 비활성화된 VM에 대한 데이터가 손실될 수 있습니다. 그러나 하이버네이션이 비활성화되지 않은 경우 마이그레이션이 실패합니다.
MTV 또는 OpenShift Virtualization은 VMWare에서 VM 마이그레이션을 위해 Btrfs 변환을 지원하지 않습니다.
VMware 권한
MCP(Migration Toolkit for Virtualization)를 사용하여 가상 머신을 OpenShift Virtualization으로 마이그레이션하려면 다음과 같은 최소 VMware 권한이 필요합니다.
권한 | 설명 |
---|---|
| |
| 전원이 켜진 가상 머신의 전원을 끌 수 있습니다. 이 작업은 게스트 운영 체제의 전원을 끕니다. |
| 전원이 꺼진 가상 머신의 전원을 켜고 일시 중지된 가상 머신을 다시 시작할 수 있습니다. |
| VMware VIX API에서 가상 머신을 관리할 수 있습니다. |
참고
모든 | |
| 임의의 읽기 및 쓰기 액세스를 위해 가상 머신에서 디스크를 열 수 있습니다. 원격 디스크 마운트에 주로 사용됩니다. |
| VMX, 디스크, 로그 및 NVRAM을 포함하여 가상 머신과 연결된 파일에 대한 작업을 허용합니다. |
| 임의의 읽기 액세스를 위해 가상 머신에서 디스크를 열 수 있습니다. 원격 디스크 마운트에 주로 사용됩니다. |
| VMX, 디스크, 로그 및 NVRAM을 포함하여 가상 머신과 관련된 파일에 대한 읽기 작업을 허용합니다. |
| VMX, 디스크, 로그 및 NVRAM을 포함하여 가상 머신과 연결된 파일에 대한 쓰기 작업을 허용합니다. |
| 템플릿 복제를 허용합니다. |
| 기존 가상 머신 복제 및 리소스를 할당할 수 있습니다. |
| 가상 머신에서 새 템플릿을 생성할 수 있습니다. |
| 가상 머신을 이동하지 않고도 가상 머신의 게스트 운영 체제를 사용자 지정할 수 있습니다. |
| 템플릿에서 가상 머신을 배포할 수 있습니다. |
| 기존의 전원이 꺼진 가상 머신을 템플릿으로 표시할 수 있습니다. |
| 기존 템플릿을 가상 머신으로 표시할 수 있습니다. |
| 사용자 지정 사양을 생성, 수정 또는 삭제할 수 있습니다. |
| 가상 머신의 디스크에서 승격 작업을 수행할 수 있습니다. |
| 사용자 지정 사양을 읽을 수 있습니다. |
| |
| 가상 머신의 현재 상태에서 스냅샷을 생성할 수 있습니다. |
| 스냅샷 기록에서 스냅샷을 제거할 수 있습니다. |
| |
| 데이터 저장소의 내용을 탐색할 수 있습니다. |
| 데이터 저장소에서 낮은 수준의 파일 작업(읽기, 쓰기, 삭제, 이름 변경)을 수행할 수 있습니다. |
| |
| 세션의 유효성을 확인할 수 있습니다. |
| |
| 암호화된 가상 머신의 암호 해독을 허용합니다. |
| 암호화된 리소스에 대한 액세스를 허용합니다. |
2.7.1. VDDK 이미지 생성
MTV(Migration Toolkit for Virtualization)는 VMware vSphere에서 가상 디스크 전송을 가속화하기 위해 VMware VDDK(Virtual Disk Development Kit) SDK를 사용할 수 있습니다.
선택 사항이지만 VDDK 이미지를 생성하는 것이 좋습니다.
이 기능을 사용하려면 VMware VDDK(가상 디스크 개발 키트)를 다운로드하고 VDDK 이미지를 빌드한 후 VDDK 이미지를 이미지 레지스트리로 내보냅니다.
VDDK 패키지에는 심볼릭 링크가 포함되어 있으므로 심볼릭 링크(symlink)를 유지하는 파일 시스템에서 VDDK 이미지를 생성하는 절차를 수행해야 합니다.
VDDK 이미지를 공용 레지스트리에 저장하면 VMware 라이센스 조건을 위반할 수 있습니다.
사전 요구 사항
- Red Hat OpenShift 이미지 레지스트리.
-
Podman이
설치되어 있어야 합니다. - 심볼릭 링크(symlinks)를 유지하는 파일 시스템에서 작업하고 있습니다.
- 외부 레지스트리를 사용하는 경우 OpenShift Virtualization에서 액세스할 수 있어야 합니다.
프로세스
임시 디렉터리를 만들고 해당 디렉터리로 이동합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- 브라우저에서 VMware VDDK 버전 8 다운로드 페이지로 이동합니다.
- 버전 8.0.1을 선택하고 다운로드를 클릭합니다.
OpenShift Virtualization 4.12로 마이그레이션하려면 VMware VDDK 버전 7 다운로드 페이지에서 VDDK 버전 7.0.3.2를 다운로드합니다.
- VDDK 아카이브 파일을 임시 디렉터리에 저장합니다.
VDDK 아카이브를 추출합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
$ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
Dockerfile
을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat > Dockerfile <<EOF FROM registry.access.redhat.com/ubi8/ubi-minimal USER 1001 COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib RUN mkdir -p /opt ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"] EOF
$ cat > Dockerfile <<EOF FROM registry.access.redhat.com/ubi8/ubi-minimal USER 1001 COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib RUN mkdir -p /opt ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"] EOF
VDDK 이미지를 빌드합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman build . -t <registry_route_or_server_path>/vddk:<tag>
$ podman build . -t <registry_route_or_server_path>/vddk:<tag>
VDDK 이미지를 레지스트리로 푸시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman push <registry_route_or_server_path>/vddk:<tag>
$ podman push <registry_route_or_server_path>/vddk:<tag>
- OpenShift Virtualization 환경에서 이미지에 액세스할 수 있는지 확인합니다.
2.7.2. ESXi 호스트의 Cryostat 서비스 메모리 증가
동일한 마이그레이션 계획에서 ESXi 호스트에서 10개 이상의 VM을 마이그레이션하는 경우 호스트의 Cryostat 서비스 메모리를 늘려야 합니다. 그렇지 않으면 Cryostat 서비스 메모리가 10개의 병렬 연결로 제한되므로 마이그레이션이 실패합니다.
프로세스
- ESXi 호스트에 root로 로그인합니다.
/etc/vmware/hostd/config.xml
:에서maxMemory
의 값을1000000000
으로 변경합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... <nfcsvc> <path>libnfcsvc.so</path> <enabled>true</enabled> <maxMemory>1000000000</maxMemory> <maxStreamMemory>10485760</maxStreamMemory> </nfcsvc> ...
... <nfcsvc> <path>libnfcsvc.so</path> <enabled>true</enabled> <maxMemory>1000000000</maxMemory> <maxStreamMemory>10485760</maxStreamMemory> </nfcsvc> ...
hostd
를 다시 시작하십시오.Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/init.d/hostd restart
# /etc/init.d/hostd restart
호스트를 재부팅할 필요가 없습니다.
2.8. 오픈 가상 어플라이언스(OVA) 사전 요구 사항
다음 사전 요구 사항은 OVA(Open Virtual Appliance) 파일 마이그레이션에 적용됩니다.
- 모든 OVA 파일은 VMware vSphere에서 생성합니다.
VMware vSphere에서 생성되지 않았지만 vSphere와 호환되는 OVA 파일의 마이그레이션이 성공할 수 있습니다. 그러나 이러한 파일의 마이그레이션은 MTV에서 지원되지 않습니다. MTV는 VMware vSphere에서 생성한 OVA 파일만 지원합니다.
OVA 파일은 다음 구조 중 하나에 있는 NFS 공유 디렉터리 아래의 하나 이상의 폴더에 있습니다.
모든 VM 정보를 보유하는 하나 이상의 압축된 OVF(Open Virtualization Format) 패키지입니다.
각 압축 패키지의 파일 이름에는
.ova
확장자가 있어야 합니다. 여러 압축 패키지를 동일한 폴더에 저장할 수 있습니다.이 구조를 사용하면 MTV는 루트 폴더와 압축 패키지의 첫 번째 하위 폴더를 검사합니다.
예를 들어 NFS 공유가
/nfs
이면:
폴더/nfs
가 스캔됩니다.
폴더/nfs/subfolder1
이 스캔됩니다.
그러나/nfs/subfolder1/subfolder2
는 스캔되지 않습니다.추출된 OVF 패키지입니다.
이 구조를 사용하면 MTV는 추출된 OVF 패키지에 대해 루트 폴더, 첫 번째 하위 폴더 및 두 번째 수준 하위 폴더를 검사합니다. 그러나 폴더에는
.ovf
파일 하나만 있을 수 있습니다. 그러지 않으면 마이그레이션이 실패합니다.예를 들어 NFS 공유가
/nfs
인 경우:
OVF 파일/nfs/vm.ovf
가 스캔됩니다.
OVF 파일/nfs/subfolder1/vm.ovf
가 스캔됩니다.
OVF 파일/nfs/subfolder1/subfolder2/vm.ovf
가 스캔됩니다.
그러나 OVF 파일/nfs/subfolder1/subfolder2/subfolder3/vm.ovf
가 검색되지 않습니다.
2.9. 소프트웨어 호환성 지침
호환되는 소프트웨어 버전을 설치해야 합니다.
Migration Toolkit for Virtualization | Red Hat OpenShift | OpenShift Virtualization | VMware vSphere | Red Hat Virtualization | OpenStack |
---|---|---|---|---|---|
2.6.7 | 4.14 이상 | 4.14 이상 | 6.5 이상 | 4.4 SP1 이상 | 16.1 이상 |
MTV 2.6은 RHV(Red Hat Virtualization) 4.4 SP1에서만 테스트되었습니다. RHV(Red Hat Virtualization) 4.3에서 마이그레이션은 MTV 2.6에서 테스트되지 않았습니다. 지원되지 않지만 RHV 4.3의 기본 마이그레이션이 작동할 것으로 예상됩니다.
RHV 4.3에서는 MTV용 RHV 4.4에 도입된 개선 사항이 없으며 RHV 4.3에서 새로운 기능을 테스트하지 않았기 때문에 RHV 4.3의 마이그레이션이 RHV 4.4에서 마이그레이션되는 것과 동일한 수준에서 작동하지 않을 수 있으며 일부 기능이 누락될 수 있습니다.
따라서 OpenShift Virtualization으로 마이그레이션하기 전에 RHV를 지원되는 버전으로 업그레이드하는 것이 좋습니다.
그러나 RHV 4.3.11의 마이그레이션은 MTV 2.3에서 테스트되었으며 MTV 2.6을 사용하는 여러 환경에서 실제로 작동할 수 있습니다. 이 경우 OpenShift Virtualization으로 마이그레이션하기 전에 RHVM(Red Hat Virtualization Manager)을 이전에 지원되는 버전으로 업그레이드하는 것이 좋습니다.
2.9.1. OpenShift Operator Life Cycles
OpenShift Container Platform과 함께 사용하기 위해 Red Hat에서 제공하는 Operator의 소프트웨어 유지 관리 라이프 사이클 분류에 대한 자세한 내용은 OpenShift Operator 라이프 사이클 을 참조하십시오.
3장. MTV Operator 설치 및 구성
Red Hat OpenShift 웹 콘솔 또는 CLI(명령줄 인터페이스)를 사용하여 MTV Operator를 설치할 수 있습니다.
MTV(Migration Toolkit for Virtualization) 버전 2.4 이상에서 MTV Operator에는 Red Hat OpenShift 웹 콘솔용 MTV 플러그인이 포함되어 있습니다.
Red Hat OpenShift 웹 콘솔 또는 CLI를 사용하여 MTV Operator를 설치한 후 Operator를 구성할 수 있습니다.
3.1. Red Hat OpenShift 웹 콘솔을 사용하여 MTV Operator 설치
Red Hat OpenShift 웹 콘솔을 사용하여 MTV Operator를 설치할 수 있습니다.
사전 요구 사항
- Red Hat OpenShift 4.14 이상이 설치되어 있어야 합니다.
- OpenShift Virtualization Operator가 OpenShift 마이그레이션 대상 클러스터에 설치되어 있습니다.
-
cluster-admin
권한이 있는 사용자로 로그인해야 합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 Operator → OperatorHub 를 클릭합니다.
- 키워드로 필터링 필드를 사용하여 mtv-operator 를 검색합니다.
- Migration Toolkit for Virtualization Operator 를 클릭한 다음 설치를 클릭합니다.
- 버튼이 활성화되면 ForkliftController 생성 을 클릭합니다.
생성을 클릭합니다.
표시된 목록에 ForkliftController가 표시됩니다.
- 워크로드 → 포드를 클릭하여 MTV Pod 가 실행 중인지 확인합니다.
Operators → 설치된 Operator 를 클릭하여 Migration Toolkit for Virtualization Operator 가 Succeeded 상태로 openshift-mtv 프로젝트에 표시되는지 확인합니다.
플러그인이 준비되면 페이지를 다시 로드하라는 메시지가 표시됩니다. 마이그레이션 메뉴 항목은 Red Hat OpenShift 웹 콘솔 왼쪽에 표시되는 탐색 모음에 자동으로 추가됩니다.
3.2. 명령줄 인터페이스에서 MTV Operator 설치
CLI(명령줄 인터페이스)에서 MTV Operator를 설치할 수 있습니다.
사전 요구 사항
- Red Hat OpenShift 4.14 이상이 설치되어 있어야 합니다.
- OpenShift Virtualization Operator가 OpenShift 마이그레이션 대상 클러스터에 설치되어 있습니다.
-
cluster-admin
권한이 있는 사용자로 로그인해야 합니다.
프로세스
openshift-mtv 프로젝트를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: project.openshift.io/v1 kind: Project metadata: name: openshift-mtv EOF
$ cat << EOF | oc apply -f - apiVersion: project.openshift.io/v1 kind: Project metadata: name: openshift-mtv EOF
migration
이라는OperatorGroup
CR을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: migration namespace: openshift-mtv spec: targetNamespaces: - openshift-mtv EOF
$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: migration namespace: openshift-mtv spec: targetNamespaces: - openshift-mtv EOF
Operator에 대한
서브스크립션
CR을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: mtv-operator namespace: openshift-mtv spec: channel: release-v2.6 installPlanApproval: Automatic name: mtv-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: "mtv-operator.v2.6.7" EOF
$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: mtv-operator namespace: openshift-mtv spec: channel: release-v2.6 installPlanApproval: Automatic name: mtv-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: "mtv-operator.v2.6.7" EOF
ForkliftController
CR을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: ForkliftController metadata: name: forklift-controller namespace: openshift-mtv spec: olm_managed: true EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: ForkliftController metadata: name: forklift-controller namespace: openshift-mtv spec: olm_managed: true EOF
MTV Pod가 실행 중인지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n openshift-mtv
$ oc get pods -n openshift-mtv
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME READY STATUS RESTARTS AGE forklift-api-bb45b8db4-cpzlg 1/1 Running 0 6m34s forklift-controller-7649db6845-zd25p 2/2 Running 0 6m38s forklift-must-gather-api-78fb4bcdf6-h2r4m 1/1 Running 0 6m28s forklift-operator-59c87cfbdc-pmkfc 1/1 Running 0 28m forklift-ui-plugin-5c5564f6d6-zpd85 1/1 Running 0 6m24s forklift-validation-7d84c74c6f-fj9xg 1/1 Running 0 6m30s forklift-volume-populator-controller-85d5cb64b6-mrlmc 1/1 Running 0 6m36s
NAME READY STATUS RESTARTS AGE forklift-api-bb45b8db4-cpzlg 1/1 Running 0 6m34s forklift-controller-7649db6845-zd25p 2/2 Running 0 6m38s forklift-must-gather-api-78fb4bcdf6-h2r4m 1/1 Running 0 6m28s forklift-operator-59c87cfbdc-pmkfc 1/1 Running 0 28m forklift-ui-plugin-5c5564f6d6-zpd85 1/1 Running 0 6m24s forklift-validation-7d84c74c6f-fj9xg 1/1 Running 0 6m30s forklift-volume-populator-controller-85d5cb64b6-mrlmc 1/1 Running 0 6m36s
3.3. MTV Operator 구성
달리 표시되지 않는 한 ForkliftController
CR을 수정하거나 개요 페이지의 Settings 섹션에서 MTV Operator의 다음 설정을 모두 구성할 수 있습니다.
- 동시에 마이그레이션할 수 있는 계획당 최대 VM(가상 머신) 수입니다.
-
자동으로 삭제하기 전에 보고서를
수집해야
하는 기간입니다. - 기본 컨트롤러 컨테이너에 할당된 CPU 제한입니다.
- 기본 컨트롤러 컨테이너에 할당된 메모리 제한입니다.
- 웜 마이그레이션을 시작하기 전에 새 스냅샷을 요청하는 간격입니다.
- 웜 마이그레이션 중에 스냅샷 생성 또는 제거 상태를 확인하는 빈도입니다.
-
storageclass
가 파일 시스템 파일 시스템(ForkliftController
CR만 해당)인 경우파일
시스템 오버헤드로 할당된 영구 볼륨의 공간의 백분율입니다. -
영구 블록 볼륨에 할당된 고정된 양의 추가 공간입니다. 이 설정은 블록 기반(
ForkliftController
CR만 해당)에 적용되는 모든스토리지 클래스에
적용됩니다. -
운영 체제의 구성 맵을 vSphere 소스 공급자의 기본 설정에 적용합니다(
ForkliftController
CR만 해당). -
운영 체제의 구성 맵을 RHV(Red Hat Virtualization) 소스 공급자(
ForkliftController
CR 전용)의 기본 설정에 적용합니다.
사용자 인터페이스를 사용하여 이러한 설정을 구성하는 절차는 MTV 설정 구성에 표시됩니다. ForkliftController
CR을 수정하여 이러한 설정을 구성하는 절차는 다음과 같습니다.
프로세스
-
다음과 같이 라벨 및 값을 추가하여
ForkliftController
CR의spec
부분에 있는 매개변수 값을 변경합니다.
spec: label: value
spec:
label: value
- 1
- CLI를 사용하여 구성할 수 있는 레이블은 각 라벨 및 기본값에 대한 설명과 함께 다음 표에 표시됩니다.
레이블 | 설명 | 기본값 |
---|---|---|
| 동시에 마이그레이션할 수 있는 계획당 최대 VM 수입니다. |
|
|
보존을 위한 기간은 보고서를 자동으로 삭제하기 전에 보고서를 |
|
| 기본 컨트롤러 컨테이너에 할당된 CPU 제한입니다. |
|
| 기본 컨트롤러 컨테이너에 할당된 메모리 제한입니다. |
|
| 웜 마이그레이션을 시작하기 전에 새 스냅샷을 요청하는 간격(분)입니다. |
|
| 시스템이 웜 마이그레이션 중에 스냅샷 생성 또는 제거 상태를 확인하는 빈도(초)입니다. |
|
|
|
|
|
영구 블록 볼륨에 할당된 고정된 양의 추가 공간입니다. 이 설정은 블록 기반 모든
|
|
| vSphere 소스 공급자를 위한 구성 맵입니다. 이 구성 맵은 들어오는 VM의 운영 체제를 OpenShift Virtualization 기본 설정 이름에 매핑합니다. 이 구성 맵은 MTV Operator가 배포된 네임스페이스에 있어야 합니다. OpenShift Virtualization 환경에서 기본 설정 목록을 보려면 OpenShift 웹 콘솔을 열고 가상화 → 환경 설정을 클릭합니다.
이 레이블의 기본값이
|
|
| RHV 소스 공급자의 구성 맵입니다. 이 구성 맵은 들어오는 VM의 운영 체제를 OpenShift Virtualization 기본 설정 이름에 매핑합니다. 이 구성 맵은 MTV Operator가 배포된 네임스페이스에 있어야 합니다. OpenShift Virtualization 환경에서 기본 설정 목록을 보려면 OpenShift 웹 콘솔을 열고 가상화 → 환경 설정을 클릭합니다.
이 레이블의 기본값이
|
|
4장. Red Hat OpenShift 웹 콘솔을 사용하여 가상 머신 마이그레이션
Red Hat OpenShift 웹 콘솔을 사용하여 VM(가상 머신)을 마이그레이션할 수 있습니다.
모든 사전 요구 사항이 충족되었는지 확인해야 합니다.
VMware만 해당: 최소 VMware 권한 세트가 있어야 합니다.
VMware만 해당: VMware VDDK(가상 디스크 개발 키트) 이미지를 생성하면 마이그레이션 속도가 향상됩니다.
4.1. MTV 사용자 인터페이스
MCP(Migration Toolkit for Virtualization) 사용자 인터페이스가 OpenShift 웹 콘솔에 통합되어 있습니다.
왼쪽 패널에서 마이그레이션 진행의 구성 요소(예: 마이그레이션 용 공급자)와 관련된 페이지를 선택하거나 관리자인 경우 마이그레이션 에 대한 정보가 포함된 개요 를 선택할 수 있으며 MTV 설정을 구성할 수 있습니다.
그림 4.1. MTV 확장 인터페이스

구성 요소와 관련된 페이지에서 페이지의 왼쪽 상단에 있는 프로젝트 목록을 클릭하고 작업할 수 있는 프로젝트(네임스페이스)를 확인할 수 있습니다.
- 관리자인 경우 모든 프로젝트를 볼 수 있습니다.
- 관리자가 아닌 경우 작업할 수 있는 권한이 있는 프로젝트만 볼 수 있습니다.
4.2. MTV 개요 페이지
MCP(Migration Toolkit for Virtualization) 개요 페이지에는 마이그레이션에 대한 시스템 전체 정보와 변경할 수 있는 설정 목록이 표시됩니다.
관리자 권한이 있는 경우 Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 개요를 클릭하여 개요 페이지에 액세스할 수 있습니다.
개요 페이지에는 세 개의 탭이 있습니다.
- 개요
- YAML
- 지표
4.2.1. 개요 탭
개요 탭에서는 다음을 볼 수 있습니다.
- operator: MTV Operator가 배포된 네임스페이스 및 Operator의 상태
- Pod: MTV Operator가 배포한 각 Pod의 이름, 상태 및 생성 시간입니다.
conditions: MTV Operator의 상태:
-
실패: 마지막 실패.
false
는 배포 이후의 실패를 나타냅니다. - running: Operator가 현재 실행 중인지와 다음 조정을 대기 중인지 여부입니다.
- 성공: 마지막으로 성공적인 조정입니다.
-
실패: 마지막 실패.
4.2.2. YAML 탭
MTV Operator의 작업을 정의하는 사용자 정의 리소스 ForkliftController입니다. 이 탭에서 사용자 정의 리소스를 수정할 수 있습니다.
4.2.3. 메트릭 탭
메트릭 탭에서는 다음을 볼 수 있습니다.
마이그레이션: MTV를 사용하여 수행되는 마이그레이션 수입니다.
- 합계
- Running
- Failed
- succeeded
- 취소됨
가상 머신 마이그레이션: MTV를 사용하여 마이그레이션된 VM 수입니다.
- 합계
- Running
- Failed
- succeeded
- 취소됨
단일 마이그레이션에는 많은 가상 머신이 포함될 수 있으므로 MTV를 사용하여 수행되는 마이그레이션 수는 MTV를 사용하여 마이그레이션된 가상 머신 수와 크게 다를 수 있습니다.
- 지난 7일마다 MTV를 사용하여 수행되는 실행, 실패 및 성공한 마이그레이션의 수를 보여주는 차트
- 지난 7일마다 MTV를 사용하여 수행되는 실행 중, 실패 및 성공한 가상 머신 마이그레이션의 수를 보여주는 차트
4.3. MTV 설정 구성
관리자 권한이 있는 경우 개요 페이지에 액세스하여 해당 페이지에서 다음 설정을 변경할 수 있습니다.
설정 | 설명 | 기본값 |
---|---|---|
최대 동시 가상 머신 마이그레이션 | 동시에 마이그레이션할 수 있는 계획당 최대 VM 수 | 20 |
다음 시간 이후 정리를 수집해야 합니다. |
보존 기간은 보고서를 자동으로 삭제하기 전에 | 비활성화됨 |
컨트롤러 기본 컨테이너 CPU 제한 | 기본 컨트롤러 컨테이너에 할당된 CPU 제한 | 500m |
컨트롤러 기본 컨테이너 메모리 제한 | 기본 컨트롤러 컨테이너에 할당된 메모리 제한 | 800 Mi |
사전 복사 내부(분) | 웜 마이그레이션을 시작하기 전에 새 스냅샷을 요청하는 간격 | 60 |
스냅샷 폴링 간격(초) | 웜 마이그레이션 중에 스냅샷 생성 또는 제거 상태를 확인하는 빈도 | 10 |
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 개요 를 클릭합니다. 설정 목록은 페이지 오른쪽에 있습니다.
- 설정 목록에서 변경할 설정의 편집 아이콘을 클릭합니다.
- 목록에서 설정을 선택합니다.
- 저장을 클릭합니다.
4.4. 공급자 추가
Red Hat OpenShift 웹 콘솔을 사용하여 가상 머신 마이그레이션의 소스 공급자 및 대상 공급자를 추가할 수 있습니다.
4.4.1. 소스 공급자 추가
MTV를 사용하여 다음 소스 공급자에서 VM을 마이그레이션할 수 있습니다.
- VMware vSphere
- Red Hat Virtualization
- OpenStack
- VMware vSphere에서 생성한 오픈 가상 어플라이언스(OVA)
- OpenShift Virtualization
Red Hat OpenShift 웹 콘솔을 사용하여 소스 공급자를 추가할 수 있습니다.
4.4.1.1. VMware vSphere 소스 공급자 추가
VMware vCenter 또는 VMWare ESX/ESXi 서버에서 VMware vSphere VM을 마이그레이션할 수 있습니다. MTV 버전 2.6 이상에서는 vCenter를 거치지 않고 ESX/ESXi 서버의 SDK 엔드포인트를 지정하여 ESX/ESXi 서버에서 직접 마이그레이션할 수 있습니다.
Migration Toolkit for Virtualization에서 지원하지만 2023 FIPS 요구 사항을 준수하지 않는 vSphere 버전에서 마이그레이션을 활성화하기 위해 VMware vSphere 소스 공급자와의 마이그레이션에는 적용되지 않습니다. 따라서 사용자는 vSphere 소스 공급자의 마이그레이션이 FIPS 준수 여부를 고려해야 합니다. 지원되는 vSphere 버전은 소프트웨어 호환성 지침에 지정됩니다.
사전 요구 사항
- 모든 클러스터에서 액세스할 수 있는 보안 레지스트리에 VMware VDDK(가상 디스크 개발 키트) 이미지를 생성하는 것이 좋습니다. VDDK 이미지는 마이그레이션을 가속화합니다. 자세한 내용은 VDDK 이미지 생성을 참조하십시오.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 생성을 클릭합니다.
- vSphere 를 클릭합니다.
- 다음 필드를 지정합니다.
공급자 세부 정보
- provider resource name: 소스 공급자의 이름입니다.
- 끝점 유형: vSphere 공급자 끝점 유형을 선택합니다. 옵션: vCenter 또는 ESXi. vCenter에서 가상 머신, vCenter에서 관리하지 않는 ESX/ESXi 서버 또는 vCenter에서 관리하지만 vCenter를 통과하지 않는 ESX/ESXi 서버에서 마이그레이션할 수 있습니다.
-
URL: 소스 VM이 마운트된 vCenter 끝점의 URL입니다. URL에
sdk
경로(일반적으로/sdk
)가 포함되어 있는지 확인합니다. 예:https://vCenter-host-example.com/sdk
. FQDN에 대한 인증서가 지정된 경우 이 필드의 값이 인증서의 FQDN과 일치해야 합니다. -
VDDK init 이미지:
VDDKInitImage
경로. 마이그레이션을 가속화하기 위해 VDDK init 이미지를 생성하는 것이 좋습니다. 자세한 내용은 VDDK 이미지 생성을 참조하십시오.
공급자 세부 정보
-
username: vCenter 사용자 또는 ESXi 사용자 예:
user@vsphere.local
. 암호: vCenter 사용자 암호 또는 ESXi 사용자 암호입니다.
CA 인증서의 유효성을 검증하기 위해 다음 옵션 중 하나를 선택합니다.
- 사용자 정의 CA 인증서 사용: 사용자 정의 CA 인증서를 검증한 후 마이그레이션.
- 시스템 CA 인증서 사용: 시스템 CA 인증서를 검증한 후 마이그레이션.
인증서 검증 건너뛰기 : CA 인증서의 유효성을 검사하지 않고 마이그레이션합니다.
- 사용자 정의 CA 인증서를 사용하려면 Skip 인증서 유효성 검사 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서를 텍스트 박스로 끌어오 거나 선택을 클릭합니다.
- 시스템 CA 인증서를 사용하려면 Skip 인증서 검증 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서 텍스트 상자를 비워 둡니다.
- 인증서 검증을 건너뛰려면 Skip 인증서 검증 스위치를 오른쪽으로 전환합니다.
선택 사항: MTV를 사용하여 공급자의 API 끝점 URL에서 사용자 정의 CA 인증서를 가져옵니다.
- URL에서 Fetch 인증서를 클릭합니다. 인증서 확인 창이 열립니다.
세부 정보가 올바르면 이 인증서의 진위 여부를 신뢰하고 확인 을 클릭합니다. 그렇지 않은 경우 취소 를 클릭한 다음 올바른 인증서 정보를 수동으로 입력합니다.
확인되면 CA 인증서가 API 끝점과의 후속 통신을 확인하는 데 사용됩니다.
공급자 생성 을 클릭하여 공급자를 추가하고 저장합니다.
공급자가 공급자 목록에 나타납니다.
참고공급자가
Ready
상태가 되는 데 몇 분이 걸릴 수 있습니다.
4.4.1.1.1. VMware 소스 공급자의 마이그레이션 네트워크 선택
소스 공급자의 Red Hat OpenShift 웹 콘솔에서 마이그레이션 네트워크를 선택하여 소스 환경의 위험을 줄이고 성능을 향상시킬 수 있습니다.
기본 네트워크를 마이그레이션에 사용하면 네트워크에 충분한 대역폭이 없을 수 있으므로 성능이 저하될 수 있습니다. 디스크 전송 작업이 네트워크를 포화시킬 수 있으므로 이 상황은 소스 플랫폼에 부정적인 영향을 미칠 수 있습니다.
vSphere에서 NFV(Network File Copy) 서비스를 사용하여 호스트에서 전송되는 디스크를 제어할 수도 있습니다.
사전 요구 사항
- 마이그레이션 네트워크에는 디스크 전송을 위해 충분한 처리량, 최소 10Gbps의 속도가 있어야 합니다.
기본 게이트웨이를 통해 OpenShift Virtualization 노드에서 마이그레이션 네트워크에 액세스할 수 있어야 합니다.
참고소스 가상 디스크는 대상 네임스페이스의 Pod 네트워크에 연결된 Pod에서 복사합니다.
- 마이그레이션 네트워크에는 점보 프레임이 활성화되어 있어야 합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 옆에 있는 Hosts (호스트) 열에서 호스트 번호를 클릭하여 호스트 목록을 확인합니다.
- 하나 이상의 호스트를 선택하고 마이그레이션 네트워크 선택을 클릭합니다.
다음 필드를 지정합니다.
- 네트워크: 네트워크 이름
-
ESXi 호스트 관리자 사용자 이름: 예:
root
- ESXi 호스트 관리자 암호: 암호
- 저장을 클릭합니다.
각 호스트의 상태가 Ready 인지 확인합니다.
호스트 상태가 Ready 가 아닌 경우 마이그레이션 네트워크에서 호스트에 연결할 수 없거나 인증 정보가 올바르지 않을 수 있습니다. 호스트 구성을 수정하고 변경 사항을 저장할 수 있습니다.
4.4.1.2. Red Hat Virtualization 소스 공급자 추가
Red Hat OpenShift 웹 콘솔을 사용하여 Red Hat Virtualization 소스 공급자를 추가할 수 있습니다.
사전 요구 사항
- 관리자 CA 인증서가 타사 인증서로 대체되지 않은 경우 Manager Apache CA 인증서를 지정합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 생성을 클릭합니다.
- Red Hat Virtualization을 클릭합니다.
다음 필드를 지정합니다.
- provider resource name: 소스 공급자의 이름입니다.
-
URL: 소스 VM이 마운트된RHVM(Red Hat Virtualization Manager)의 API 끝점 URL입니다. URL에 Cryostat API 서버(일반적으로
/ovirt-engine/api
)로 이어지는 경로가 포함되어 있는지 확인합니다. 예:https://rhv-host-example.com/ovirt-engine/api
. - 사용자 이름: 사용자 이름.
- 암호: 암호.
CA 인증서의 유효성을 검증하기 위해 다음 옵션 중 하나를 선택합니다.
- 사용자 정의 CA 인증서 사용: 사용자 정의 CA 인증서를 검증한 후 마이그레이션.
- 시스템 CA 인증서 사용: 시스템 CA 인증서를 검증한 후 마이그레이션.
인증서 검증 건너뛰기 : CA 인증서의 유효성을 검사하지 않고 마이그레이션합니다.
- 사용자 정의 CA 인증서를 사용하려면 Skip 인증서 유효성 검사 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서를 텍스트 박스로 끌어오 거나 선택을 클릭합니다.
- 시스템 CA 인증서를 사용하려면 Skip 인증서 검증 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서 텍스트 상자를 비워 둡니다.
- 인증서 검증을 건너뛰려면 Skip 인증서 검증 스위치를 오른쪽으로 전환합니다.
선택 사항: MTV를 사용하여 공급자의 API 끝점 URL에서 사용자 정의 CA 인증서를 가져옵니다.
- URL에서 Fetch 인증서를 클릭합니다. 인증서 확인 창이 열립니다.
세부 정보가 올바르면 이 인증서의 진위 여부를 신뢰하고 확인 을 클릭합니다. 그렇지 않은 경우 취소 를 클릭한 다음 올바른 인증서 정보를 수동으로 입력합니다.
확인되면 CA 인증서가 API 끝점과의 후속 통신을 확인하는 데 사용됩니다.
공급자 생성 을 클릭하여 공급자를 추가하고 저장합니다.
공급자가 공급자 목록에 나타납니다.
4.4.1.3. OpenStack 소스 공급자 추가
Red Hat OpenShift 웹 콘솔을 사용하여 OpenStack 소스 공급자를 추가할 수 있습니다.
OpenStack 공급자에서 이미지 기반 VM을 마이그레이션하면 소스 VM에 연결된 이미지에 대한 스냅샷이 생성되고 스냅샷의 데이터가 대상 VM으로 복사됩니다. 즉, 스냅샷이 생성될 때 대상 VM의 상태가 소스 VM과 동일합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 생성을 클릭합니다.
- OpenStack 을 클릭합니다.
다음 필드를 지정합니다.
- provider resource name: 소스 공급자의 이름입니다.
-
URL: OpenStack Identity(Keystone) 끝점의 URL입니다. 예:
http://controller:5000/v3
. 인증 유형: 다음 인증 방법 중 하나를 선택하고 선택한 것과 관련된 정보를 제공합니다. 예를 들어 애플리케이션 인증 정보 ID 를 인증 유형으로 선택하는 경우 애플리케이션 인증 정보 ID 및 애플리케이션 인증 정보 시크릿 필드가 활성화되고 ID와 시크릿을 제공해야 합니다.
애플리케이션 인증 정보 ID
- 애플리케이션 인증 정보 ID: OpenStack 애플리케이션 인증 정보 ID
-
애플리케이션 인증 정보 시크릿: OpenStack https://github.com/kubev2v/forklift-documentation/pull/402pplication 인증 정보
시크릿
애플리케이션 인증 정보 이름
- 애플리케이션 인증 정보 이름: OpenStack 애플리케이션 인증 정보 이름
-
애플리케이션 인증 정보 시크릿 : : : OpenStack 애플리케이션 인증 정보
시크릿
- 사용자 이름: OpenStack 사용자 이름
- domain: OpenStack 도메인 이름
사용자 ID가 있는 토큰
- 토큰: OpenStack 토큰
- 사용자 ID: OpenStack 사용자 ID
- 프로젝트 ID: OpenStack 프로젝트 ID
사용자 이름이 있는 토큰
- 토큰: OpenStack 토큰
- 사용자 이름: OpenStack 사용자 이름
- 프로젝트: OpenStack 프로젝트
- 도메인 이름: OpenStack 도메인 이름
암호
- 사용자 이름: OpenStack 사용자 이름
- 암호: OpenStack 암호
- 프로젝트: OpenStack 프로젝트
- domain: OpenStack 도메인 이름
CA 인증서의 유효성을 검증하기 위해 다음 옵션 중 하나를 선택합니다.
- 사용자 정의 CA 인증서 사용: 사용자 정의 CA 인증서를 검증한 후 마이그레이션.
- 시스템 CA 인증서 사용: 시스템 CA 인증서를 검증한 후 마이그레이션.
인증서 검증 건너뛰기 : CA 인증서의 유효성을 검사하지 않고 마이그레이션합니다.
- 사용자 정의 CA 인증서를 사용하려면 Skip 인증서 유효성 검사 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서를 텍스트 박스로 끌어오 거나 선택을 클릭합니다.
- 시스템 CA 인증서를 사용하려면 Skip 인증서 검증 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서 텍스트 상자를 비워 둡니다.
- 인증서 검증을 건너뛰려면 Skip 인증서 검증 스위치를 오른쪽으로 전환합니다.
선택 사항: MTV를 사용하여 공급자의 API 끝점 URL에서 사용자 정의 CA 인증서를 가져옵니다.
- URL에서 Fetch 인증서를 클릭합니다. 인증서 확인 창이 열립니다.
세부 정보가 올바르면 이 인증서의 진위 여부를 신뢰하고 확인 을 클릭합니다. 그렇지 않은 경우 취소 를 클릭한 다음 올바른 인증서 정보를 수동으로 입력합니다.
확인되면 CA 인증서가 API 끝점과의 후속 통신을 확인하는 데 사용됩니다.
공급자 생성 을 클릭하여 공급자를 추가하고 저장합니다.
공급자가 공급자 목록에 나타납니다.
4.4.1.4. OVA(Open Virtual Appliance) 소스 공급자 추가
Red Hat OpenShift 웹 콘솔을 사용하여 VMware vSphere에서 생성한 OVA(Open Virtual Appliance) 파일을 소스 공급자로 추가할 수 있습니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 생성을 클릭합니다.
- OVA(Open Virtual Appliance) 를 클릭합니다.
다음 필드를 지정합니다.
- provider resource name: 소스 공급자의 이름
- URL: OVA를 제공하는 NFS 파일 공유의 URL
공급자 생성 을 클릭하여 공급자를 추가하고 저장합니다.
공급자가 공급자 목록에 나타납니다.
참고오류가 발생했음을 나타내는 오류 메시지가 표시될 수 있습니다. 이 메시지는 무시해도 됩니다.
4.4.1.5. Red Hat OpenShift Virtualization 소스 공급자 추가
Red Hat OpenShift Virtualization 공급자를 소스 공급자와 대상 공급자로 사용할 수 있습니다.
특히 OpenShift Virtualization 공급자로 자동 추가되는 호스트 클러스터는 소스 공급자와 대상 공급자로 사용할 수 있습니다.
MTV가 배포된 클러스터에서 다른 클러스터로 VM을 마이그레이션하거나 원격 클러스터에서 MTV가 배포된 클러스터로 마이그레이션할 수 있습니다.
소스 공급자의 Red Hat OpenShift 클러스터 버전은 4.13 이상이어야 합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 생성을 클릭합니다.
- OpenShift Virtualization을 클릭합니다.
다음 필드를 지정합니다.
- provider resource name: 소스 공급자의 이름
- URL: API 서버의 끝점의 URL
서비스 계정 전달자 토큰:
cluster-admin
권한이 있는 서비스 계정의 토큰URL 및 서비스 계정 전달자 토큰이 모두 비어 있으면 로컬 OpenShift 클러스터가 사용됩니다.
CA 인증서의 유효성을 검증하기 위해 다음 옵션 중 하나를 선택합니다.
- 사용자 정의 CA 인증서 사용: 사용자 정의 CA 인증서를 검증한 후 마이그레이션.
- 시스템 CA 인증서 사용: 시스템 CA 인증서를 검증한 후 마이그레이션.
인증서 검증 건너뛰기 : CA 인증서의 유효성을 검사하지 않고 마이그레이션합니다.
- 사용자 정의 CA 인증서를 사용하려면 Skip 인증서 유효성 검사 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서를 텍스트 박스로 끌어오 거나 선택을 클릭합니다.
- 시스템 CA 인증서를 사용하려면 Skip 인증서 검증 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서 텍스트 상자를 비워 둡니다.
- 인증서 검증을 건너뛰려면 Skip 인증서 검증 스위치를 오른쪽으로 전환합니다.
선택 사항: MTV를 사용하여 공급자의 API 끝점 URL에서 사용자 정의 CA 인증서를 가져옵니다.
- URL에서 Fetch 인증서를 클릭합니다. 인증서 확인 창이 열립니다.
세부 정보가 올바르면 이 인증서의 진위 여부를 신뢰하고 확인 을 클릭합니다. 그렇지 않은 경우 취소 를 클릭한 다음 올바른 인증서 정보를 수동으로 입력합니다.
확인되면 CA 인증서가 API 끝점과의 후속 통신을 확인하는 데 사용됩니다.
공급자 생성 을 클릭하여 공급자를 추가하고 저장합니다.
공급자가 공급자 목록에 나타납니다.
4.4.2. 대상 공급자 추가
Red Hat OpenShift 웹 콘솔을 사용하여 OpenShift Virtualization 대상 공급자를 추가할 수 있습니다.
4.4.2.1. OpenShift Virtualization 대상 공급자 추가
Red Hat OpenShift Virtualization 공급자를 소스 공급자와 대상 공급자로 사용할 수 있습니다.
특히 OpenShift Virtualization 공급자로 자동 추가되는 호스트 클러스터는 소스 공급자와 대상 공급자로 사용할 수 있습니다.
MTV를 설치한 클러스터인 기본 OpenShift Virtualization 대상 공급자 외에도 Red Hat OpenShift 웹 콘솔에 OpenShift Virtualization 대상 공급자를 추가할 수도 있습니다.
MTV가 배포된 클러스터에서 다른 클러스터로 VM을 마이그레이션하거나 원격 클러스터에서 MTV가 배포된 클러스터로 마이그레이션할 수 있습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 OpenShift Virtualization 서비스 계정 토큰이 있어야 합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
- 공급자 생성을 클릭합니다.
- OpenShift Virtualization을 클릭합니다.
다음 필드를 지정합니다.
- provider resource name: 소스 공급자의 이름
- URL: API 서버의 끝점의 URL
서비스 계정 전달자 토큰:
cluster-admin
권한이 있는 서비스 계정의 토큰URL 및 서비스 계정 전달자 토큰이 모두 비어 있으면 로컬 OpenShift 클러스터가 사용됩니다.
CA 인증서의 유효성을 검증하기 위해 다음 옵션 중 하나를 선택합니다.
- 사용자 정의 CA 인증서 사용: 사용자 정의 CA 인증서를 검증한 후 마이그레이션.
- 시스템 CA 인증서 사용: 시스템 CA 인증서를 검증한 후 마이그레이션.
인증서 검증 건너뛰기 : CA 인증서의 유효성을 검사하지 않고 마이그레이션합니다.
- 사용자 정의 CA 인증서를 사용하려면 Skip 인증서 유효성 검사 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서를 텍스트 박스로 끌어오 거나 선택을 클릭합니다.
- 시스템 CA 인증서를 사용하려면 Skip 인증서 검증 스위치가 왼쪽으로 토글된 상태로 두고 CA 인증서 텍스트 상자를 비워 둡니다.
- 인증서 검증을 건너뛰려면 Skip 인증서 검증 스위치를 오른쪽으로 전환합니다.
선택 사항: MTV를 사용하여 공급자의 API 끝점 URL에서 사용자 정의 CA 인증서를 가져옵니다.
- URL에서 Fetch 인증서를 클릭합니다. 인증서 확인 창이 열립니다.
세부 정보가 올바르면 이 인증서의 진위 여부를 신뢰하고 확인 을 클릭합니다. 그렇지 않은 경우 취소 를 클릭한 다음 올바른 인증서 정보를 수동으로 입력합니다.
확인되면 CA 인증서가 API 끝점과의 후속 통신을 확인하는 데 사용됩니다.
공급자 생성 을 클릭하여 공급자를 추가하고 저장합니다.
공급자가 공급자 목록에 나타납니다.
4.4.2.2. OpenShift Virtualization 공급자의 마이그레이션 네트워크 선택
Red Hat OpenShift 웹 콘솔에서 OpenShift Virtualization 공급자에 대한 기본 마이그레이션 네트워크를 선택하여 성능을 향상시킬 수 있습니다. 기본 마이그레이션 네트워크는 디스크를 구성된 네임스페이스로 전송하는 데 사용됩니다.
마이그레이션 네트워크를 선택하지 않으면 기본 마이그레이션 네트워크는 Pod
네트워크이며 디스크 전송에는 적합하지 않을 수 있습니다.
마이그레이션 계획을 생성할 때 다른 네트워크를 선택하여 공급자의 기본 마이그레이션 네트워크를 덮어쓸 수 있습니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 공급자 를 클릭합니다.
-
공급자 오른쪽에 있는 옵션 메뉴
에서 마이그레이션 네트워크 선택을 선택합니다.
- 사용 가능한 네트워크 목록에서 네트워크를 선택하고 Select 를 클릭합니다.
4.5. 마이그레이션 계획 생성
Red Hat OpenShift 웹 콘솔을 사용하여 소스 공급자, 마이그레이션할 가상 머신(VM) 및 기타 계획 세부 정보를 지정하여 마이그레이션 계획을 생성할 수 있습니다.
편의를 위해 소스 공급자 또는 특정 VM에서 시작하여 마이그레이션 계획을 생성하는 두 가지 절차가 있습니다.
- 소스 공급자로 시작하려면 소스 공급자 부터 마이그레이션 계획 생성을 참조하십시오.
- 특정 VM으로 시작하려면 특정 VM으로 시작하는 마이그레이션 계획 생성 을 참조하십시오.
iSCSI(Internet Small Computer Systems Interface) 연결 또는 NFS(Network File System) 마운트와 같은 게스트 시작 스토리지 연결이 있는 가상 머신은 MTV에 의해 처리되지 않으며 마이그레이션 전이나 재구성이 필요할 수 있습니다.
이는 이 스토리지에 액세스하는 VM 추가 또는 새로 마이그레이션된 VM으로 인해 문제가 발생하지 않도록 하기 위한 것입니다.
4.5.1. 소스 공급자부터 마이그레이션 계획 생성
가상화 계획 페이지에서 시작하여 소스 공급자를 기반으로 마이그레이션 계획을 생성할 수 있습니다. VMware 또는 RHV 공급자에서 마이그레이션하는 데 필요한 특정 옵션을 확인합니다.
프로세스
Red Hat OpenShift 웹 콘솔에서 가상화 계획을 클릭한 다음 Create Plan 을 클릭합니다.
마이그레이션 계획 생성 마법사가 소스 공급자 선택 인터페이스로 열립니다.
마이그레이션할 VM의 소스 공급자를 선택합니다.
Select virtual machines 인터페이스가 열립니다.
마이그레이션할 VM을 선택하고 다음을 클릭합니다.
마이그레이션 계획 생성 창이 열립니다. 대상 공급자 및 네임스페이스, 네트워크 맵 및 스토리지 맵에 대한 소스 공급자의 이름과 제안 사항을 표시합니다.
- 계획 이름을 입력합니다.
- 편집 가능한 항목을 필요한 대로 변경합니다.
- 매핑 추가 를 클릭하여 제안된 네트워크 매핑 또는 스토리지 매핑을 편집하거나 하나 이상의 추가 매핑을 추가합니다.
마이그레이션 계획 생성을 클릭합니다.
MTV는 마이그레이션 계획 및 계획 세부 정보 페이지가 열리며 계획을 사용할 준비가 되었는지 또는 오류가 포함되어 있는지 여부를 나타냅니다. 계획 세부 정보가 나열되고 이전 페이지에서 입력한 항목을 편집할 수 있습니다. 변경 사항이 있는 경우 MTV는 계획을 다시 검증합니다.
VMware 소스 공급자만 해당(선택 사항):
VM의 고정 IP 유지: 기본적으로 마이그레이션 프로세스 중에 vNIC(가상 네트워크 인터페이스 컨트롤러)가 변경됩니다. 이로 인해 vSphere에서 고정 IP로 설정된 vNIC가 IP가 손실됩니다. VM의 고정 IP를 보존하여 방지하려면 고정 IP 사전 예약 옆에 있는 편집 아이콘을 클릭하고 열리는 창에서 고정 IP 스위치를 보존할지 여부를 설정합니다. 그런 다음 저장을 클릭합니다.
그런 다음 MTV는 vNIC 속성이 누락되는 Windows 운영 체제가 있는 모든 VM에 대한 경고 메시지를 발행합니다. 누락된 vNIC 속성을 검색하려면 vNIC 속성이 MTV에 보고되도록 vSphere에서 해당 VM을 실행합니다.
- Linux Unified Key Setup (LUKS)을 사용하여 암호화된 디스크에 대한 암호 해독 암호 목록을 입력합니다. LUKS 암호화 장치의 암호 해독 목록을 입력하고 설정 섹션에서 디스크 암호 해독 암호 옆에 있는 편집 아이콘을 클릭하고 암호를 입력한 다음 저장을 클릭합니다. 특정 순서로 암호를 입력할 필요가 없습니다. 각 LUKS 암호화 장치에 대해 MTV는 장치를 잠금 해제할 때까지 각 암호를 시도합니다.
루트 장치 지정: 다중 부팅 VM 마이그레이션에만 적용됩니다. 기본적으로 MTV는 루트 장치로 감지된 첫 번째 부팅 가능 장치를 사용합니다.
다른 루트 장치를 지정하려면 설정 섹션에서 루트 장치 옆에 있는 편집 아이콘을 클릭하고 일반적으로 사용되는 옵션 목록에서 장치를 선택하거나 텍스트 상자에 장치를 입력합니다.
MTV는 디스크 위치에 다음 형식을 사용합니다.
/dev/sd<disk_identifier><disk_partition
> . 예를 들어 두 번째 디스크가 루트 장치이고 운영 체제가 디스크의 두 번째 파티션에 있는 경우 형식은/dev/sdb2
입니다. 부팅 장치를 입력한 후 저장을 클릭합니다.제공된 부팅 장치가 올바르지 않기 때문에 변환이 실패하면 변환 Pod 로그를 확인하여 올바른 정보를 얻을 수 있습니다.
RHV 소스 공급자만(선택 사항):
RHV에서 마이그레이션되는 VM의 CPU 모델을 유지: 일반적으로 RHV VM의 CPU 모델(유형)은 클러스터 수준에서 설정되지만 사용자 지정 CPU 모델이라고 하는 VM 수준에서 설정할 수 있습니다. 기본적으로 MTV는 대상 클러스터에서 CPU 모델을 다음과 같이 설정합니다. MTV는 VM이 있는 VM의 사용자 지정 CPU 설정을 유지하지만 사용자 지정 CPU 설정이 없는 VM의 경우 MTV는 CPU 모델을 설정하지 않습니다. 대신 CPU 모델은 나중에 OpenShift Virtualization에 의해 설정됩니다.
RHV VM의 클러스터 수준 CPU 모델을 유지하려면 설정 섹션에서 Preserve CPU 모델 옆에 있는 편집 아이콘을 클릭합니다. CPU 모델 스위치를 보존할지 여부에 관계없이 W 를 전환한 다음 저장을 클릭합니다.
계획이 유효하면,
- 마이그레이션 시작을 클릭하여 지금 계획을 실행할 수 있습니다.
- 가상화 계획 페이지에서 선택하고 마이그레이션 계획 실행 절차에 따라 나중에 계획을 실행할 수 있습니다.
4.5.2. 특정 VM으로 시작하는 마이그레이션 계획 생성
가상화 용 공급자 페이지에서 시작하여 특정 VM을 기반으로 마이그레이션 계획을 생성할 수 있습니다. VMware 또는 RHV 공급자에서 마이그레이션하는 데 필요한 특정 옵션을 확인합니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 가상화를 위한 공급자 를 클릭합니다.
적절한 소스 공급자 행에서 VM 을 클릭합니다.
가상 머신 탭이 열립니다.
마이그레이션할 VM을 선택하고 Create migration plan 을 클릭합니다.
마이그레이션 계획 생성 창이 열립니다. 대상 공급자 및 네임스페이스, 네트워크 맵 및 스토리지 맵에 대한 소스 공급자의 이름과 제안 사항을 표시합니다.
- 계획 이름을 입력합니다.
- 편집 가능한 항목을 필요한 대로 변경합니다.
- 매핑 추가 를 클릭하여 제안된 네트워크 매핑 또는 스토리지 매핑을 편집하거나 하나 이상의 추가 매핑을 추가합니다.
마이그레이션 계획 생성을 클릭합니다.
MTV는 마이그레이션 계획 및 계획 세부 정보 페이지가 열리며 계획을 사용할 준비가 되었는지 또는 오류가 포함되어 있는지 여부를 나타냅니다. 계획 세부 정보가 나열되고 이전 페이지에서 입력한 항목을 편집할 수 있습니다. 변경 사항이 있는 경우 MTV는 계획을 다시 검증합니다.
VMware 소스 공급자만 해당(선택 사항):
VM의 고정 IP 유지: 기본적으로 마이그레이션 프로세스 중에 vNIC(가상 네트워크 인터페이스 컨트롤러)가 변경됩니다. 이로 인해 vSphere에서 고정 IP로 설정된 vNIC가 IP가 손실됩니다. VM의 고정 IP를 보존하여 방지하려면 고정 IP 사전 예약 옆에 있는 편집 아이콘을 클릭하고 열리는 창에서 고정 IP 스위치를 보존할지 여부를 설정합니다. 그런 다음 저장을 클릭합니다.
그런 다음 MTV는 vNIC 속성이 누락되는 Windows 운영 체제가 있는 모든 VM에 대한 경고 메시지를 발행합니다. 누락된 vNIC 속성을 검색하려면 vNIC 속성이 MTV에 보고되도록 vSphere에서 해당 VM을 실행합니다.
- Linux Unified Key Setup (LUKS)을 사용하여 암호화된 디스크에 대한 암호 해독 암호 목록을 입력합니다. LUKS 암호화 장치의 암호 해독 목록을 입력하고 설정 섹션에서 디스크 암호 해독 암호 옆에 있는 편집 아이콘을 클릭하고 암호를 입력한 다음 저장을 클릭합니다. 특정 순서로 암호를 입력할 필요가 없습니다. 각 LUKS 암호화 장치에 대해 MTV는 장치를 잠금 해제할 때까지 각 암호를 시도합니다.
루트 장치 지정: 다중 부팅 VM 마이그레이션에만 적용됩니다. 기본적으로 MTV는 루트 장치로 감지된 첫 번째 부팅 가능 장치를 사용합니다.
다른 루트 장치를 지정하려면 설정 섹션에서 루트 장치 옆에 있는 편집 아이콘을 클릭하고 일반적으로 사용되는 옵션 목록에서 장치를 선택하거나 텍스트 상자에 장치를 입력합니다.
MTV는 디스크 위치에 다음 형식을 사용합니다.
/dev/sd<disk_identifier><disk_partition
> . 예를 들어 두 번째 디스크가 루트 장치이고 운영 체제가 디스크의 두 번째 파티션에 있는 경우 형식은/dev/sdb2
입니다. 부팅 장치를 입력한 후 저장을 클릭합니다.제공된 부팅 장치가 올바르지 않기 때문에 변환이 실패하면 변환 Pod 로그를 확인하여 올바른 정보를 얻을 수 있습니다.
RHV 소스 공급자만(선택 사항):
RHV에서 마이그레이션되는 VM의 CPU 모델을 유지: 일반적으로 RHV VM의 CPU 모델(유형)은 클러스터 수준에서 설정되지만 사용자 지정 CPU 모델이라고 하는 VM 수준에서 설정할 수 있습니다. 기본적으로 MTV는 대상 클러스터에서 CPU 모델을 다음과 같이 설정합니다. MTV는 VM이 있는 VM의 사용자 지정 CPU 설정을 유지하지만 사용자 지정 CPU 설정이 없는 VM의 경우 MTV는 CPU 모델을 설정하지 않습니다. 대신 CPU 모델은 나중에 OpenShift Virtualization에 의해 설정됩니다.
RHV VM의 클러스터 수준 CPU 모델을 유지하려면 설정 섹션에서 Preserve CPU 모델 옆에 있는 편집 아이콘을 클릭합니다. CPU 모델 스위치를 보존할지 여부에 관계없이 W 를 전환한 다음 저장을 클릭합니다.
계획이 유효하면,
- 마이그레이션 시작을 클릭하여 지금 계획을 실행할 수 있습니다.
- 가상화 계획 페이지에서 선택하고 마이그레이션 계획 실행 절차에 따라 나중에 계획을 실행할 수 있습니다.
4.6. 마이그레이션 계획 실행
마이그레이션 계획을 실행하고 Red Hat OpenShift 웹 콘솔에서 진행 상황을 볼 수 있습니다.
사전 요구 사항
- 유효한 마이그레이션 계획.
프로세스
Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 계획을 클릭합니다.
계획 목록에는 소스 및 대상 공급자, 마이그레이션 중인 VM(가상 머신) 수, 상태 및 각 계획에 대한 설명이 표시됩니다.
- 마이그레이션 계획 옆에 있는 시작을 클릭하여 마이그레이션을 시작합니다.
열리는 확인 창에서 시작을 클릭합니다.
VM 화면별 마이그레이션 세부 정보가 열리고 마이그레이션 진행 상황을 표시합니다.
웜 마이그레이션만 해당:
- 사전 복사 단계가 시작됩니다.
- 컷오버 를 클릭하여 마이그레이션을 완료합니다.
마이그레이션이 실패하는 경우:
- 로그 가져오기를 클릭하여 마이그레이션 로그를 검색합니다.
- 열리는 확인 창에서 로그 가져오기를 클릭합니다.
- 로그 가져오기가 로그 다운로드 로 변경될 때까지 기다린 다음 버튼을 클릭하여 로그를 다운로드합니다.
마이그레이션 실패 여부에 관계없이 마이그레이션의 상태를 클릭하여 마이그레이션 세부 정보를 확인합니다.
VM 화면별 마이그레이션 세부 정보가 열리고 마이그레이션 시작 및 종료 시간, 복사된 데이터 양, 마이그레이션 중인 각 VM의 진행률 파이프라인이 표시됩니다.
- 개별 VM을 확장하여 해당 단계 및 각 단계의 경과된 시간 및 상태를 확인합니다.
4.7. 마이그레이션 계획 옵션
Red Hat OpenShift 웹 콘솔의 가상화 계획 페이지에서 마이그레이션 계획 옆에 있는 옵션 메뉴
를 클릭하여 다음 옵션에 액세스할 수 있습니다.
- get logs: 마이그레이션 로그를 검색합니다. 로그 가져오기를 클릭하면 확인 창이 열립니다. 창에서 로그 가져오기 를 클릭한 후 로그 가져오기가 로그 다운로드 로 변경될 때까지 기다린 다음 버튼을 클릭하여 로그를 다운로드합니다.
- Edit: 마이그레이션 계획의 세부 정보를 편집합니다. 실행 중이거나 성공적으로 완료된 후에는 마이그레이션 계획을 편집할 수 없습니다.
duplicate: 기존 계획과 동일한 VM(가상 머신), 매개변수, 매핑 및 후크를 사용하여 새 마이그레이션 계획을 생성합니다. 이 기능을 다음 작업에 사용할 수 있습니다.
- VM을 다른 네임스페이스로 마이그레이션합니다.
- 아카이브된 마이그레이션 계획을 편집합니다.
- 다른 상태로 마이그레이션 계획을 편집합니다(예: 실패, 취소, 실행 중, 중요 또는 준비됨).
archive: 마이그레이션 계획의 로그, 기록 및 메타데이터를 삭제합니다. 계획을 편집하거나 다시 시작할 수 없습니다. 이는 단지 볼 수 있습니다.
참고Archive 옵션은 되돌릴 수 없습니다. 그러나 보관된 계획을 복제할 수 있습니다.
Delete: 마이그레이션 계획을 영구적으로 제거합니다. 실행 중인 마이그레이션 계획을 삭제할 수 없습니다.
참고삭제 옵션은 되돌릴 수 없습니다.
마이그레이션 계획을 삭제해도
가져오기
Pod,변환
Pod, 구성 맵, 시크릿, 실패한 VM 및 데이터 볼륨과 같은 임시 리소스가 제거되지 않습니다. (BZ#2018974) 임시 리소스를 정리하려면 마이그레이션 계획을 삭제하기 전에 보관해야 합니다.- View details: 마이그레이션 계획의 세부 정보를 표시합니다.
- restart: 실패한 마이그레이션 또는 취소된 마이그레이션 계획을 다시 시작합니다.
- 예약된 컷오버 취소: 웜 마이그레이션 계획에 대해 예약된 컷오버 마이그레이션을 취소합니다.
4.8. 마이그레이션 취소
Red Hat OpenShift 웹 콘솔을 사용하여 마이그레이션 계획이 진행되는 동안 일부 또는 모든 VM(가상 머신)의 마이그레이션을 취소할 수 있습니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 가상화 계획을 클릭합니다.
- 실행 중인 마이그레이션 계획의 이름을 클릭하여 마이그레이션 세부 정보를 확인합니다.
- 하나 이상의 VM을 선택하고 취소 를 클릭합니다.
예, 취소 를 클릭하여 취소를 확인합니다.
VM별 마이그레이션 세부 정보 목록에서 취소된 VM의 상태가 취소됩니다. 마이그레이션되지 않은 가상 머신 및 마이그레이션된 가상 머신은 영향을 받지 않습니다.
마이그레이션 계획 페이지의 마이그레이션 계획 옆에 있는 재시작 을 클릭하여 취소된 마이그레이션 을 다시 시작할 수 있습니다.
5장. 명령줄에서 가상 머신 마이그레이션
명령줄에서 가상 머신을 OpenShift Virtualization으로 마이그레이션할 수 있습니다.
모든 사전 요구 사항이 충족되었는지 확인해야 합니다.
5.1. 관리자가 아닌 사용자에게 마이그레이션 계획 구성 요소 작업에 필요한 권한
관리자인 경우 마이그레이션 계획의 모든 구성 요소(예: 공급자, 네트워크 매핑 및 마이그레이션 계획)와 함께 작업할 수 있습니다.
기본적으로 관리자가 아닌 사용자는 마이그레이션 계획 및 해당 구성 요소에서 작업할 수 있는 기능이 제한됩니다. 관리자는 역할을 수정하여 모든 구성 요소에 대한 전체 액세스 권한을 허용하거나 제한된 권한을 부여할 수 있습니다.
예를 들어 관리자는 마이그레이션 계획에 다음 클러스터 역할 중 하나 이상을 관리자가 아닌 사용자를 할당할 수 있습니다.
Role | 설명 |
---|---|
| 마이그레이션 계획을 볼 수 있지만 생성, 삭제 또는 수정할 수는 없습니다. |
|
개별 마이그레이션 계획을 생성, 삭제 또는 수정( |
|
모든 |
사전 정의된 클러스터 역할에는 리소스(예: 계획
), API 그룹(예: forklift.konveyor.io-v1beta1
) 및 작업(예: 보기
,편집
)이 포함됩니다.
보다 포괄적인 예로 네임스페이스당 다음 권한 세트를 비관리자에게 부여할 수 있습니다.
- 액세스할 수 있는 네임스페이스에 대한 스토리지 맵, 네트워크 맵 및 마이그레이션 계획을 생성하고 수정합니다.
- 관리자가 생성한 공급자를 스토리지 맵, 네트워크 맵 및 마이그레이션 계획에 연결
- 공급자를 생성하거나 시스템 설정을 변경할 수 없음
작업 | API 그룹 | 리소스 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 빈 문자열 |
|
관리자가 아닌 사용자는 네트워크 맵 또는 스토리지 맵에 템플릿을 사용하는 경우에도 마이그레이션 계획을 생성하기 위해 네트워크 맵 및 스토리지 맵에 대한 편집
역할의 일부인 생성 권한이 있어야 합니다.
5.2. VMware vSphere moRef 검색
CLI에서 MCP(Migration Toolkit for Virtualization)를 사용하여 VMware vSphere 소스 공급자가 있는 VM을 마이그레이션하는 경우 vSphere에서 데이터 저장소, 네트워크 및 VM과 같은 특정 엔티티의 관리형 오브젝트 참조(moRef)를 알아야 합니다.
인벤토리 서비스에서 하나 이상의 vSphere 엔티티의 moRef를 검색할 수 있습니다. 그런 다음 각 moRef를 다른 엔티티의 moRef를 검색하기 위한 참조로 사용할 수 있습니다.
프로세스
프로젝트의 경로를 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route -n openshift-mtv
oc get route -n openshift-mtv
인벤토리
서비스 경로를 검색합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route <inventory_service> -n openshift-mtv
$ oc get route <inventory_service> -n openshift-mtv
액세스 토큰을 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
VMware vSphere 공급자의 moRef를 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k
VMware vSphere 소스 공급자의 데이터 저장소를 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [ { "id": "datastore-11", "parent": { "kind": "Folder", "id": "group-s5" }, "path": "/Datacenter/datastore/v2v_general_porpuse_ISCSI_DC", "revision": 46, "name": "v2v_general_porpuse_ISCSI_DC", "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-11" }, { "id": "datastore-730", "parent": { "kind": "Folder", "id": "group-s5" }, "path": "/Datacenter/datastore/f01-h27-640-SSD_2", "revision": 46, "name": "f01-h27-640-SSD_2", "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-730" }, ...
[ { "id": "datastore-11", "parent": { "kind": "Folder", "id": "group-s5" }, "path": "/Datacenter/datastore/v2v_general_porpuse_ISCSI_DC", "revision": 46, "name": "v2v_general_porpuse_ISCSI_DC", "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-11" }, { "id": "datastore-730", "parent": { "kind": "Folder", "id": "group-s5" }, "path": "/Datacenter/datastore/f01-h27-640-SSD_2", "revision": 46, "name": "f01-h27-640-SSD_2", "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-730" }, ...
이 예에서 데이터 저장소 v2v_general_porpuse_ISCSI_DC
의 moRef는 datastore-11
이고 데이터 저장소 f01-h27-640-SSD_2
의 moRef는 datastore-730
입니다.
5.3. 가상 머신 마이그레이션
MTV CR(사용자 정의 리소스)을 생성하여 CLI(명령줄)에서 VM(가상 머신)을 마이그레이션합니다. CR 및 마이그레이션 절차는 소스 공급자에 따라 다릅니다.
클러스터 범위 CR의 이름을 지정해야 합니다.
네임스페이스 범위 CR의 이름과 네임스페이스를 모두 지정해야 합니다.
마이그레이션 계획이 정의된 것과 다른 OpenShift 클러스터로 마이그레이션하려면 cluster-admin
권한이 있는 OpenShift Virtualization 서비스 계정 토큰이 있어야 합니다.
5.3.1. VMware vSphere 소스 공급자에서 마이그레이션
CLI를 사용하여 VMware vSphere 소스 공급자에서 마이그레이션할 수 있습니다.
프로세스
소스 공급자 인증 정보에 대한
시크릿
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: vsphere createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences:
1 - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: vsphere createdForResourceType: providers type: Opaque stringData: user: <user>
2 password: <password>
3 insecureSkipVerify: <"true"/"false">
4 cacert: |
5 <ca_certificate> url: <api_end_point>
6 EOF
- 1
ownerReferences
섹션은 선택 사항입니다.- 2
- vCenter 사용자 또는 ESX/ESXi 사용자를 지정합니다.
- 3
- vCenter 사용자의 암호 또는 ESX/ESXi 사용자를 지정합니다.
- 4
- 인증서 확인을 건너뛰려면
"true"
를 지정하고"false"
를 지정하여 인증서를 확인합니다. 지정하지 않는 경우 기본값은"false"
입니다. 인증서 확인을 건너뛰면 비보안 마이그레이션이 진행되므로 인증서가 필요하지 않습니다. 비보안 마이그레이션은 전송된 데이터가 안전하지 않은 연결을 통해 전송되고 잠재적으로 민감한 데이터가 노출될 수 있음을 의미합니다. - 5
- 이 필드를 설정하지 않고 인증서 확인을 건너뛰면 MTV가 시스템 CA 사용을 시도합니다.
- 6
- vCenter 또는 ESX/ESXi의 API 끝점 URL을 지정합니다(예:
https://<vCenter_host>/sdk
).
소스 공급자에 대한
공급자
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: vsphere url: <api_end_point> settings: vddkInitImage: <VDDK_image> sdkEndpoint: vcenter secret: name: <secret> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: vsphere url: <api_end_point>
1 settings: vddkInitImage: <VDDK_image>
2 sdkEndpoint: vcenter
3 secret: name: <secret>
4 namespace: <namespace> EOF
호스트
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Host metadata: name: <vmware_host> namespace: <namespace> spec: provider: namespace: <namespace> name: <source_provider> id: <source_host_mor> ipAddress: <source_network_ip> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Host metadata: name: <vmware_host> namespace: <namespace> spec: provider: namespace: <namespace> name: <source_provider>
1 id: <source_host_mor>
2 ipAddress: <source_network_ip>
3 EOF
- 1
- VMware vSphere
Provider
CR의 이름을 지정합니다. - 2
- VMware vSphere 호스트의 Managed Object Reference (moRef)를 지정합니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
- 3
- VMware vSphere 마이그레이션 네트워크의 IP 주소를 지정합니다.
NetworkMap
매니페스트를 생성하여 소스 및 대상 네트워크를 매핑합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod
1 source:
2 id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition>
3 namespace: <network_attachment_definition_namespace>
4 type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
- 1
- 허용되는 값은
pod
및multus
입니다. - 2
id
또는name
매개변수를 사용하여 소스 네트워크를 지정할 수 있습니다.id
는 VMware vSphere 네트워크 Managed Object Reference (moRef)를 지정합니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.- 3
- 각 추가 OpenShift Virtualization 네트워크에 대한 네트워크 연결 정의를 지정합니다.
- 4
type
이multus
인 경우에만 필요합니다. OpenShift Virtualization 네트워크 연결 정의의 네임스페이스를 지정합니다.
소스 및 대상 스토리지를 매핑하는
StorageMap
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode> source: id: <source_datastore> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode>
1 source: id: <source_datastore>
2 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
- 1
- 허용되는 값은
ReadWriteOnce
및ReadWriteMany
입니다. - 2
- VMware vSphere 데이터 저장소 moRef를 지정합니다. 예를 들면
f2737930-b567-451a-9ceb-2887f6207009
입니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
선택 사항:
Plan
CR에 지정된 단계에서 VM에서 사용자 정의 코드를 실행하려면후크
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
다음과 같습니다.
Playbook은 선택적 Base64로 인코딩된 Ansible 플레이북을 나타냅니다.
플레이북을 지정하는 경우
이미지는
hook-runner
여야 합니다.참고기본
hook-runner
이미지를 사용하거나 사용자 정의 이미지를 지정할 수 있습니다. 사용자 지정 이미지를 지정하는 경우 플레이북을 지정할 필요가 없습니다.
마이그레이션을 위한
계획
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: warm: false provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm> - name: <source_vm> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan>
1 namespace: <namespace> spec: warm: false
2 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map:
3 network:
4 name: <network_map>
5 namespace: <namespace> storage:
6 name: <storage_map>
7 namespace: <namespace> targetNamespace: <target_namespace> vms:
8 - id: <source_vm>
9 - name: <source_vm> hooks:
10 - hook: namespace: <namespace> name: <hook>
11 step: <step>
12 EOF
- 1
Plan
CR의 이름을 지정합니다.- 2
- 마이그레이션이 웜인지 -
true
- 또는 cold -false
인지 여부를 지정합니다. 마이그레이션 매니페스트에서cutover
매개변수 값을 지정하지 않고 웜마이그레이션
을 지정하면 사전 복사 단계만 실행됩니다. - 3
- 계획당 하나의 네트워크 맵과 하나의 스토리지 맵만 지정합니다.
- 4
- 마이그레이션할 VM이 네트워크에 할당되지 않은 경우에도 네트워크 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 5
NetworkMap
CR의 이름을 지정합니다.- 6
- 마이그레이션할 VM이 디스크 이미지로 할당되지 않은 경우에도 스토리지 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 7
StorageMap
CR의 이름을 지정합니다.- 8
id
또는name
매개변수를 사용하여 소스 VM을 지정할 수 있습니다.
- 9
- VMware vSphere VM moRef를 지정합니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
- 10
- 선택 사항: VM에 대해 최대 두 개의 후크를 지정할 수 있습니다. 각 후크는 별도의 마이그레이션 단계에서 실행되어야 합니다.
- 11
Hook
CR의 이름을 지정합니다.- 12
- 허용되는 값은 마이그레이션 계획이 시작되기 전에
PreHook
이거나마이그레이션이 완료된 후 postHook
입니다.
Plan
CR을 실행할마이그레이션
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
참고컷오버 시간을 지정하는 경우 UTC 시간 오프셋과 함께 ISO 8601 형식을 사용합니다(예:
2024-04-04T01:23:45.678+09:00
).
5.3.2. Red Hat Virtualization 소스 공급자에서 마이그레이션
CLI를 사용하여 RHV(Red Hat Virtualization) 소스 공급자에서 마이그레이션할 수 있습니다.
사전 요구 사항
직접 LUN 디스크를 사용하여 가상 머신을 마이그레이션하는 경우 VM을 실행할 것으로 예상되는 OpenShift Virtualization 대상 클러스터의 노드가 백엔드 스토리지에 액세스할 수 있는지 확인합니다.
- 소스 공급자에서 대상 공급자로 복사 되는 디스크 이미지와 달리 LUN은 소스 공급자의 가상 머신에서분리되지만 제거되지 않은 다음 대상 공급자에 생성된 가상 머신(VM)에 연결됩니다.
- 소스 공급자에 대한 대체가 필요한 경우 마이그레이션 중에 원본 공급자에서 LUN을 제거하지 않습니다. 그러나 소스 공급자의 VM에 LUN을 다시 연결하기 전에 대상 환경의 VM에서 LUN을 사용하지 않도록 하여 데이터 손상이 발생할 수 있습니다.
프로세스
소스 공급자 인증 정보에 대한
시크릿
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: ovirt createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences:
1 - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: ovirt createdForResourceType: providers type: Opaque stringData: user: <user>
2 password: <password>
3 insecureSkipVerify: <"true"/"false">
4 cacert: |
5 <ca_certificate> url: <api_end_point>
6 EOF
- 1
ownerReferences
섹션은 선택 사항입니다.- 2
- RHV Manager 사용자를 지정합니다.
- 3
- 사용자 암호를 지정합니다.
- 4
- 인증서 확인을 건너뛰려면
"true"
를 지정하고"false"
를 지정하여 인증서를 확인합니다. 지정하지 않는 경우 기본값은"false"
입니다. 인증서 확인을 건너뛰면 비보안 마이그레이션이 진행되므로 인증서가 필요하지 않습니다. 비보안 마이그레이션은 전송된 데이터가 안전하지 않은 연결을 통해 전송되고 잠재적으로 민감한 데이터가 노출될 수 있음을 의미합니다. - 5
- 타사 인증서로 대체되지 않은 경우 Manager CA 인증서를 입력합니다. 이 경우 Manager Apache CA 인증서를 입력합니다. https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA에서 Manager CA 인증서를 검색할 수 있습니다.
- 6
- API 끝점 URL을 지정합니다(예:
https://<engine_host>/ovirt-engine/api
).
소스 공급자에 대한
공급자
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: ovirt url: <api_end_point> secret: name: <secret> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: ovirt url: <api_end_point>
1 secret: name: <secret>
2 namespace: <namespace> EOF
NetworkMap
매니페스트를 생성하여 소스 및 대상 네트워크를 매핑합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod
1 source:
2 id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition>
3 namespace: <network_attachment_definition_namespace>
4 type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
소스 및 대상 스토리지를 매핑하는
StorageMap
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode> source: id: <source_storage_domain> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode>
1 source: id: <source_storage_domain>
2 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
선택 사항:
Plan
CR에 지정된 단계에서 VM에서 사용자 정의 코드를 실행하려면후크
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
다음과 같습니다.
Playbook은 선택적 Base64로 인코딩된 Ansible 플레이북을 나타냅니다.
플레이북을 지정하는 경우
이미지는
hook-runner
여야 합니다.참고기본
hook-runner
이미지를 사용하거나 사용자 정의 이미지를 지정할 수 있습니다. 사용자 지정 이미지를 지정하는 경우 플레이북을 지정할 필요가 없습니다.
마이그레이션을 위한
계획
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> preserveClusterCpuModel: true spec: warm: false provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm> - name: <source_vm> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan>
1 namespace: <namespace> preserveClusterCpuModel: true
2 spec: warm: false
3 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map:
4 network:
5 name: <network_map>
6 namespace: <namespace> storage:
7 name: <storage_map>
8 namespace: <namespace> targetNamespace: <target_namespace> vms:
9 - id: <source_vm>
10 - name: <source_vm> hooks:
11 - hook: namespace: <namespace> name: <hook>
12 step: <step>
13 EOF
- 1
Plan
CR의 이름을 지정합니다.- 2
- 아래 참고를 참조하십시오.
- 3
- 마이그레이션이 워밍인지 또는 콜드인지를 지정합니다. 마이그레이션 매니페스트에서
cutover
매개변수 값을 지정하지 않고 웜마이그레이션
을 지정하면 사전 복사 단계만 실행됩니다. - 4
- 계획당 하나의 네트워크 맵과 하나의 스토리지 맵만 지정합니다.
- 5
- 마이그레이션할 VM이 네트워크에 할당되지 않은 경우에도 네트워크 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 6
NetworkMap
CR의 이름을 지정합니다.- 7
- 마이그레이션할 VM이 디스크 이미지로 할당되지 않은 경우에도 스토리지 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 8
StorageMap
CR의 이름을 지정합니다.- 9
id
또는name
매개변수를 사용하여 소스 VM을 지정할 수 있습니다.- 10
- RHV VM UUID를 지정합니다.
- 11
- 선택 사항: VM에 대해 최대 두 개의 후크를 지정할 수 있습니다. 각 후크는 별도의 마이그레이션 단계에서 실행되어야 합니다.
- 12
Hook
CR의 이름을 지정합니다.- 13
- 허용되는 값은 마이그레이션 계획이 시작되기 전에
PreHook
이거나마이그레이션이 완료된 후 postHook
입니다.
참고-
마이그레이션된 시스템이 사용자 지정 CPU 모델로 설정된 경우
preserveClusterCpuModel
의 설정에 관계없이 대상 클러스터의 해당 CPU 모델로 설정됩니다. 마이그레이션된 시스템이 사용자 지정 CPU 모델로 설정되지 않은 경우:
-
preserveClusterCpuModel
이 'true'로 설정된 경우 MTV는 클러스터 구성에 따라 RHV에서 실행될 때 VM의 CPU 모델을 확인한 다음 마이그레이션된 VM을 해당 CPU 모델로 설정합니다. -
preserveClusterCpuModel
이 'false'로 설정된 경우 MTV는 CPU 유형을 설정하지 않으며 VM은 대상 클러스터의 기본 CPU 모델로 설정됩니다.
-
Plan
CR을 실행할마이그레이션
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
참고컷오버 시간을 지정하는 경우 UTC 시간 오프셋과 함께 ISO 8601 형식을 사용합니다(예:
2024-04-04T01:23:45.678+09:00
).
5.3.3. OpenStack 소스 공급자에서 마이그레이션
CLI를 사용하여 OpenStack 소스 공급자에서 마이그레이션할 수 있습니다.
프로세스
소스 공급자 인증 정보에 대한
시크릿
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: openstack createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> domainName: <domain_name> projectName: <project_name> regionName: <region_name> cacert: | <ca_certificate> url: <api_end_point> EOF
$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences:
1 - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: openstack createdForResourceType: providers type: Opaque stringData: user: <user>
2 password: <password>
3 insecureSkipVerify: <"true"/"false">
4 domainName: <domain_name> projectName: <project_name> regionName: <region_name> cacert: |
5 <ca_certificate> url: <api_end_point>
6 EOF
- 1
ownerReferences
섹션은 선택 사항입니다.- 2
- OpenStack 사용자를 지정합니다.
- 3
- 사용자 OpenStack 암호를 지정합니다.
- 4
- 인증서 확인을 건너뛰려면
"true"
를 지정하고"false"
를 지정하여 인증서를 확인합니다. 지정하지 않는 경우 기본값은"false"
입니다. 인증서 확인을 건너뛰면 비보안 마이그레이션이 진행되므로 인증서가 필요하지 않습니다. 비보안 마이그레이션은 전송된 데이터가 안전하지 않은 연결을 통해 전송되고 잠재적으로 민감한 데이터가 노출될 수 있음을 의미합니다. - 5
- 이 필드를 설정하지 않고 인증서 확인을 건너뛰면 MTV가 시스템 CA 사용을 시도합니다.
- 6
- API 끝점 URL을 지정합니다(예:
https://<identity_service>/v3
).
소스 공급자에 대한
공급자
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: openstack url: <api_end_point> secret: name: <secret> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: openstack url: <api_end_point>
1 secret: name: <secret>
2 namespace: <namespace> EOF
NetworkMap
매니페스트를 생성하여 소스 및 대상 네트워크를 매핑합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod
1 source:
2 id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition>
3 namespace: <network_attachment_definition_namespace>
4 type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
소스 및 대상 스토리지를 매핑하는
StorageMap
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode> source: id: <source_volume_type> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode>
1 source: id: <source_volume_type>
2 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
선택 사항:
Plan
CR에 지정된 단계에서 VM에서 사용자 정의 코드를 실행하려면후크
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
다음과 같습니다.
Playbook은 선택적 Base64로 인코딩된 Ansible 플레이북을 나타냅니다.
플레이북을 지정하는 경우
이미지는
hook-runner
여야 합니다.참고기본
hook-runner
이미지를 사용하거나 사용자 정의 이미지를 지정할 수 있습니다. 사용자 지정 이미지를 지정하는 경우 플레이북을 지정할 필요가 없습니다.
마이그레이션을 위한
계획
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm> - name: <source_vm> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan>
1 namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map:
2 network:
3 name: <network_map>
4 namespace: <namespace> storage:
5 name: <storage_map>
6 namespace: <namespace> targetNamespace: <target_namespace> vms:
7 - id: <source_vm>
8 - name: <source_vm> hooks:
9 - hook: namespace: <namespace> name: <hook>
10 step: <step>
11 EOF
- 1
Plan
CR의 이름을 지정합니다.- 2
- 계획당 하나의 네트워크 맵과 하나의 스토리지 맵만 지정합니다.
- 3
- 마이그레이션할 VM이 네트워크에 할당되지 않은 경우에도 네트워크 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 4
NetworkMap
CR의 이름을 지정합니다.- 5
- 마이그레이션할 VM이 디스크 이미지로 할당되지 않은 경우에도 스토리지 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 6
StorageMap
CR의 이름을 지정합니다.- 7
id
또는name
매개변수를 사용하여 소스 VM을 지정할 수 있습니다.- 8
- OpenStack VM UUID를 지정합니다.
- 9
- 선택 사항: VM에 대해 최대 두 개의 후크를 지정할 수 있습니다. 각 후크는 별도의 마이그레이션 단계에서 실행되어야 합니다.
- 10
Hook
CR의 이름을 지정합니다.- 11
- 허용되는 값은 마이그레이션 계획이 시작되기 전에
PreHook
이거나마이그레이션이 완료된 후 postHook
입니다.
Plan
CR을 실행할마이그레이션
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
참고컷오버 시간을 지정하는 경우 UTC 시간 오프셋과 함께 ISO 8601 형식을 사용합니다(예:
2024-04-04T01:23:45.678+09:00
).
5.3.4. OVA(Open Virtual Appliance) 소스 공급자에서 마이그레이션
CLI를 사용하여 VMware vSphere에서 소스 공급자로 생성한 OVA(Open Virtual Appliance) 파일에서 마이그레이션할 수 있습니다.
프로세스
소스 공급자 인증 정보에 대한
시크릿
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: ova createdForResourceType: providers type: Opaque stringData: url: <nfs_server:/nfs_path> EOF
$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences:
1 - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: ova createdForResourceType: providers type: Opaque stringData: url: <nfs_server:/nfs_path>
2 EOF
소스 공급자에 대한
공급자
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: ova url: <nfs_server:/nfs_path> secret: name: <secret> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: ova url: <nfs_server:/nfs_path>
1 secret: name: <secret>
2 namespace: <namespace> EOF
NetworkMap
매니페스트를 생성하여 소스 및 대상 네트워크를 매핑합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod source: id: <source_network_id> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus source: id: <source_network_id> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod
1 source: id: <source_network_id>
2 - destination: name: <network_attachment_definition>
3 namespace: <network_attachment_definition_namespace>
4 type: multus source: id: <source_network_id> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
소스 및 대상 스토리지를 매핑하는
StorageMap
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode> source: name: Dummy storage for source provider <provider_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode>
1 source: name: Dummy storage for source provider <provider_name>
2 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
선택 사항:
Plan
CR에 지정된 단계에서 VM에서 사용자 정의 코드를 실행하려면후크
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
다음과 같습니다.
Playbook은 선택적 Base64로 인코딩된 Ansible 플레이북을 나타냅니다.
플레이북을 지정하는 경우
이미지는
hook-runner
여야 합니다.참고기본
hook-runner
이미지를 사용하거나 사용자 정의 이미지를 지정할 수 있습니다. 사용자 지정 이미지를 지정하는 경우 플레이북을 지정할 필요가 없습니다.
마이그레이션을 위한
계획
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm> - name: <source_vm> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan>
1 namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map:
2 network:
3 name: <network_map>
4 namespace: <namespace> storage:
5 name: <storage_map>
6 namespace: <namespace> targetNamespace: <target_namespace> vms:
7 - id: <source_vm>
8 - name: <source_vm> hooks:
9 - hook: namespace: <namespace> name: <hook>
10 step: <step>
11 EOF
- 1
Plan
CR의 이름을 지정합니다.- 2
- 계획당 하나의 네트워크 맵과 하나의 스토리지 맵만 지정합니다.
- 3
- 마이그레이션할 VM이 네트워크에 할당되지 않은 경우에도 네트워크 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 4
NetworkMap
CR의 이름을 지정합니다.- 5
- 마이그레이션할 VM이 디스크 이미지로 할당되지 않은 경우에도 스토리지 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 6
StorageMap
CR의 이름을 지정합니다.- 7
id
또는name
매개변수를 사용하여 소스 VM을 지정할 수 있습니다.- 8
- OVA VM UUID를 지정합니다.
- 9
- 선택 사항: VM에 대해 최대 두 개의 후크를 지정할 수 있습니다. 각 후크는 별도의 마이그레이션 단계에서 실행되어야 합니다.
- 10
Hook
CR의 이름을 지정합니다.- 11
- 허용되는 값은 마이그레이션 계획이 시작되기 전에
PreHook
이거나마이그레이션이 완료된 후 postHook
입니다.
Plan
CR을 실행할마이그레이션
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
참고컷오버 시간을 지정하는 경우 UTC 시간 오프셋과 함께 ISO 8601 형식을 사용합니다(예:
2024-04-04T01:23:45.678+09:00
).
5.3.5. Red Hat OpenShift Virtualization 소스 공급자에서 마이그레이션
Red Hat OpenShift Virtualization 공급자를 소스 공급자 또는 대상 공급자로 사용할 수 있습니다.
프로세스
소스 공급자 인증 정보에 대한
시크릿
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: openshift createdForResourceType: providers type: Opaque stringData: token: <token> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences:
1 - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: openshift createdForResourceType: providers type: Opaque stringData: token: <token>
2 password: <password>
3 insecureSkipVerify: <"true"/"false">
4 cacert: |
5 <ca_certificate> url: <api_end_point>
6 EOF
- 1
ownerReferences
섹션은 선택 사항입니다.- 2
cluster-admin
권한이 있는 서비스 계정의 토큰을 지정합니다. 토큰과URL
이 모두 비어 있으면 로컬 OpenShift 클러스터가 사용됩니다.- 3
- 사용자 암호를 지정합니다.
- 4
- 인증서 확인을 건너뛰려면
"true"
를 지정하고"false"
를 지정하여 인증서를 확인합니다. 지정하지 않는 경우 기본값은"false"
입니다. 인증서 확인을 건너뛰면 비보안 마이그레이션이 진행되므로 인증서가 필요하지 않습니다. 비보안 마이그레이션은 전송된 데이터가 안전하지 않은 연결을 통해 전송되고 잠재적으로 민감한 데이터가 노출될 수 있음을 의미합니다. - 5
- 이 필드를 설정하지 않고 인증서 확인을 건너뛰면 MTV가 시스템 CA 사용을 시도합니다.
- 6
- API 서버의 끝점 URL을 지정합니다.
소스 공급자에 대한
공급자
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: openshift url: <api_end_point> secret: name: <secret> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: openshift url: <api_end_point>
1 secret: name: <secret>
2 namespace: <namespace> EOF
NetworkMap
매니페스트를 생성하여 소스 및 대상 네트워크를 매핑합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod source: name: <network_name> type: pod - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus source: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: <namespace> spec: map: - destination: name: <network_name> type: pod
1 source: name: <network_name> type: pod - destination: name: <network_attachment_definition>
2 namespace: <network_attachment_definition_namespace>
3 type: multus source: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
소스 및 대상 스토리지를 매핑하는
StorageMap
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode> source: name: <storage_class> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: <namespace> spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode>
1 source: name: <storage_class> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
- 1
- 허용되는 값은
ReadWriteOnce
및ReadWriteMany
입니다.
선택 사항:
Plan
CR에 지정된 단계에서 VM에서 사용자 정의 코드를 실행하려면후크
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner playbook: | LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
다음과 같습니다.
Playbook은 선택적 Base64로 인코딩된 Ansible 플레이북을 나타냅니다.
플레이북을 지정하는 경우
이미지는
hook-runner
여야 합니다.참고기본
hook-runner
이미지를 사용하거나 사용자 정의 이미지를 지정할 수 있습니다. 사용자 지정 이미지를 지정하는 경우 플레이북을 지정할 필요가 없습니다.
마이그레이션을 위한
계획
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - name: <source_vm> namespace: <namespace> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan>
1 namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map:
2 network:
3 name: <network_map>
4 namespace: <namespace> storage:
5 name: <storage_map>
6 namespace: <namespace> targetNamespace: <target_namespace> vms: - name: <source_vm> namespace: <namespace> hooks:
7 - hook: namespace: <namespace> name: <hook>
8 step: <step>
9 EOF
- 1
Plan
CR의 이름을 지정합니다.- 2
- 계획당 하나의 네트워크 맵과 하나의 스토리지 맵만 지정합니다.
- 3
- 마이그레이션할 VM이 네트워크에 할당되지 않은 경우에도 네트워크 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 4
NetworkMap
CR의 이름을 지정합니다.- 5
- 마이그레이션할 VM이 디스크 이미지로 할당되지 않은 경우에도 스토리지 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
- 6
StorageMap
CR의 이름을 지정합니다.- 7
- 선택 사항: VM에 대해 최대 두 개의 후크를 지정할 수 있습니다. 각 후크는 별도의 마이그레이션 단계에서 실행되어야 합니다.
- 8
Hook
CR의 이름을 지정합니다.- 9
- 허용되는 값은 마이그레이션 계획이 시작되기 전에
PreHook
이거나마이그레이션이 완료된 후 postHook
입니다.
Plan
CR을 실행할마이그레이션
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <name_of_migration_cr> namespace: <namespace> spec: plan: name: <name_of_plan_cr> namespace: <namespace> cutover: <optional_cutover_time> EOF
참고컷오버 시간을 지정하는 경우 UTC 시간 오프셋과 함께 ISO 8601 형식을 사용합니다(예:
2024-04-04T01:23:45.678+09:00
).
5.4. 마이그레이션 취소
CLI(명령줄 인터페이스)에서 마이그레이션이 진행되는 동안 전체 마이그레이션 또는 개별 VM(가상 머신)을 취소할 수 있습니다.
전체 마이그레이션 취소
Migration
CR을 삭제합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
Migration
CR의 이름을 지정합니다.
개별 VM 마이그레이션 취소
마이그레이션
매니페스트의spec.cancel
블록에 개별 VM을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 - name: rhel8-vm EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102
1 - id: vm-203 - name: rhel8-vm EOF
- 1
id
키 또는name
키를 사용하여 VM을 지정할 수 있습니다.
id
키의 값은 RHV VM의 관리 오브젝트 참조, VMware VM 또는 VM UUID 입니다.Migration
CR을 검색하여 나머지 VM의 진행 상황을 모니터링합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml
6장. 고급 마이그레이션 옵션
6.1. 웜 마이그레이션의 사전 복사 간격 변경
ForkliftController
사용자 정의 리소스(CR)를 패치하여 스냅샷 간격을 변경할 수 있습니다.
프로세스
ForkliftController
CR을 패치합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch forkliftcontroller/<forklift-controller> -n openshift-mtv -p '{"spec": {"controller_precopy_interval": <60>}}' --type=merge
$ oc patch forkliftcontroller/<forklift-controller> -n openshift-mtv -p '{"spec": {"controller_precopy_interval": <60>}}' --type=merge
1 - 1
- 사전 복사 간격을 분 단위로 지정합니다. 기본값은
60
입니다.
forklift-controller
Pod를 다시 시작할 필요가 없습니다.
6.2. Validation 서비스에 대한 사용자 지정 규칙 생성
유효성 검사
서비스는 OCI(Open Policy Agent) 정책 규칙을 사용하여 마이그레이션을 위한 각 VM(가상 머신)의 적합성을 확인합니다. 유효성 검사
서비스는 공급자 인벤토리
서비스에 VM 속성으로 저장되는 각 VM에 대한 우려 목록을 생성합니다. 웹 콘솔에는 공급자 인벤토리의 각 VM에 대한 문제가 표시됩니다.
사용자 지정 규칙을 만들어 Validation
서비스의 기본 규칙 집합을 확장할 수 있습니다. 예를 들어 VM에 여러 디스크가 있는지 확인하는 규칙을 생성할 수 있습니다.
6.2.1. Rego 파일 정보
검증 규칙은 OCI(Open Policy Agent) 기본 쿼리 언어인 Rego 로 작성됩니다. 규칙은 Validation
Pod의 /usr/share/opa/policies/io/konveyor/forklift/<provider
> 디렉터리에 .rego
파일로 저장됩니다.
각 검증 규칙은 별도의 .rego
파일에 정의되고 특정 조건에 대한 테스트입니다. 조건이 true
로 평가되면 규칙은 {"category", "label", "assessment"}
해시를 문제에
추가합니다. 문제가
있는 콘텐츠는 VM의 인벤토리 레코드에 있는 concerns
키에 추가됩니다. 웹 콘솔에는 공급자 인벤토리의 각 VM에 대한 concerns
키 내용이 표시됩니다.
다음 .rego
파일 예제에서는 VMware VM 클러스터에서 활성화된 분산 리소스 스케줄링을 확인합니다.
drs_enabled.rego example
package io.konveyor.forklift.vmware has_drs_enabled { input.host.cluster.drsEnabled } concerns[flag] { has_drs_enabled flag := { "category": "Information", "label": "VM running in a DRS-enabled cluster", "assessment": "Distributed resource scheduling is not currently supported by OpenShift Virtualization. The VM can be migrated but it will not have this feature in the target environment." } }
package io.konveyor.forklift.vmware
has_drs_enabled {
input.host.cluster.drsEnabled
}
concerns[flag] {
has_drs_enabled
flag := {
"category": "Information",
"label": "VM running in a DRS-enabled cluster",
"assessment": "Distributed resource scheduling is not currently supported by OpenShift Virtualization. The VM can be migrated but it will not have this feature in the target environment."
}
}
6.2.2. 기본 검증 규칙 확인
사용자 지정 규칙을 만들기 전에 Validation
서비스의 기본 규칙을 확인하여 기존 기본값을 설명하는 규칙을 만들지 않아야 합니다.
예: 기본 규칙에 default valid_input = false
행이 포함되어 있고 default valid_input = true
줄이 포함된 사용자 정의 규칙을 생성하면 검증
서비스가 시작되지 않습니다.
프로세스
Validation
Pod의 터미널에 연결합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc rsh <validation_pod>
$ oc rsh <validation_pod>
공급자의 OPA 정책 디렉터리로 이동합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /usr/share/opa/policies/io/konveyor/forklift/<provider>
$ cd /usr/share/opa/policies/io/konveyor/forklift/<provider>
1 - 1
vmware
또는ovirt
를 지정합니다.
기본 정책을 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow grep -R "default" *
$ grep -R "default" *
6.2.3. 검증 규칙 생성
검증 서비스에 규칙이 포함된 구성 맵 CR(사용자 정의 리소스)을 적용하여 검증
규칙을 생성합니다.
-
기존 규칙과 동일한 이름으로 규칙을 만드는 경우
유효성 검사
서비스는 규칙을 사용하여OR
작업을 수행합니다. -
기본 규칙과 일치하지 않는 규칙을 생성하면
검증
서비스가 시작되지 않습니다.
검증 규칙 예
검증 규칙은 공급자 인벤토리
서비스에서 수집한 VM(가상 머신) 속성을 기반으로 합니다.
예를 들어 VMware API는 이 경로를 사용하여 VMware VM에 NUMA 노드 유사성이 MOR: Cryostat.config.extraConfig["numa.nodeAffinity"]
가 구성되어 있는지 확인합니다.
공급자 인벤토리
서비스는 이 구성을 단순화하고 목록 값을 사용하여 테스트 가능한 속성을 반환합니다.
"numaNodeAffinity": [ "0", "1" ],
"numaNodeAffinity": [
"0",
"1"
],
이 속성을 기반으로 Rego 쿼리를 생성하고 forklift-validation-config
구성 맵에 추가합니다.
`count(input.numaNodeAffinity) != 0`
`count(input.numaNodeAffinity) != 0`
프로세스
다음 예에 따라 구성 맵 CR을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: ConfigMap metadata: name: <forklift-validation-config> namespace: openshift-mtv data: vmware_multiple_disks.rego: |- package <provider_package> has_multiple_disks { count(input.disks) > 1 } concerns[flag] { has_multiple_disks flag := { "category": "<Information>", "label": "Multiple disks detected", "assessment": "Multiple disks detected on this VM." } } EOF
$ cat << EOF | oc apply -f - apiVersion: v1 kind: ConfigMap metadata: name: <forklift-validation-config> namespace: openshift-mtv data: vmware_multiple_disks.rego: |- package <provider_package>
1 has_multiple_disks {
2 count(input.disks) > 1 } concerns[flag] { has_multiple_disks
3 flag := { "category": "<Information>",
4 "label": "Multiple disks detected", "assessment": "Multiple disks detected on this VM." } } EOF
forklift-controller
배포를0
으로 스케일링하여Validation
Pod를 중지합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
$ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
forklift-controller
배포를1
로 확장하여Validation
Pod를 시작합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
$ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
Validation
Pod 로그를 확인하여 Pod가 시작되었는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -f <validation_pod>
$ oc logs -f <validation_pod>
사용자 정의 규칙이 기본 규칙과 충돌하면
Validation
Pod가 시작되지 않습니다.소스 공급자를 제거합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete provider <provider> -n openshift-mtv
$ oc delete provider <provider> -n openshift-mtv
소스 공급자를 추가하여 새 규칙을 적용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <provider> namespace: openshift-mtv spec: type: <provider_type> url: <api_end_point> secret: name: <secret> namespace: openshift-mtv EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <provider> namespace: openshift-mtv spec: type: <provider_type>
1 url: <api_end_point>
2 secret: name: <secret>
3 namespace: openshift-mtv EOF
인벤토리
서비스에서 변경 사항을 감지하고 VM의 유효성을 검사하도록 사용자 지정 규칙을 생성한 후 규칙 버전을 업데이트해야 합니다.
6.2.4. 인벤토리 규칙 버전 업데이트
공급자 인벤토리 서비스에서 변경 사항을 감지하고
규칙 버전을 업데이트해야 합니다.
검증
서비스를 트리거하도록 규칙을 업데이트할 때마다 인벤토리
규칙 버전은 각 공급자에 대한 rules_version.rego
파일에 기록됩니다.
프로세스
현재 규칙 버전을 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
1 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "result": { "rules_version": 5 } }
{ "result": { "rules_version": 5 } }
Validation
Pod의 터미널에 연결합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc rsh <validation_pod>
$ oc rsh <validation_pod>
-
/usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego
파일에서 규칙 버전을 업데이트합니다. -
Validation
Pod 터미널에서 로그아웃합니다. 업데이트된 규칙 버전을 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
1 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "result": { "rules_version": 6 } }
{ "result": { "rules_version": 6 } }
6.3. 인벤토리 서비스 JSON 검색
인벤토리
서비스 쿼리를 VM(가상 머신 )으로 전송하여 인벤토리
서비스 JSON을 검색합니다. 출력에는 유효성 검사
서비스 규칙에 의해 쿼리되는 인벤토리 속성이 포함된 "입력"
키가 포함되어 있습니다.
"입력"
키의 모든 속성을 기반으로 검증 규칙을 생성할 수 있습니다(예: input.snapshot.kind
).
프로세스
프로젝트의 경로를 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route -n openshift-mtv
oc get route -n openshift-mtv
인벤토리
서비스 경로를 검색합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route <inventory_service> -n openshift-mtv
$ oc get route <inventory_service> -n openshift-mtv
액세스 토큰을 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
HTTP GET 요청을 트리거합니다(예: Curl 사용).
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
공급자의
UUID
를 검색합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k
1 공급자의 VM을 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
VM의 세부 정보를 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -k
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "input": { "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/workloads/vm-431", "id": "vm-431", "parent": { "kind": "Folder", "id": "group-v22" }, "revision": 1, "name": "iscsi-target", "revisionValidated": 1, "isTemplate": false, "networks": [ { "kind": "Network", "id": "network-31" }, { "kind": "Network", "id": "network-33" } ], "disks": [ { "key": 2000, "file": "[iSCSI_Datastore] iscsi-target/iscsi-target-000001.vmdk", "datastore": { "kind": "Datastore", "id": "datastore-63" }, "capacity": 17179869184, "shared": false, "rdm": false }, { "key": 2001, "file": "[iSCSI_Datastore] iscsi-target/iscsi-target_1-000001.vmdk", "datastore": { "kind": "Datastore", "id": "datastore-63" }, "capacity": 10737418240, "shared": false, "rdm": false } ], "concerns": [], "policyVersion": 5, "uuid": "42256329-8c3a-2a82-54fd-01d845a8bf49", "firmware": "bios", "powerState": "poweredOn", "connectionState": "connected", "snapshot": { "kind": "VirtualMachineSnapshot", "id": "snapshot-3034" }, "changeTrackingEnabled": false, "cpuAffinity": [ 0, 2 ], "cpuHotAddEnabled": true, "cpuHotRemoveEnabled": false, "memoryHotAddEnabled": false, "faultToleranceEnabled": false, "cpuCount": 2, "coresPerSocket": 1, "memoryMB": 2048, "guestName": "Red Hat Enterprise Linux 7 (64-bit)", "balloonedMemory": 0, "ipAddress": "10.19.2.96", "storageUsed": 30436770129, "numaNodeAffinity": [ "0", "1" ], "devices": [ { "kind": "RealUSBController" } ], "host": { "id": "host-29", "parent": { "kind": "Cluster", "id": "domain-c26" }, "revision": 1, "name": "IP address or host name of the vCenter host or RHV Engine host", "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/hosts/host-29", "status": "green", "inMaintenance": false, "managementServerIp": "10.19.2.96", "thumbprint": <thumbprint>, "timezone": "UTC", "cpuSockets": 2, "cpuCores": 16, "productName": "VMware ESXi", "productVersion": "6.5.0", "networking": { "pNICs": [ { "key": "key-vim.host.PhysicalNic-vmnic0", "linkSpeed": 10000 }, { "key": "key-vim.host.PhysicalNic-vmnic1", "linkSpeed": 10000 }, { "key": "key-vim.host.PhysicalNic-vmnic2", "linkSpeed": 10000 }, { "key": "key-vim.host.PhysicalNic-vmnic3", "linkSpeed": 10000 } ], "vNICs": [ { "key": "key-vim.host.VirtualNic-vmk2", "portGroup": "VM_Migration", "dPortGroup": "", "ipAddress": "192.168.79.13", "subnetMask": "255.255.255.0", "mtu": 9000 }, { "key": "key-vim.host.VirtualNic-vmk0", "portGroup": "Management Network", "dPortGroup": "", "ipAddress": "10.19.2.13", "subnetMask": "255.255.255.128", "mtu": 1500 }, { "key": "key-vim.host.VirtualNic-vmk1", "portGroup": "Storage Network", "dPortGroup": "", "ipAddress": "172.31.2.13", "subnetMask": "255.255.0.0", "mtu": 1500 }, { "key": "key-vim.host.VirtualNic-vmk3", "portGroup": "", "dPortGroup": "dvportgroup-48", "ipAddress": "192.168.61.13", "subnetMask": "255.255.255.0", "mtu": 1500 }, { "key": "key-vim.host.VirtualNic-vmk4", "portGroup": "VM_DHCP_Network", "dPortGroup": "", "ipAddress": "10.19.2.231", "subnetMask": "255.255.255.128", "mtu": 1500 } ], "portGroups": [ { "key": "key-vim.host.PortGroup-VM Network", "name": "VM Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch0" }, { "key": "key-vim.host.PortGroup-Management Network", "name": "Management Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch0" }, { "key": "key-vim.host.PortGroup-VM_10G_Network", "name": "VM_10G_Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-VM_Storage", "name": "VM_Storage", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-VM_DHCP_Network", "name": "VM_DHCP_Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-Storage Network", "name": "Storage Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-VM_Isolated_67", "name": "VM_Isolated_67", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch2" }, { "key": "key-vim.host.PortGroup-VM_Migration", "name": "VM_Migration", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch2" } ], "switches": [ { "key": "key-vim.host.VirtualSwitch-vSwitch0", "name": "vSwitch0", "portGroups": [ "key-vim.host.PortGroup-VM Network", "key-vim.host.PortGroup-Management Network" ], "pNICs": [ "key-vim.host.PhysicalNic-vmnic4" ] }, { "key": "key-vim.host.VirtualSwitch-vSwitch1", "name": "vSwitch1", "portGroups": [ "key-vim.host.PortGroup-VM_10G_Network", "key-vim.host.PortGroup-VM_Storage", "key-vim.host.PortGroup-VM_DHCP_Network", "key-vim.host.PortGroup-Storage Network" ], "pNICs": [ "key-vim.host.PhysicalNic-vmnic2", "key-vim.host.PhysicalNic-vmnic0" ] }, { "key": "key-vim.host.VirtualSwitch-vSwitch2", "name": "vSwitch2", "portGroups": [ "key-vim.host.PortGroup-VM_Isolated_67", "key-vim.host.PortGroup-VM_Migration" ], "pNICs": [ "key-vim.host.PhysicalNic-vmnic3", "key-vim.host.PhysicalNic-vmnic1" ] } ] }, "networks": [ { "kind": "Network", "id": "network-31" }, { "kind": "Network", "id": "network-34" }, { "kind": "Network", "id": "network-57" }, { "kind": "Network", "id": "network-33" }, { "kind": "Network", "id": "dvportgroup-47" } ], "datastores": [ { "kind": "Datastore", "id": "datastore-35" }, { "kind": "Datastore", "id": "datastore-63" } ], "vms": null, "networkAdapters": [], "cluster": { "id": "domain-c26", "parent": { "kind": "Folder", "id": "group-h23" }, "revision": 1, "name": "mycluster", "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/clusters/domain-c26", "folder": "group-h23", "networks": [ { "kind": "Network", "id": "network-31" }, { "kind": "Network", "id": "network-34" }, { "kind": "Network", "id": "network-57" }, { "kind": "Network", "id": "network-33" }, { "kind": "Network", "id": "dvportgroup-47" } ], "datastores": [ { "kind": "Datastore", "id": "datastore-35" }, { "kind": "Datastore", "id": "datastore-63" } ], "hosts": [ { "kind": "Host", "id": "host-44" }, { "kind": "Host", "id": "host-29" } ], "dasEnabled": false, "dasVms": [], "drsEnabled": true, "drsBehavior": "fullyAutomated", "drsVms": [], "datacenter": null } } } }
{ "input": { "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/workloads/vm-431", "id": "vm-431", "parent": { "kind": "Folder", "id": "group-v22" }, "revision": 1, "name": "iscsi-target", "revisionValidated": 1, "isTemplate": false, "networks": [ { "kind": "Network", "id": "network-31" }, { "kind": "Network", "id": "network-33" } ], "disks": [ { "key": 2000, "file": "[iSCSI_Datastore] iscsi-target/iscsi-target-000001.vmdk", "datastore": { "kind": "Datastore", "id": "datastore-63" }, "capacity": 17179869184, "shared": false, "rdm": false }, { "key": 2001, "file": "[iSCSI_Datastore] iscsi-target/iscsi-target_1-000001.vmdk", "datastore": { "kind": "Datastore", "id": "datastore-63" }, "capacity": 10737418240, "shared": false, "rdm": false } ], "concerns": [], "policyVersion": 5, "uuid": "42256329-8c3a-2a82-54fd-01d845a8bf49", "firmware": "bios", "powerState": "poweredOn", "connectionState": "connected", "snapshot": { "kind": "VirtualMachineSnapshot", "id": "snapshot-3034" }, "changeTrackingEnabled": false, "cpuAffinity": [ 0, 2 ], "cpuHotAddEnabled": true, "cpuHotRemoveEnabled": false, "memoryHotAddEnabled": false, "faultToleranceEnabled": false, "cpuCount": 2, "coresPerSocket": 1, "memoryMB": 2048, "guestName": "Red Hat Enterprise Linux 7 (64-bit)", "balloonedMemory": 0, "ipAddress": "10.19.2.96", "storageUsed": 30436770129, "numaNodeAffinity": [ "0", "1" ], "devices": [ { "kind": "RealUSBController" } ], "host": { "id": "host-29", "parent": { "kind": "Cluster", "id": "domain-c26" }, "revision": 1, "name": "IP address or host name of the vCenter host or RHV Engine host", "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/hosts/host-29", "status": "green", "inMaintenance": false, "managementServerIp": "10.19.2.96", "thumbprint": <thumbprint>, "timezone": "UTC", "cpuSockets": 2, "cpuCores": 16, "productName": "VMware ESXi", "productVersion": "6.5.0", "networking": { "pNICs": [ { "key": "key-vim.host.PhysicalNic-vmnic0", "linkSpeed": 10000 }, { "key": "key-vim.host.PhysicalNic-vmnic1", "linkSpeed": 10000 }, { "key": "key-vim.host.PhysicalNic-vmnic2", "linkSpeed": 10000 }, { "key": "key-vim.host.PhysicalNic-vmnic3", "linkSpeed": 10000 } ], "vNICs": [ { "key": "key-vim.host.VirtualNic-vmk2", "portGroup": "VM_Migration", "dPortGroup": "", "ipAddress": "192.168.79.13", "subnetMask": "255.255.255.0", "mtu": 9000 }, { "key": "key-vim.host.VirtualNic-vmk0", "portGroup": "Management Network", "dPortGroup": "", "ipAddress": "10.19.2.13", "subnetMask": "255.255.255.128", "mtu": 1500 }, { "key": "key-vim.host.VirtualNic-vmk1", "portGroup": "Storage Network", "dPortGroup": "", "ipAddress": "172.31.2.13", "subnetMask": "255.255.0.0", "mtu": 1500 }, { "key": "key-vim.host.VirtualNic-vmk3", "portGroup": "", "dPortGroup": "dvportgroup-48", "ipAddress": "192.168.61.13", "subnetMask": "255.255.255.0", "mtu": 1500 }, { "key": "key-vim.host.VirtualNic-vmk4", "portGroup": "VM_DHCP_Network", "dPortGroup": "", "ipAddress": "10.19.2.231", "subnetMask": "255.255.255.128", "mtu": 1500 } ], "portGroups": [ { "key": "key-vim.host.PortGroup-VM Network", "name": "VM Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch0" }, { "key": "key-vim.host.PortGroup-Management Network", "name": "Management Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch0" }, { "key": "key-vim.host.PortGroup-VM_10G_Network", "name": "VM_10G_Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-VM_Storage", "name": "VM_Storage", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-VM_DHCP_Network", "name": "VM_DHCP_Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-Storage Network", "name": "Storage Network", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1" }, { "key": "key-vim.host.PortGroup-VM_Isolated_67", "name": "VM_Isolated_67", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch2" }, { "key": "key-vim.host.PortGroup-VM_Migration", "name": "VM_Migration", "vSwitch": "key-vim.host.VirtualSwitch-vSwitch2" } ], "switches": [ { "key": "key-vim.host.VirtualSwitch-vSwitch0", "name": "vSwitch0", "portGroups": [ "key-vim.host.PortGroup-VM Network", "key-vim.host.PortGroup-Management Network" ], "pNICs": [ "key-vim.host.PhysicalNic-vmnic4" ] }, { "key": "key-vim.host.VirtualSwitch-vSwitch1", "name": "vSwitch1", "portGroups": [ "key-vim.host.PortGroup-VM_10G_Network", "key-vim.host.PortGroup-VM_Storage", "key-vim.host.PortGroup-VM_DHCP_Network", "key-vim.host.PortGroup-Storage Network" ], "pNICs": [ "key-vim.host.PhysicalNic-vmnic2", "key-vim.host.PhysicalNic-vmnic0" ] }, { "key": "key-vim.host.VirtualSwitch-vSwitch2", "name": "vSwitch2", "portGroups": [ "key-vim.host.PortGroup-VM_Isolated_67", "key-vim.host.PortGroup-VM_Migration" ], "pNICs": [ "key-vim.host.PhysicalNic-vmnic3", "key-vim.host.PhysicalNic-vmnic1" ] } ] }, "networks": [ { "kind": "Network", "id": "network-31" }, { "kind": "Network", "id": "network-34" }, { "kind": "Network", "id": "network-57" }, { "kind": "Network", "id": "network-33" }, { "kind": "Network", "id": "dvportgroup-47" } ], "datastores": [ { "kind": "Datastore", "id": "datastore-35" }, { "kind": "Datastore", "id": "datastore-63" } ], "vms": null, "networkAdapters": [], "cluster": { "id": "domain-c26", "parent": { "kind": "Folder", "id": "group-h23" }, "revision": 1, "name": "mycluster", "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/clusters/domain-c26", "folder": "group-h23", "networks": [ { "kind": "Network", "id": "network-31" }, { "kind": "Network", "id": "network-34" }, { "kind": "Network", "id": "network-57" }, { "kind": "Network", "id": "network-33" }, { "kind": "Network", "id": "dvportgroup-47" } ], "datastores": [ { "kind": "Datastore", "id": "datastore-35" }, { "kind": "Datastore", "id": "datastore-63" } ], "hosts": [ { "kind": "Host", "id": "host-44" }, { "kind": "Host", "id": "host-29" } ], "dasEnabled": false, "dasVms": [], "drsEnabled": true, "drsBehavior": "fullyAutomated", "drsVms": [], "datacenter": null } } } }
6.4. 마이그레이션 계획에 후크 추가
Migration Toolkit for Virtualization API를 사용하여 명령줄에서 마이그레이션 계획을 추가할 수 있습니다.
6.4.1. MTV 마이그레이션 계획을 위한 API 기반 후크
Migration Toolkit for Virtualization API를 사용하여 명령줄에서 마이그레이션 계획에 후크를 추가할 수 있습니다.
기본 후크 이미지
MTV 후크의 기본 후크 이미지는 registry.redhat.io/rhmtc/openshift-migration-hook-runner-rhel8:v1.8.2-2
입니다. 이미지는 Ansible Kubernetes 리소스 및 최근 oc
바이너리를 제공하기 위해 python-openshift
가 추가된 Ansible Runner 이미지를 기반으로 합니다.
후크 실행
마이그레이션 후크의 일부로 제공되는 Ansible 플레이북은 후크 컨테이너에 ConfigMap
으로 마운트됩니다. 후크 컨테이너는 konveyor-forklift
네임스페이스의 기본 ServiceAccount
를 사용하여 원하는 클러스터에서 작업으로 실행됩니다.
사전 후크 및 postHooks
VM당 후크를 지정하고 각각 사전 후크 또는 후크 로 실행할 수 있습니다. 이 컨텍스트에서 사전 후크는 마이그레이션 전에 실행되는 후크이며 후크는 마이그레이션 후 실행되는 후크입니다.
후크를 추가할 때 후크 CR이 있는 네임스페이스를 지정하고 후크 이름을 지정하고 후크가 PreHook 또는 PostHook인지 여부를 지정해야 합니다.
사전 후크를 VM에서 실행하려면 VM을 시작하고 SSH를 통해 사용할 수 있어야 합니다.
사전 후크의 예:
kind: Plan apiVersion: forklift.konveyor.io/v1beta1 metadata: name: test namespace: konveyor-forklift spec: vms: - id: vm-2861 hooks: - hook: namespace: konveyor-forklift name: playbook step: PreHook
kind: Plan
apiVersion: forklift.konveyor.io/v1beta1
metadata:
name: test
namespace: konveyor-forklift
spec:
vms:
- id: vm-2861
hooks:
- hook:
namespace: konveyor-forklift
name: playbook
step: PreHook
6.4.2. MTV API를 사용하여 VM 마이그레이션에 Hook CR 추가
Migration Toolkit for Virtualization API를 사용하여 명령줄에서 가상 머신을 마이그레이션할 때 사전
또는 후크 CR을 추가할 수 있습니다. 후크
사전 후크
는 마이그레이션 전에 postHook를 실행한
후 실행됩니다.
k8s
모듈을 사용하여 시크릿 또는 configMap
에 저장된 추가 정보를 검색할 수 있습니다.
예를 들어 후크 CR을 생성하여 VM에 cloud-init
를 설치하고 마이그레이션 전에 파일을 작성할 수 있습니다.
프로세스
필요한 경우 VM의 SSH 개인 키를 사용하여 시크릿을 생성합니다. 기존 키를 사용하거나 키 쌍을 생성하고 VM에 공개 키를 설치하고, secret에 개인 키를 인코딩할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 data: key: VGhpcyB3YXMgZ2VuZXJhdGVkIHdpdGggc3NoLWtleWdlbiBwdXJlbHkgZm9yIHRoaXMgZXhhbXBsZS4KSXQgaXMgbm90IHVzZWQgYW55d2hlcmUuCi0tLS0tQkVHSU4gT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tCmIzQmxibk56YUMxclpYa3RkakVBQUFBQUJHNXZibVVBQUFBRWJtOXVaUUFBQUFBQUFBQUJBQUFCbHdBQUFBZHpjMmd0Y24KTmhBQUFBQXdFQUFRQUFBWUVBMzVTTFRReDBFVjdPTWJQR0FqcEsxK2JhQURTTVFuK1NBU2pyTGZLNWM5NGpHdzhDbnA4LwovRHErZHFBR1pxQkg2ZnAxYmVJM1BZZzVWVDk0RVdWQ2RrTjgwY3dEcEo0Z1R0NHFUQ1gzZUYvY2x5VXQyUC9zaTNjcnQ0CjBQdi9wVnZXU1U2TlhHaDJIZC93V0MwcGh5Z0RQOVc5SHRQSUF0OFpnZmV2ZnUwZHpraVl6OHNVaElWU2ZsRGpaNUFqcUcKUjV2TVVUaGlrczEvZVlCeTdiMkFFSEdzYU8xN3NFbWNiYUlHUHZuUFVwWmQrdjkyYU1JdWZoYjhLZkFSbzZ3Ty9ISW1VbQovdDdHWFBJUmxBMUhSV0p1U05odTQzZS9DY3ZYd3Z6RnZrdE9kYXlEQzBMTklHMkpVaURlNWd0UUQ1WHZXc1p3MHQvbEs1CklacjFrZXZRNUJsYWNISmViV1ZNYUQvdllpdFdhSFo4OEF1Y0czaGh2bjkrOGNSTGhNVExiVlFSMWh2UVpBL1JtQXN3eE0KT3VJSmRaUmtxTThLZlF4Z28zQThRNGJhQW1VbnpvM3Zwa0FWdC9uaGtIOTRaRE5rV2U2RlRhdThONStyYTJCZkdjZVA4VApvbjFEeTBLRlpaUlpCREVVRVc0eHdTYUVOYXQ3c2RDNnhpL1d5OURaQUFBRm1NRFBXeDdBejFzZUFBQUFCM056YUMxeWMyCkVBQUFHQkFOK1VpMDBNZEJGZXpqR3p4Z0k2U3RmbTJnQTBqRUova2dFbzZ5M3l1WFBlSXhzUEFwNmZQL3c2dm5hZ0JtYWcKUituNmRXM2lOejJJT1ZVL2VCRmxRblpEZk5ITUE2U2VJRTdlS2t3bDkzaGYzSmNsTGRqLzdJdDNLN2VORDcvNlZiMWtsTwpqVnhvZGgzZjhGZ3RLWWNvQXovVnZSN1R5QUxmR1lIM3IzN3RIYzVJbU0vTEZJU0ZVbjVRNDJlUUk2aGtlYnpGRTRZcExOCmYzbUFjdTI5Z0JCeHJHanRlN0JKbkcyaUJqNzV6MUtXWGZyL2RtakNMbjRXL0Nud0VhT3NEdnh5SmxKdjdleGx6eUVaUU4KUjBWaWJrallidU4zdnduTDE4TDh4YjVMVG5Xc2d3dEN6U0J0aVZJZzN1WUxVQStWNzFyR2NOTGY1U3VTR2E5WkhyME9RWgpXbkJ5WG0xbFRHZy83MklyVm1oMmZQQUxuQnQ0WWI1L2Z2SEVTNFRFeTIxVUVkWWIwR1FQMFpnTE1NVERyaUNYV1VaS2pQCkNuME1ZS053UEVPRzJnSmxKODZONzZaQUZiZjU0WkIvZUdRelpGbnVoVTJydkRlZnEydGdYeG5Iai9FNko5UTh0Q2hXV1UKV1FReEZCRnVNY0VtaERXcmU3SFF1c1l2MXN2UTJRQUFBQU1CQUFFQUFBR0JBSlZtZklNNjdDQmpXcU9KdnFua2EvakRrUwo4TDdpSE5mekg1TnRZWVdPWmRMTlk2L0lRa1pDeFcwTWtSKzlUK0M3QUZKZzBNV2Q5ck5PeUxJZDkxNjZoOVJsNG0xdFJjCnViZ1o2dWZCZ3hGVDlXS21mSEdCNm4zelh5b2pQOEFJTnR6ODVpaUVHVXFFRWtVRVdMd0RGSmdvcFllQ3l1VmZ2ZE92MUgKRm1WWmEwNVo0b3NQNkNENXVmc2djQ1RYQTR6VnZ5ZHVCYkxqdHN5RjdYZjNUdjZUQ1QxU0swZHErQk1OOXRvb0RZaXpwagpzbDh6NzlybXp3eUFyWFlVcnFUUkpsNmpwRkNrWHJLcy9LeG96MHhhbXlMY2RORk9hWE51LzlnTkpjRERsV2hPcFRqNHk4CkpkNXBuV1Jueis1RHJLRFdhY0loUW1CMUxVd2ZLWmQwbVFxaUpzMUMxcXZVUmlKOGExaThKUTI4bHFuWTFRRk9wbk13emcKWEpla2FndThpT1ExRFJlQkhaM0NkcVJUYnY3bVJZSGxramx0dXJmZGc4M3hvM0ErZ1JSR001eUVOcW5xSkplQjhJQVB5UwptMFp0dGdqbHNqNTJ2K1B1NmExMHoxZndKK1VML2N6dTRKeEpOYlp6WTFIMnpLODJBaVI1T3JYNmx2aUEvSWFSRVcwUUFBCkFNQndVeUJpcUc5bEZCUnltL2UvU1VORVMzdHpicUZNdTdIcy84WTV5SnAxKzR6OXUxNGtJR2ttV0Y5eE5HT3hrY3V0cWwKeHVUcndMbjFUaFNQTHQrTjUwTGhVdzR4ZjBhNUxqemdPbklPU0FRbm5HY1Nxa0dTRDlMR21obGE2WmpydFBHY29lQ3JHdAo5M1Vvcmx5YkxNRzFFRFAxWmpKS1RaZzl6OUMwdDlTTGd3ei9DbFhydW9UNXNQVUdKWnUrbHlIZXpSTDRtcHl6OEZMcnlOCkdNci9leVM5bWdISjNVVkZEYjNIZ3BaK1E1SUdBRU5rZVZEcHIwMGhCZXZndGd6YWtBQUFEQkFQVXQ1RitoMnBVby94V1YKenRkcVQvMzA4dFB5MXVMMU1lWFoydEJPQmRwSDJyd0JzdWt0aTIySGtWZUZXQjJFdUlFUXppMzY3MGc1UGdxR1p4Vng4dQpobEE0Rkg4ZXN1NTNQckZqVW9EeFJhb3d3WXBFcFh5Y2pnNUE1MStwR1VQcWljWjB0YjliaWlhc3BWWXZhWW5sdGlnVG5iClN0UExMY29nemNiL0dGcVYyaXlzc3lwTlMwKzBNRTUxcEtxWGNaS2swbi8vVHpZWWs4TW8vZzRsQ3pmUEZQUlZrVVM5blIKWU1pQzRlcEk0TERmbVdnM0xLQ2N1Zk85all3aWgwYlFBQUFNRUE2WEtldDhEMHNvc0puZVh5WFZGd0dyVyszNlhBVGRQTwpMWDdjaStjYzFoOGV1eHdYQWx3aTJJNFhxSmJBVjBsVEhuVGEycXN3Uy9RQlpJUUJWSkZlVjVyS1daZTc4R2F3d1pWTFZNCldETmNwdFFyRTFaM2pGNS9TdUVzdlVxSDE0Tkc5RUFXWG1iUkNzelE0Vlk3NzQrSi9sTFkvMnlDT1diNzlLYTJ5OGxvYUoKVXczWWVtSld3blp2R3hKNldsL3BmQ2xYN3lEVXlXUktLdGl0cWNjbmpCWVkyRE1tZURwdURDYy9ZdDZDc3dLRmRkMkJ1UwpGZGt5cDlZY3VMaDlLZEFBQUFIR3BoYzI5dVFFRlVMVGd3TWxVdWJXOXVkR3hsYjI0dWFXNTBjbUVCQWdNRUJRWT0KLS0tLS1FTkQgT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tCgo= kind: Secret metadata: name: ssh-credentials namespace: konveyor-forklift type: Opaque
apiVersion: v1 data: key: VGhpcyB3YXMgZ2VuZXJhdGVkIHdpdGggc3NoLWtleWdlbiBwdXJlbHkgZm9yIHRoaXMgZXhhbXBsZS4KSXQgaXMgbm90IHVzZWQgYW55d2hlcmUuCi0tLS0tQkVHSU4gT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tCmIzQmxibk56YUMxclpYa3RkakVBQUFBQUJHNXZibVVBQUFBRWJtOXVaUUFBQUFBQUFBQUJBQUFCbHdBQUFBZHpjMmd0Y24KTmhBQUFBQXdFQUFRQUFBWUVBMzVTTFRReDBFVjdPTWJQR0FqcEsxK2JhQURTTVFuK1NBU2pyTGZLNWM5NGpHdzhDbnA4LwovRHErZHFBR1pxQkg2ZnAxYmVJM1BZZzVWVDk0RVdWQ2RrTjgwY3dEcEo0Z1R0NHFUQ1gzZUYvY2x5VXQyUC9zaTNjcnQ0CjBQdi9wVnZXU1U2TlhHaDJIZC93V0MwcGh5Z0RQOVc5SHRQSUF0OFpnZmV2ZnUwZHpraVl6OHNVaElWU2ZsRGpaNUFqcUcKUjV2TVVUaGlrczEvZVlCeTdiMkFFSEdzYU8xN3NFbWNiYUlHUHZuUFVwWmQrdjkyYU1JdWZoYjhLZkFSbzZ3Ty9ISW1VbQovdDdHWFBJUmxBMUhSV0p1U05odTQzZS9DY3ZYd3Z6RnZrdE9kYXlEQzBMTklHMkpVaURlNWd0UUQ1WHZXc1p3MHQvbEs1CklacjFrZXZRNUJsYWNISmViV1ZNYUQvdllpdFdhSFo4OEF1Y0czaGh2bjkrOGNSTGhNVExiVlFSMWh2UVpBL1JtQXN3eE0KT3VJSmRaUmtxTThLZlF4Z28zQThRNGJhQW1VbnpvM3Zwa0FWdC9uaGtIOTRaRE5rV2U2RlRhdThONStyYTJCZkdjZVA4VApvbjFEeTBLRlpaUlpCREVVRVc0eHdTYUVOYXQ3c2RDNnhpL1d5OURaQUFBRm1NRFBXeDdBejFzZUFBQUFCM056YUMxeWMyCkVBQUFHQkFOK1VpMDBNZEJGZXpqR3p4Z0k2U3RmbTJnQTBqRUova2dFbzZ5M3l1WFBlSXhzUEFwNmZQL3c2dm5hZ0JtYWcKUituNmRXM2lOejJJT1ZVL2VCRmxRblpEZk5ITUE2U2VJRTdlS2t3bDkzaGYzSmNsTGRqLzdJdDNLN2VORDcvNlZiMWtsTwpqVnhvZGgzZjhGZ3RLWWNvQXovVnZSN1R5QUxmR1lIM3IzN3RIYzVJbU0vTEZJU0ZVbjVRNDJlUUk2aGtlYnpGRTRZcExOCmYzbUFjdTI5Z0JCeHJHanRlN0JKbkcyaUJqNzV6MUtXWGZyL2RtakNMbjRXL0Nud0VhT3NEdnh5SmxKdjdleGx6eUVaUU4KUjBWaWJrallidU4zdnduTDE4TDh4YjVMVG5Xc2d3dEN6U0J0aVZJZzN1WUxVQStWNzFyR2NOTGY1U3VTR2E5WkhyME9RWgpXbkJ5WG0xbFRHZy83MklyVm1oMmZQQUxuQnQ0WWI1L2Z2SEVTNFRFeTIxVUVkWWIwR1FQMFpnTE1NVERyaUNYV1VaS2pQCkNuME1ZS053UEVPRzJnSmxKODZONzZaQUZiZjU0WkIvZUdRelpGbnVoVTJydkRlZnEydGdYeG5Iai9FNko5UTh0Q2hXV1UKV1FReEZCRnVNY0VtaERXcmU3SFF1c1l2MXN2UTJRQUFBQU1CQUFFQUFBR0JBSlZtZklNNjdDQmpXcU9KdnFua2EvakRrUwo4TDdpSE5mekg1TnRZWVdPWmRMTlk2L0lRa1pDeFcwTWtSKzlUK0M3QUZKZzBNV2Q5ck5PeUxJZDkxNjZoOVJsNG0xdFJjCnViZ1o2dWZCZ3hGVDlXS21mSEdCNm4zelh5b2pQOEFJTnR6ODVpaUVHVXFFRWtVRVdMd0RGSmdvcFllQ3l1VmZ2ZE92MUgKRm1WWmEwNVo0b3NQNkNENXVmc2djQ1RYQTR6VnZ5ZHVCYkxqdHN5RjdYZjNUdjZUQ1QxU0swZHErQk1OOXRvb0RZaXpwagpzbDh6NzlybXp3eUFyWFlVcnFUUkpsNmpwRkNrWHJLcy9LeG96MHhhbXlMY2RORk9hWE51LzlnTkpjRERsV2hPcFRqNHk4CkpkNXBuV1Jueis1RHJLRFdhY0loUW1CMUxVd2ZLWmQwbVFxaUpzMUMxcXZVUmlKOGExaThKUTI4bHFuWTFRRk9wbk13emcKWEpla2FndThpT1ExRFJlQkhaM0NkcVJUYnY3bVJZSGxramx0dXJmZGc4M3hvM0ErZ1JSR001eUVOcW5xSkplQjhJQVB5UwptMFp0dGdqbHNqNTJ2K1B1NmExMHoxZndKK1VML2N6dTRKeEpOYlp6WTFIMnpLODJBaVI1T3JYNmx2aUEvSWFSRVcwUUFBCkFNQndVeUJpcUc5bEZCUnltL2UvU1VORVMzdHpicUZNdTdIcy84WTV5SnAxKzR6OXUxNGtJR2ttV0Y5eE5HT3hrY3V0cWwKeHVUcndMbjFUaFNQTHQrTjUwTGhVdzR4ZjBhNUxqemdPbklPU0FRbm5HY1Nxa0dTRDlMR21obGE2WmpydFBHY29lQ3JHdAo5M1Vvcmx5YkxNRzFFRFAxWmpKS1RaZzl6OUMwdDlTTGd3ei9DbFhydW9UNXNQVUdKWnUrbHlIZXpSTDRtcHl6OEZMcnlOCkdNci9leVM5bWdISjNVVkZEYjNIZ3BaK1E1SUdBRU5rZVZEcHIwMGhCZXZndGd6YWtBQUFEQkFQVXQ1RitoMnBVby94V1YKenRkcVQvMzA4dFB5MXVMMU1lWFoydEJPQmRwSDJyd0JzdWt0aTIySGtWZUZXQjJFdUlFUXppMzY3MGc1UGdxR1p4Vng4dQpobEE0Rkg4ZXN1NTNQckZqVW9EeFJhb3d3WXBFcFh5Y2pnNUE1MStwR1VQcWljWjB0YjliaWlhc3BWWXZhWW5sdGlnVG5iClN0UExMY29nemNiL0dGcVYyaXlzc3lwTlMwKzBNRTUxcEtxWGNaS2swbi8vVHpZWWs4TW8vZzRsQ3pmUEZQUlZrVVM5blIKWU1pQzRlcEk0TERmbVdnM0xLQ2N1Zk85all3aWgwYlFBQUFNRUE2WEtldDhEMHNvc0puZVh5WFZGd0dyVyszNlhBVGRQTwpMWDdjaStjYzFoOGV1eHdYQWx3aTJJNFhxSmJBVjBsVEhuVGEycXN3Uy9RQlpJUUJWSkZlVjVyS1daZTc4R2F3d1pWTFZNCldETmNwdFFyRTFaM2pGNS9TdUVzdlVxSDE0Tkc5RUFXWG1iUkNzelE0Vlk3NzQrSi9sTFkvMnlDT1diNzlLYTJ5OGxvYUoKVXczWWVtSld3blp2R3hKNldsL3BmQ2xYN3lEVXlXUktLdGl0cWNjbmpCWVkyRE1tZURwdURDYy9ZdDZDc3dLRmRkMkJ1UwpGZGt5cDlZY3VMaDlLZEFBQUFIR3BoYzI5dVFFRlVMVGd3TWxVdWJXOXVkR3hsYjI0dWFXNTBjbUVCQWdNRUJRWT0KLS0tLS1FTkQgT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tCgo= kind: Secret metadata: name: ssh-credentials namespace: konveyor-forklift type: Opaque
다음과 같이 파일을 연결하고 base64로 파이핑하여 플레이북을 인코딩합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat playbook.yml | base64 -w0
$ cat playbook.yml | base64 -w0
참고여기에서 문서를 사용하여 플레이북을 인코딩할 수도 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | base64 -w0 - hosts: localhost tasks: - debug: msg: test EOF
$ cat << EOF | base64 -w0 - hosts: localhost tasks: - debug: msg: test EOF
후크 CR을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: playbook namespace: konveyor-forklift spec: image: registry.redhat.io/rhmtc/openshift-migration-hook-runner-rhel8:v1.8.2-2 playbook: LSBuYW1lOiBNYWluCiAgaG9zdHM6IGxvY2FsaG9zdAogIHRhc2tzOgogIC0gbmFtZTogTG9hZCBQbGFuCiAgICBpbmNsdWRlX3ZhcnM6CiAgICAgIGZpbGU6IHBsYW4ueW1sCiAgICAgIG5hbWU6IHBsYW4KCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3ZhcnM6CiAgICAgIGZpbGU6IHdvcmtsb2FkLnltbAogICAgICBuYW1lOiB3b3JrbG9hZAoKICAtIG5hbWU6IAogICAgZ2V0ZW50OgogICAgICBkYXRhYmFzZTogcGFzc3dkCiAgICAgIGtleTogInt7IGFuc2libGVfdXNlcl9pZCB9fSIKICAgICAgc3BsaXQ6ICc6JwoKICAtIG5hbWU6IEVuc3VyZSBTU0ggZGlyZWN0b3J5IGV4aXN0cwogICAgZmlsZToKICAgICAgcGF0aDogfi8uc3NoCiAgICAgIHN0YXRlOiBkaXJlY3RvcnkKICAgICAgbW9kZTogMDc1MAogICAgZW52aXJvbm1lbnQ6CiAgICAgIEhPTUU6ICJ7eyBhbnNpYmxlX2ZhY3RzLmdldGVudF9wYXNzd2RbYW5zaWJsZV91c2VyX2lkXVs0XSB9fSIKCiAgLSBrOHNfaW5mbzoKICAgICAgYXBpX3ZlcnNpb246IHYxCiAgICAgIGtpbmQ6IFNlY3JldAogICAgICBuYW1lOiBzc2gtY3JlZGVudGlhbHMKICAgICAgbmFtZXNwYWNlOiBrb252ZXlvci1mb3JrbGlmdAogICAgcmVnaXN0ZXI6IHNzaF9jcmVkZW50aWFscwoKICAtIG5hbWU6IENyZWF0ZSBTU0gga2V5CiAgICBjb3B5OgogICAgICBkZXN0OiB+Ly5zc2gvaWRfcnNhCiAgICAgIGNvbnRlbnQ6ICJ7eyBzc2hfY3JlZGVudGlhbHMucmVzb3VyY2VzWzBdLmRhdGEua2V5IHwgYjY0ZGVjb2RlIH19IgogICAgICBtb2RlOiAwNjAwCgogIC0gYWRkX2hvc3Q6CiAgICAgIG5hbWU6ICJ7eyB3b3JrbG9hZC52bS5pcGFkZHJlc3MgfX0iCiAgICAgIGFuc2libGVfdXNlcjogcm9vdAogICAgICBncm91cHM6IHZtcwoKLSBob3N0czogdm1zCiAgdGFza3M6CiAgLSBuYW1lOiBJbnN0YWxsIGNsb3VkLWluaXQKICAgIGRuZjoKICAgICAgbmFtZToKICAgICAgLSBjbG91ZC1pbml0CiAgICAgIHN0YXRlOiBsYXRlc3QKCiAgLSBuYW1lOiBDcmVhdGUgVGVzdCBGaWxlCiAgICBjb3B5OgogICAgICBkZXN0OiAvdGVzdC50eHQKICAgICAgY29udGVudDogIkhlbGxvIFdvcmxkIgogICAgICBtb2RlOiAwNjQ0Cg== serviceAccount: forklift-controller
apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: playbook namespace: konveyor-forklift spec: image: registry.redhat.io/rhmtc/openshift-migration-hook-runner-rhel8:v1.8.2-2 playbook: LSBuYW1lOiBNYWluCiAgaG9zdHM6IGxvY2FsaG9zdAogIHRhc2tzOgogIC0gbmFtZTogTG9hZCBQbGFuCiAgICBpbmNsdWRlX3ZhcnM6CiAgICAgIGZpbGU6IHBsYW4ueW1sCiAgICAgIG5hbWU6IHBsYW4KCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3ZhcnM6CiAgICAgIGZpbGU6IHdvcmtsb2FkLnltbAogICAgICBuYW1lOiB3b3JrbG9hZAoKICAtIG5hbWU6IAogICAgZ2V0ZW50OgogICAgICBkYXRhYmFzZTogcGFzc3dkCiAgICAgIGtleTogInt7IGFuc2libGVfdXNlcl9pZCB9fSIKICAgICAgc3BsaXQ6ICc6JwoKICAtIG5hbWU6IEVuc3VyZSBTU0ggZGlyZWN0b3J5IGV4aXN0cwogICAgZmlsZToKICAgICAgcGF0aDogfi8uc3NoCiAgICAgIHN0YXRlOiBkaXJlY3RvcnkKICAgICAgbW9kZTogMDc1MAogICAgZW52aXJvbm1lbnQ6CiAgICAgIEhPTUU6ICJ7eyBhbnNpYmxlX2ZhY3RzLmdldGVudF9wYXNzd2RbYW5zaWJsZV91c2VyX2lkXVs0XSB9fSIKCiAgLSBrOHNfaW5mbzoKICAgICAgYXBpX3ZlcnNpb246IHYxCiAgICAgIGtpbmQ6IFNlY3JldAogICAgICBuYW1lOiBzc2gtY3JlZGVudGlhbHMKICAgICAgbmFtZXNwYWNlOiBrb252ZXlvci1mb3JrbGlmdAogICAgcmVnaXN0ZXI6IHNzaF9jcmVkZW50aWFscwoKICAtIG5hbWU6IENyZWF0ZSBTU0gga2V5CiAgICBjb3B5OgogICAgICBkZXN0OiB+Ly5zc2gvaWRfcnNhCiAgICAgIGNvbnRlbnQ6ICJ7eyBzc2hfY3JlZGVudGlhbHMucmVzb3VyY2VzWzBdLmRhdGEua2V5IHwgYjY0ZGVjb2RlIH19IgogICAgICBtb2RlOiAwNjAwCgogIC0gYWRkX2hvc3Q6CiAgICAgIG5hbWU6ICJ7eyB3b3JrbG9hZC52bS5pcGFkZHJlc3MgfX0iCiAgICAgIGFuc2libGVfdXNlcjogcm9vdAogICAgICBncm91cHM6IHZtcwoKLSBob3N0czogdm1zCiAgdGFza3M6CiAgLSBuYW1lOiBJbnN0YWxsIGNsb3VkLWluaXQKICAgIGRuZjoKICAgICAgbmFtZToKICAgICAgLSBjbG91ZC1pbml0CiAgICAgIHN0YXRlOiBsYXRlc3QKCiAgLSBuYW1lOiBDcmVhdGUgVGVzdCBGaWxlCiAgICBjb3B5OgogICAgICBkZXN0OiAvdGVzdC50eHQKICAgICAgY29udGVudDogIkhlbGxvIFdvcmxkIgogICAgICBtb2RlOiAwNjQ0Cg== serviceAccount: forklift-controller
1 - 1
- 클러스터의 리소스에 대한 액세스를 제어하려면 후크를 실행할
serviceAccount
를 지정합니다.
참고연결된 플레이북을 디코딩하려면 사용자 정의 출력을 사용하여 리소스를 검색하고 base64로 파이프합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n konveyor-forklift hook playbook -o \ go-template='{{ .spec.playbook }}' | base64 -d
oc get -n konveyor-forklift hook playbook -o \ go-template='{{ .spec.playbook }}' | base64 -d
여기에 인코딩된 플레이북은 다음을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - name: Main hosts: localhost tasks: - name: Load Plan include_vars: file: plan.yml name: plan - name: Load Workload include_vars: file: workload.yml name: workload - name: getent: database: passwd key: "{{ ansible_user_id }}" split: ':' - name: Ensure SSH directory exists file: path: ~/.ssh state: directory mode: 0750 environment: HOME: "{{ ansible_facts.getent_passwd[ansible_user_id][4] }}" - k8s_info: api_version: v1 kind: Secret name: ssh-credentials namespace: konveyor-forklift register: ssh_credentials - name: Create SSH key copy: dest: ~/.ssh/id_rsa content: "{{ ssh_credentials.resources[0].data.key | b64decode }}" mode: 0600 - add_host: name: "{{ workload.vm.ipaddress }}" ansible_user: root groups: vms - hosts: vms tasks: - name: Install cloud-init dnf: name: - cloud-init state: latest - name: Create Test File copy: dest: /test.txt content: "Hello World" mode: 0644
- name: Main hosts: localhost tasks: - name: Load Plan include_vars: file: plan.yml name: plan - name: Load Workload include_vars: file: workload.yml name: workload - name: getent: database: passwd key: "{{ ansible_user_id }}" split: ':' - name: Ensure SSH directory exists file: path: ~/.ssh state: directory mode: 0750 environment: HOME: "{{ ansible_facts.getent_passwd[ansible_user_id][4] }}" - k8s_info: api_version: v1 kind: Secret name: ssh-credentials namespace: konveyor-forklift register: ssh_credentials - name: Create SSH key copy: dest: ~/.ssh/id_rsa content: "{{ ssh_credentials.resources[0].data.key | b64decode }}" mode: 0600 - add_host: name: "{{ workload.vm.ipaddress }}" ansible_user: root groups: vms - hosts: vms tasks: - name: Install cloud-init dnf: name: - cloud-init state: latest - name: Create Test File copy: dest: /test.txt content: "Hello World" mode: 0644
후크를 사용하여 Plan CR을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kind: Plan apiVersion: forklift.konveyor.io/v1beta1 metadata: name: test namespace: konveyor-forklift spec: map: network: namespace: "konveyor-forklift" name: "network" storage: namespace: "konveyor-forklift" name: "storage" provider: source: namespace: "konveyor-forklift" name: "boston" destination: namespace: "konveyor-forklift" name: host targetNamespace: "konveyor-forklift" vms: - id: vm-2861 hooks: - hook: namespace: konveyor-forklift name: playbook step: PreHook
kind: Plan apiVersion: forklift.konveyor.io/v1beta1 metadata: name: test namespace: konveyor-forklift spec: map: network: namespace: "konveyor-forklift" name: "network" storage: namespace: "konveyor-forklift" name: "storage" provider: source: namespace: "konveyor-forklift" name: "boston" destination: namespace: "konveyor-forklift" name: host targetNamespace: "konveyor-forklift" vms: - id: vm-2861 hooks: - hook: namespace: konveyor-forklift name: playbook step: PreHook
1 - 1
- 옵션은 마이그레이션 전에 후크를 실행하는
사전
후크이며후크
후 마이그레이션 후 후크를 실행합니다.
사전 후크를 VM에서 실행하려면 VM을 시작하고 SSH를 통해 사용할 수 있어야 합니다.
7장. Migration Toolkit for Virtualization 업그레이드
Red Hat OpenShift 웹 콘솔을 사용하여 새 버전을 설치하여 MTV Operator를 업그레이드할 수 있습니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 Operator → 설치된 Operator → Migration Toolkit for Virtualization Operator → 서브스크립션 을 클릭합니다.
업데이트 채널을 올바른 릴리스로 변경합니다.
Red Hat OpenShift 문서의 업데이트 채널 변경을 참조하십시오.
Upgrade 상태가 Up to date 에서 Upgrade available 로 변경되는지 확인합니다. 그러지 않으면
CatalogSource
Pod를 다시 시작합니다.-
카탈로그 소스(예:
redhat-operators
)를 확인합니다. 명령줄에서 카탈로그 소스 Pod를 검색합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pod -n openshift-marketplace | grep <catalog_source>
$ oc get pod -n openshift-marketplace | grep <catalog_source>
Pod를 삭제합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod -n openshift-marketplace <catalog_source_pod>
$ oc delete pod -n openshift-marketplace <catalog_source_pod>
업그레이드 상태가 최신 에서 업그레이드 가능 으로 변경됩니다.
서브스크립션 탭에서 업데이트 승인을 자동으로 설정하면 업그레이드 가 자동으로 시작됩니다.
-
카탈로그 소스(예:
서브스크립션 탭에서 업데이트 승인을 Manual 로 설정한 경우 업그레이드를 승인합니다.
Red Hat OpenShift 설명서에서 보류 중인 업그레이드 수동 승인을 참조하십시오.
-
MTV 2.2에서 업그레이드하고 VMware 소스 공급자를 정의한 경우 VDDK
init
이미지를 추가하여 VMware 공급자를 편집합니다. 그렇지 않으면 업데이트가 VMware 공급 업체의 상태를Critical
로 변경합니다. 자세한 내용은 VMSphere 소스 공급자 추가를 참조하십시오. -
MTV 2.2의 Red Hat OpenShift 대상 공급자의 NFS에 매핑된 경우 NFS 스토리지 프로필에서
AccessModes
및VolumeMode
매개변수를 편집합니다. 그렇지 않으면 업그레이드가 NFS 매핑을 무효화합니다. 자세한 내용은 스토리지 프로필 사용자 지정을 참조하십시오.
8장. Migration Toolkit for Virtualization 설치 제거
Red Hat OpenShift 웹 콘솔 또는 CLI(명령줄 인터페이스)를 사용하여 MCP(Migration Toolkit for Virtualization)를 설치 제거할 수 있습니다.
8.1. Red Hat OpenShift 웹 콘솔을 사용하여 MTV 설치 제거
Red Hat OpenShift 웹 콘솔을 사용하여 openshift-mtv
프로젝트 및 CRD(사용자 정의 리소스 정의)를 삭제하여 MCP(Migration Toolkit for Virtualization)를 설치 제거할 수 있습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 로그인해야 합니다.
프로세스
- 홈 → 프로젝트를 클릭합니다.
- openshift-mtv 프로젝트를 찾습니다.
-
프로젝트 오른쪽에 있는 옵션 메뉴
에서 프로젝트 삭제 를 선택합니다.
- 프로젝트 삭제 창에서 프로젝트 이름을 입력하고 삭제 를 클릭합니다.
- Administration → CustomResourceDefinitions 를 클릭합니다.
-
검색 필드에 포크리를 입력하여
forklift
.konveyor.io -
각 CRD 오른쪽에 있는 옵션 메뉴
에서 Delete CustomResourceDefinition 을 선택합니다.
8.2. 명령줄 인터페이스에서 MTV 설치 제거
openshift-mtv
프로젝트 및 forklift.konveyor.io
CRD(사용자 정의 리소스 정의)를 삭제하여 CLI(명령줄 인터페이스)에서 MCP(Migration Toolkit for Virtualization)를 설치 제거할 수 있습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 로그인해야 합니다.
프로세스
프로젝트를 삭제합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete project openshift-mtv
$ oc delete project openshift-mtv
CRD를 삭제합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get crd -o name | grep 'forklift' | xargs oc delete
$ oc get crd -o name | grep 'forklift' | xargs oc delete
OAuthClient를 삭제합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete oauthclient/forklift-ui
$ oc delete oauthclient/forklift-ui
9장. MTV 성능 권장 사항
이 섹션의 목적은 테스트를 통해 관찰된 결과에 따라 MCP(Migration Toolkit for Virtualization)를 사용하여 VM(가상 머신)의 효율적이고 효과적인 마이그레이션을 위한 권장 사항을 공유하는 것입니다.
여기에 제공된 데이터는 Red Hat Labs의 테스트에서 수집되었으며 참조용으로만 제공됩니다.
전반적으로 이러한 숫자는 최상의 시나리오를 표시하도록 고려해야 합니다.
마이그레이션의 성능은 이러한 결과와 다를 수 있으며 여러 요인에 따라 달라집니다.
9.1. 빠른 스토리지 및 네트워크 속도 보장
VMware 및 Red Hat OpenShift(OCP) 환경 모두에 대해 빠른 스토리지 및 네트워크 속도를 보장합니다.
빠른 마이그레이션을 수행하려면 VMware가 데이터 저장소에 대한 빠른 읽기 액세스 권한이 있어야 합니다. VMware ESXi 호스트 간의 네트워킹은 빨라야 하며 10GiB 네트워크 연결을 확인하고 네트워크 병목 현상을 방지해야 합니다.
- VMware 네트워크를 OCP 작업자 인터페이스 네트워크 환경으로 확장합니다.
- VMware 네트워크가 높은 처리량(10Gigabit Ethernet) 및 빠른 네트워킹을 제공하여 수신 속도가 ESXi 데이터 저장소의 읽기 속도와 일치하도록 하는 것이 중요합니다.
- 마이그레이션 프로세스에서는 상당한 네트워크 대역폭을 사용하고 마이그레이션 네트워크가 활용된다는 점에 유의하십시오. 다른 서비스에서 해당 네트워크를 사용하는 경우 해당 서비스 및 마이그레이션 속도에 영향을 미칠 수 있습니다.
-
예를 들어 200에서 325MiB/s는 OCP 인터페이스로 데이터를 전송하는 것과 관련된 각 ESXi 호스트에 대한
vmnic
의 평균 네트워크 전송 속도였습니다.
9.2. 빠른 데이터 저장소 읽기 속도를 보장하여 효율적이고 성능이 높은 마이그레이션을 보장합니다.
데이터 저장소 읽기 속도는 총 전송 시간에 영향을 미치므로 ESXi 데이터 저장소에서 ESXi 호스트로 빠른 읽기를 가능하게 하는 것이 중요합니다.
예: 200~300MiB/s는 단일 ESXi 서버의 vSphere 및 ESXi 끝점 모두에 대한 평균 읽기 속도였습니다. 여러 ESXi 서버를 사용하면 데이터 저장소 읽기 속도가 높을 수 있습니다.
9.3. 끝점 유형
MTV 2.6에서는 다음 vSphere 공급자 옵션을 사용할 수 있습니다.
- MTV 2.6에 도입된 ESXi 엔드포인트( ESXi에서 인벤토리 및 디스크 전송)
- vCenter Server 엔드포인트; ESXi 호스트용 네트워크 없음( vCenter에서 인벤토리 및 디스크 전송)
- vCenter 엔드포인트 및 ESXi 네트워크를 사용할 수 있습니다( vCenter의 인벤토리, ESXi에서 디스크 전송).
여러 ESXi 호스트에 등록된 많은 VM을 전송하는 경우 vCenter 엔드포인트 및 ESXi 네트워크를 사용하는 것이 좋습니다.
vSphere 7.0부터 ESXi 호스트는 NBD 전송에 사용할 네트워크에 레이블을 지정할 수 있습니다. 이 작업은 적절한 vSphereBackupNFC
라벨을 사용하여 원하는 NIC(가상 네트워크 인터페이스 카드)를 태그하여 수행됩니다. 이 작업이 완료되면 작업자 및 ESXi 호스트 인터페이스에 연결할 수 있는 한 MTV는 Openshift로 네트워크 전송을 위해 ESXi 인터페이스를 활용할 수 있습니다. 이는 마이그레이션 사용자가 ESXi 자격 증명에 액세스할 수 없지만 마이그레이션에 사용되는 ESXi 인터페이스를 제어할 수 없는 경우 특히 유용합니다.
자세한 내용은 (MTV-1230)를 참조하십시오.
NBD 백업의 인터페이스 vmk2
를 지정하는 다음 ESXi 명령을 사용할 수 있습니다.
esxcli network ip interface tag add -t vSphereBackupNFC -i vmk2
esxcli network ip interface tag add -t vSphereBackupNFC -i vmk2
9.4. ESXi 호스트 BIOS 프로필 및 고성능을 위한 ESXi 호스트 전원 관리 설정
가능한 경우 마이그레이션 수행에 사용되는 호스트가 최대 성능과 관련된 BIOS 프로필로 설정되어 있는지 확인합니다. vSphere에서 제어되는 Host Power Management를 사용하는 호스트는 High Performance
가 설정되어 있는지 확인해야 합니다.
테스트 결과 BIOS 및 호스트 전원 관리 세트를 모두 사용하여 VM 10개를 전송할 때 마이그레이션은 평균 데이터 저장소 읽기 속도에서 15MiB를 늘렸습니다.
9.5. VMware 네트워크에서 추가 네트워크 로드 방지
ESXi 엔드포인트를 사용할 때 마이그레이션 네트워크를 선택하여 VMware 네트워크에서 네트워크 부하를 줄일 수 있습니다.
MTV는 가상화 공급자를 통합함으로써 가상 머신을 OCP로 마이그레이션하기 위해 ESXi 호스트에서 액세스할 수 있는 특정 네트워크를 선택할 수 있습니다. MTV UI의 ESXi 호스트에서 이 마이그레이션 네트워크를 선택하면 선택한 네트워크를 ESXi 엔드포인트로 사용하여 전송이 수행됩니다.
선택한 네트워크가 OCP 인터페이스에 연결되어 있고, 마이그레이션에 적합한 대역폭이 있고, 네트워크 인터페이스가 포화되지 않도록 하는 것이 중요합니다.
10GbE 네트워크와 같은 빠른 네트워크가 있는 환경에서는 마이그레이션 네트워크가 ESXi 데이터 저장소 읽기 비율과 일치할 것으로 예상할 수 있습니다.
9.6. ESXi 호스트당 최대 동시 디스크 마이그레이션을 제어합니다.
MAX_VM_INFLIGHT MTV
변수를 설정하여 ESXi 호스트에 허용되는 최대 동시 VM 전송 수를 제어합니다.
MTV를 사용하면 이 변수를 사용하여 동시성을 제어할 수 있습니다. 기본적으로 20으로 설정됩니다.
MAX_VM_INFLIGHT
을 설정하는 경우 ESXi 호스트에 대해 최대 동시 VM 전송 수를 고려해야 합니다. 동시에 전송될 마이그레이션 유형을 고려해야 합니다. 예약된 시간 동안 마이그레이션할 실행 중인 VM의 마이그레이션으로 정의된 웜 마이그레이션입니다.
웜 마이그레이션은 스냅샷을 사용하여 이전 디스크 스냅샷 간의 차이점만 비교하고 마이그레이션합니다. 스냅샷 간의 차이점에 대한 마이그레이션은 실행 중인 VM을 OpenShift로 완전히 제거하기 전에 특정 간격으로 수행됩니다.
MTV 2.6에서 MAX_VM_INFLIGHT
은 특정 스냅샷의 현재 마이그레이션 활동이나 단일 vm에 속한 디스크 수에 관계없이 VM당 하나의 전송 슬롯을 예약합니다. MAX_VM_INFLIGHT
에 의해 설정된 총 세트는 ESXi 호스트당 동시 VM 트랜퍼 수를 나타내는 데 사용됩니다.
예
-
MAX_VM_INFLIGHT = 20
및 2 ESXi 호스트는 각 호스트가 20개의 VM을 전송할 수 있음을 의미합니다.
9.7. 동시에 여러 VM을 마이그레이션할 때 마이그레이션이 더 빨리 완료됩니다.
특정 ESXi 호스트의 여러 VM을 마이그레이션해야 하는 경우 여러 VM의 동시 마이그레이션을 시작하면 마이그레이션 시간이 단축됩니다.
테스트 결과 단일 호스트에서 총 크기가 50GiB인 VM 10개를 마이그레이션하는 것이 동일한 수의 VM을 순차적으로 마이그레이션하는 것보다 훨씬 빠릅니다.
단일 호스트에서 10개 이상의 가상 시스템으로 동시 마이그레이션을 늘릴 수 있지만 상당한 개선은 표시되지 않습니다.
예
- 단일 디스크 VM 1개에 6분이 소요되었으며 마이그레이션 속도는 100MiB/s입니다.
- 10개의 단일 디스크 VM은 22분이 소요되었으며 마이그레이션 속도는 272MiB/s입니다.
- 20개의 단일 디스크 VM이 42분 정도 소요되었으며 마이그레이션 속도는 284MiB/s입니다.
앞서 언급한 예에서 10개의 가상 머신의 마이그레이션이 동일한 가상 시스템의 마이그레이션보다 순차적으로 3배 더 빠릅니다.
10개 또는 20개의 가상 머신을 동시에 이동할 때 마이그레이션 속도가 거의 동일했습니다.
9.8. 여러 호스트를 사용하여 마이그레이션이 더 빠르게 완료됩니다.
마이그레이션에 사용되는 ESXi 호스트 간에 등록된 VM과 함께 여러 호스트를 사용하면 마이그레이션 시간이 단축됩니다.
테스트 결과 10개 이상의 단일 디스크 VMS를 전송할 때 각각 총 50G 중 35GiB의 데이터가 포함되어 추가 호스트를 사용하면 마이그레이션 시간을 줄일 수 있습니다.
예
- 단일 호스트를 사용하여 각각 35GiB의 데이터를 포함하는 80개의 단일 디스크 VM은 마이그레이션 속도 294MiB/s입니다.
- 8 ESXi 호스트를 사용하여 각각 35GiB의 데이터를 포함하는 단일 디스크 VM은 마이그레이션 속도가 1,173MiB/s인 41분이 걸렸습니다.
앞서 언급한 예에서 8 ESXi 호스트에서 VM 80개를 마이그레이션하는 것은 각 호스트에서 10개의 VM을 동시에 마이그레이션하는 것이 단일 ESXi 호스트에서 동일한 VM을 실행하는 것보다 4배 빠른 속도입니다.
동시에 8개 이상의 ESXi 호스트에서 VM을 마이그레이션하면 성능이 향상될 수 있습니다. 그러나 이 테스트는 테스트되지 않았으므로 권장되지 않습니다.
9.9. 단일 대규모 마이그레이션 계획에 비해 여러 마이그레이션 계획
단일 마이그레이션 계획에서 참조할 수 있는 최대 디스크 수는 500개입니다. 자세한 내용은 (MTV-1203) 을 참조하십시오.
단일 마이그레이션 계획에서 많은 VM을 마이그레이션하려고 할 때 모든 마이그레이션을 시작하는 데 시간이 걸릴 수 있습니다. 하나의 마이그레이션 계획을 여러 마이그레이션 계획으로 분할하면 동시에 시작할 수 있습니다.
마이그레이션 비교:
-
1개의 계획으로 8 ESXi 호스트를 사용하는 500개의 VM,
max_vm_inflight=100
. -
8개의 계획이 있는 8개의 ESXi 호스트를 사용하는 800개의 VM,
max_vm_inflight=100
, 57분 정도 걸립니다.
테스트 결과 단일 대규모 계획을 한 개의 대규모 계획(예: 계획당 100개의 VMS)으로 분할하면 총 마이그레이션 시간을 줄일 수 있습니다.
9.10. 테스트된 최대값
- 테스트된 최대 ESXi 호스트 수: 8
- 단일 마이그레이션 계획의 최대 VM 수: 500
- 단일 테스트에서 마이그레이션된 최대 VM 수: 5000
- 동시에 수행되는 최대 마이그레이션 계획 수: 40
- 마이그레이션된 최대 단일 디스크 크기: 3Tb가 포함된 디스크 6개
- 단일 VM의 최대 디스크 수: 50
- 단일 ESXi 서버에서 관찰된 최대 단일 데이터 저장소 읽기 속도: 312MiB/초
- 8개의 ESXi 서버와 두 개의 데이터 저장소를 사용하여 가장 많이 관찰된 멀티 데이터 저장소 읽기 속도: 1,242MiB/초
- 가장 많이 관찰된 가상 NIC 전송률을 OpenShift 작업자로 전송: 327MiB/초
- 단일 디스크의 최대 마이그레이션 전송 속도: 162MiB/초(동시가 아닌 마이그레이션 1.5Tb 사용 데이터로 전송할 때 관찰됨)
- 단일 ESXi 호스트에서 여러 VM(단일 디스크)의 최대 콜드 마이그레이션 속도: 294MiB/s(Single ESXi에서 사용되는 30개의 VM, 35/50GiB의 마이그레이션)
- 여러 ESXi 호스트의 여러 VM(단일 디스크)의 최대 콜드 마이그레이션 속도: 1173MB/s(현재 80개의 VM, 35/50GiB, 각 ESXi에서 VM 10개)
성능에 대한 자세한 내용은 MTV 성능 애드온을 참조하십시오.
10장. 문제 해결
이 섹션에서는 일반적인 마이그레이션 문제를 해결하는 데 필요한 정보를 제공합니다.
10.1. 오류 메시지
이 섹션에서는 오류 메시지와 해결 방법에 대해 설명합니다.
웜 가져오기 재시도 제한에 도달했습니다.
VMware 가상 머신(VM)이 사전 복사 단계에서 변경된 블록 추적(CBT) 스냅샷의 최대 수(28)에 도달한 경우 웜 마이그레이션 중에 웜 가져오기 재시도 제한에
도달한 오류 메시지가 표시됩니다.
이 문제를 해결하려면 VM에서 일부 CBT 스냅샷을 삭제하고 마이그레이션 계획을 다시 시작하십시오.
필요한 크기로 디스크 이미지의 크기를 조정할 수 없음
대상 공급자의 가상 머신은 블록 스토리지에서 EXT4 파일 시스템을 사용하여 영구 볼륨을 사용하므로 마이그레이션이 실패할 때 디스크 이미지의 크기를 조정할 수 없음
메시지가 표시됩니다. CDI에서 가정하는 기본 오버헤드에는 루트 파티션에 예약된 위치가 완전히 포함되지 않기 때문에 문제가 발생합니다.
이 문제를 해결하려면 CDI의 파일 시스템 오버헤드를 10% 이상으로 늘립니다.
10.2. must-gather 툴 사용
must-gather
툴을 사용하여 MTV CR(사용자 정의 리소스)에 대한 로그 및 정보를 수집할 수 있습니다. must-gather
데이터 파일을 모든 고객 사례에 연결해야 합니다.
필터링 옵션을 사용하여 특정 네임스페이스, 마이그레이션 계획 또는 VM(가상 머신)에 대한 데이터를 수집할 수 있습니다.
필터링된 must-gather
명령에 존재하지 않는 리소스를 지정하는 경우 아카이브 파일이 생성되지 않습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 OpenShift Virtualization 클러스터에 로그인해야 합니다. -
Red Hat OpenShift CLI(
oc
) 가 설치되어 있어야 합니다.
로그 및 CR 정보 수집
-
must-gather
데이터를 저장하려는 디렉터리로 이동합니다. oc adm must-gather
명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7
데이터는
/must-gather/must-gather.tar.gz
로 저장됩니다. Red Hat 고객 포털에서 해당 지원 사례에 이 파일을 업로드할 수 있습니다.선택 사항:
oc adm must-gather
명령을 다음 옵션과 함께 실행하여 필터링된 데이터를 수집합니다.namespace:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- NS=<namespace> /usr/bin/targeted
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- NS=<namespace> /usr/bin/targeted
마이그레이션 계획:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- PLAN=<migration_plan> /usr/bin/targeted
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- PLAN=<migration_plan> /usr/bin/targeted
가상 머신:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- VM=<vm_id> NS=<namespace> /usr/bin/targeted
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- VM=<vm_id> NS=<namespace> /usr/bin/targeted
1 - 1
Plan
CR에 표시되는 대로 VM ID 를 지정합니다.
10.3. 아키텍처
이 섹션에서는 MTV 사용자 지정 리소스, 서비스 및 워크플로우에 대해 설명합니다.
10.3.1. MTV 사용자 정의 리소스 및 서비스
MTV(Migration Toolkit for Virtualization)는 Red Hat OpenShift Operator로 제공됩니다. 다음 CR(사용자 정의 리소스) 및 서비스를 생성하고 관리합니다.
MTV 사용자 정의 리소스
-
공급자
CR은 MTV가 소스 및 대상 공급자에 연결하고 상호 작용할 수 있는 속성을 저장합니다. -
NetworkMapping
CR은 소스 및 대상 공급자의 네트워크를 매핑합니다. -
StorageMapping
CR은 소스 및 대상 공급자의 스토리지를 매핑합니다. -
plan
CR에는 동일한 마이그레이션 매개변수 및 관련 네트워크 및 스토리지 매핑이 있는 VM 목록이 포함되어 있습니다. Migration
CR은 마이그레이션 계획을 실행합니다.마이그레이션 계획당 하나의 마이그레이션 CR만 지정된 시간에 실행할 수 있습니다.
단일
계획
CR에 대해 여러마이그레이션
CR을 생성할 수 있습니다.
MTV 서비스
인벤토리
서비스는 다음 작업을 수행합니다.- 소스 및 대상 공급자에 연결합니다.
- 매핑 및 계획을 위한 로컬 인벤토리를 유지 관리합니다.
- VM 구성을 저장합니다.
-
VM 구성 변경이 감지되면
유효성 검사
서비스를 실행합니다.
-
유효성 검사
서비스는 규칙을 적용하여 마이그레이션을 위한 VM의 적합성을 확인합니다. Migration Controller
서비스는 마이그레이션을 오케스트레이션합니다.마이그레이션 계획을 생성할 때
Migration Controller
서비스는 계획의 유효성을 검사하고 status 레이블을 추가합니다. 계획 검증에 실패하면 계획 상태가Not ready
이고 마이그레이션을 수행하는 데 계획을 사용할 수 없습니다. 계획이 검증을 통과하면 계획 상태가Ready
이며 마이그레이션을 수행하는 데 사용할 수 있습니다. 마이그레이션에 성공하면Migration Controller
서비스가 계획 상태를Completed
로 변경합니다.-
Populator Controller
서비스는 Volume Populators를 사용하여 디스크 전송을 오케스트레이션합니다. -
Kubevirt 컨트롤러
및CDI(Containerized Data Import) 컨트롤러
서비스는 대부분의 기술 작업을 처리합니다.
10.3.2. 고급 마이그레이션 워크플로
상위 수준 워크플로는 사용자 관점에서 마이그레이션 프로세스를 보여줍니다.
- 소스 공급자, 대상 공급자, 네트워크 매핑 및 스토리지 매핑을 생성합니다.
다음 리소스가 포함된
Plan
CR(사용자 정의 리소스)을 생성합니다.- 소스 제공자
- 대상 공급자( MTV가 대상 클러스터에 설치되지 않은 경우)
- 네트워크 매핑
- 스토리지 매핑
- 하나 이상의 VM(가상 머신)
Plan
CR을 참조하는Migration
CR을 생성하여 마이그레이션 계획을 실행합니다.어떠한 이유로든 모든 VM을 마이그레이션할 수 없는 경우 모든 VM이 마이그레이션될 때까지 동일한
Plan
CR에 대해 여러 개의Migration
CR을 생성할 수 있습니다.-
Plan
CR의 각 VM에 대해Migration Controller
서비스는Migration
CR의 VM 마이그레이션 진행 상황을 기록합니다. Plan
CR의 각 VM의 데이터 전송이 완료되면Migration Controller
서비스에서VirtualMachine
CR을 생성합니다.모든 VM이 마이그레이션되면
Migration Controller
서비스는Plan
CR의 상태를Completed
로 업데이트합니다. 각 소스 VM의 전원 상태는 마이그레이션 후 유지됩니다.
10.3.3. 자세한 마이그레이션 워크플로
자세한 마이그레이션 워크플로를 사용하여 마이그레이션 실패 문제를 해결할 수 있습니다.
워크플로우는 다음 단계를 설명합니다.
원격 OpenShift 클러스터의 웜 마이그레이션 또는 마이그레이션:
마이그레이션
계획을 실행하기 위해 마이그레이션 CR(사용자 정의 리소스)을 생성하면Migration Controller
서비스에서 각 소스 VM 디스크에 대한DataVolume
CR을 생성합니다.각 VM 디스크의 경우:
-
CDI(Containerized Data Importer) 컨트롤러
서비스는DataVolume
CR에 지정된 매개변수를 기반으로 PVC(영구 볼륨 클레임)를 생성합니다. -
StorageClass
에 동적 프로비저너가 있는 경우StorageClass
프로비전 프로그램에 의해 PV(영구 볼륨)가 동적으로 프로비저닝됩니다. -
CDI 컨트롤러
서비스는가져오기
Pod를 생성합니다. 가져오기
Pod는 VM 디스크를 PV로 스트리밍합니다.VM 디스크가 전송된 후 다음을 수행합니다.
Migration Controller
서비스는 VMWare에서 가져올 때 연결된 PVC를 사용하여변환
Pod를 생성합니다.변환
Pod는virt-v2v
를 실행하여 대상 VM의 PVC에 장치 드라이버를 설치하고 구성합니다.-
Migration Controller
서비스는 PVC에 연결된 각 소스 VM(가상 머신)에 대한VirtualMachine
CR을 생성합니다. VM이 소스 환경에서 실행된 경우
마이그레이션
컨트롤러는 VM의 전원을 켜면KubeVirt 컨트롤러
서비스에서virt-launcher
Pod 및VirtualMachineInstance
CR을 생성합니다.virt-launcher
Pod는 VM 디스크로 연결된 PVC를 사용하여QEMU-KVM
을 실행합니다.
RHV 또는 OpenStack에서 로컬 OpenShift 클러스터로 콜드 마이그레이션:
마이그레이션 계획을 실행하기 위해
Migration
Controller(사용자 정의 리소스)를 생성할 때Migration Controller
서비스는PersistentVolumeClaim
CR 각 소스 VM 디스크에 대해 생성되며 소스가 RHV일 때OvirtVolumePopulator
CR 또는 소스가 OpenStack인 경우OpenstackVolumePopulator
CR을 생성합니다.각 VM 디스크의 경우:
-
Populat
or 컨트롤러
서비스는 임시 PVC(영구 볼륨 클레임)를 생성합니다. StorageClass
에 동적 프로비저너가 있는 경우StorageClass
프로비전 프로그램에 의해 PV(영구 볼륨)가 동적으로 프로비저닝됩니다.-
Migration Controller
서비스는 모든 PVC 를 바인딩할 더미 Pod를 생성합니다. Pod 이름에pvcinit
가 포함되어 있습니다.
-
-
Populator Controller
서비스는 팝업 Pod를
생성합니다. 팝업 Pod
는 디스크 데이터를 PV로 전송합니다.VM 디스크가 전송된 후 다음을 수행합니다.
- 임시 PVC가 삭제되고 초기 PVC는 데이터와 함께 PV를 가리킵니다.
-
Migration Controller
서비스는 PVC에 연결된 각 소스 VM(가상 머신)에 대한VirtualMachine
CR을 생성합니다. VM이 소스 환경에서 실행된 경우
마이그레이션
컨트롤러는 VM의 전원을 켜면KubeVirt 컨트롤러
서비스에서virt-launcher
Pod 및VirtualMachineInstance
CR을 생성합니다.virt-launcher
Pod는 VM 디스크로 연결된 PVC를 사용하여QEMU-KVM
을 실행합니다.
VMWare에서 로컬 OpenShift 클러스터로 콜드 마이그레이션:
마이그레이션
계획을 실행하기 위해 마이그레이션 CR(사용자 정의 리소스)을 생성하면Migration Controller
서비스에서 각 소스 VM 디스크에 대한DataVolume
CR을 생성합니다.각 VM 디스크의 경우:
-
CDI(Containerized Data Importer) 컨트롤러
서비스는DataVolume
CR에 지정된 매개변수를 기반으로 빈 PVC(영구 볼륨 클레임)를 생성합니다. -
StorageClass
에 동적 프로비저너가 있는 경우StorageClass
프로비전 프로그램에 의해 PV(영구 볼륨)가 동적으로 프로비저닝됩니다.
모든 VM 디스크의 경우:
-
Migration Controller
서비스는 모든 PVC 를 바인딩할 더미 Pod를 생성합니다. Pod 이름에pvcinit
가 포함되어 있습니다. -
Migration Controller
서비스는 모든 PVC에 대한변환
Pod를 생성합니다. 변환
Pod는virt-v2v
를 실행하여 VM을 KVM 하이퍼바이저로 변환하고 디스크의 데이터를 해당 PV로 전송합니다.VM 디스크가 전송된 후 다음을 수행합니다.
-
Migration Controller
서비스는 PVC에 연결된 각 소스 VM(가상 머신)에 대한VirtualMachine
CR을 생성합니다. VM이 소스 환경에서 실행된 경우
마이그레이션
컨트롤러는 VM의 전원을 켜면KubeVirt 컨트롤러
서비스에서virt-launcher
Pod 및VirtualMachineInstance
CR을 생성합니다.virt-launcher
Pod는 VM 디스크로 연결된 PVC를 사용하여QEMU-KVM
을 실행합니다.
10.4. 로그 및 사용자 정의 리소스
문제 해결을 위해 로그 및 CR(사용자 정의 리소스) 정보를 다운로드할 수 있습니다. 자세한 내용은 자세한 마이그레이션 워크플로 를 참조하십시오.
10.4.1. 수집된 로그 및 사용자 정의 리소스 정보
Red Hat OpenShift 웹 콘솔 또는 CLI(명령줄 인터페이스)를 사용하여 다음 대상에 대한 로그 및 CR(사용자 정의 리소스) yaml
파일을 다운로드할 수 있습니다.
- 마이그레이션 계획: 웹 콘솔 또는 CLI.
- 가상 머신: 웹 콘솔 또는 CLI.
- 네임스페이스: CLI만 해당
must-gather
툴은 아카이브 파일에서 다음 로그 및 CR 파일을 수집합니다.
CR:
-
DataVolume
CR: 마이그레이션된 VM에 마운트된 디스크를 나타냅니다. -
VirtualMachine
CR: 마이그레이션된 VM을 나타냅니다. -
CR
계획
: VM 및 스토리지 및 네트워크 매핑을 정의합니다. -
작업
CR: 선택 사항: 사전 마이그레이션 후크, 마이그레이션 후 후크 또는 둘 다를 나타냅니다.
-
로그:
-
Importer
pod: Disk-to-data-volume 변환 로그가져오기
Pod 이름 지정 규칙은importer-<migration_plan>-<vm_id><5_char_id
>입니다(예:importer-mig-plan-ed90dfc6-9a17-4a17-4anfh
. 여기서ed90dfc6-9a17-4a17-4a8
은 잘린 RHV VM ID이고btnfh
는 생성된 5자 ID입니다. -
변환
pod: VM 변환 로그.변환
Pod는virt-v2v
를 실행하여 VM의 PVC에 장치 드라이버를 설치하고 구성합니다.변환
Pod 이름 지정 규칙은 <migration_plan>-<vm_id><5_char_id
>입니다. -
virt-launcher
Pod: VM 시작 관리자 로그. 마이그레이션된 VM의 전원이 켜지면virt-launcher
Pod는 VM 디스크로 연결된 PVC를 사용하여QEMU-KVM
을 실행합니다. -
Forklift-controller
Pod:must-gather
명령으로 지정된 마이그레이션 계획, 가상 머신 또는 네임스페이스에 대해 로그가 필터링됩니다. -
Forklift-must-gather-api
Pod:must-gather
명령으로 지정된 마이그레이션 계획, 가상 머신 또는 네임스페이스에 대해 로그가 필터링됩니다. hook-job
pod: 로그는 후크 작업으로 필터링됩니다.hook-job
이름 지정 규칙은 <migration_plan>-<vm_id><5_char_id
>입니다(예:plan2j-vm-3696-posthook-4mx85
또는plan2j-vm-3696-mwqnl
).참고must-gather
아카이브 파일에 비어 있거나 제외된 로그 파일이 포함되지 않습니다.
-
VMware 마이그레이션 계획에 대한 must-gather 아카이브 구조의 예
must-gather └── namespaces ├── target-vm-ns │ ├── crs │ │ ├── datavolume │ │ │ ├── mig-plan-vm-7595-tkhdz.yaml │ │ │ ├── mig-plan-vm-7595-5qvqp.yaml │ │ │ └── mig-plan-vm-8325-xccfw.yaml │ │ └── virtualmachine │ │ ├── test-test-rhel8-2disks2nics.yaml │ │ └── test-x2019.yaml │ └── logs │ ├── importer-mig-plan-vm-7595-tkhdz │ │ └── current.log │ ├── importer-mig-plan-vm-7595-5qvqp │ │ └── current.log │ ├── importer-mig-plan-vm-8325-xccfw │ │ └── current.log │ ├── mig-plan-vm-7595-4glzd │ │ └── current.log │ └── mig-plan-vm-8325-4zw49 │ └── current.log └── openshift-mtv ├── crs │ └── plan │ └── mig-plan-cold.yaml └── logs ├── forklift-controller-67656d574-w74md │ └── current.log └── forklift-must-gather-api-89fc7f4b6-hlwb6 └── current.log
must-gather
└── namespaces
├── target-vm-ns
│ ├── crs
│ │ ├── datavolume
│ │ │ ├── mig-plan-vm-7595-tkhdz.yaml
│ │ │ ├── mig-plan-vm-7595-5qvqp.yaml
│ │ │ └── mig-plan-vm-8325-xccfw.yaml
│ │ └── virtualmachine
│ │ ├── test-test-rhel8-2disks2nics.yaml
│ │ └── test-x2019.yaml
│ └── logs
│ ├── importer-mig-plan-vm-7595-tkhdz
│ │ └── current.log
│ ├── importer-mig-plan-vm-7595-5qvqp
│ │ └── current.log
│ ├── importer-mig-plan-vm-8325-xccfw
│ │ └── current.log
│ ├── mig-plan-vm-7595-4glzd
│ │ └── current.log
│ └── mig-plan-vm-8325-4zw49
│ └── current.log
└── openshift-mtv
├── crs
│ └── plan
│ └── mig-plan-cold.yaml
└── logs
├── forklift-controller-67656d574-w74md
│ └── current.log
└── forklift-must-gather-api-89fc7f4b6-hlwb6
└── current.log
10.4.2. 웹 콘솔에서 로그 및 사용자 정의 리소스 정보 다운로드
Red Hat OpenShift 웹 콘솔을 사용하여 완료, 실패 또는 취소된 마이그레이션 계획 또는 마이그레이션된 VM(가상 머신)의 로그 및 정보를 다운로드할 수 있습니다.
프로세스
- Red Hat OpenShift 웹 콘솔에서 마이그레이션 → 가상화 계획을 클릭합니다.
- 마이그레이션 계획 이름 옆에 있는 로그 가져오기를 클릭합니다.
로그 가져오기 창에서 로그 가져오기 를 클릭합니다.
로그가 수집됩니다.
로그 컬렉션 전체
메시지가 표시됩니다.- 로그 다운로드를 클릭하여 아카이브 파일을 다운로드합니다.
- 마이그레이션된 VM의 로그를 다운로드하려면 마이그레이션 계획 이름을 클릭한 다음 VM 옆에 있는 로그 가져오기를 클릭합니다.
10.4.3. 명령줄 인터페이스에서 로그 및 사용자 정의 리소스 정보에 액세스
must-gather
툴을 사용하여 명령줄 인터페이스에서 로그 및 CR(사용자 정의 리소스)에 액세스할 수 있습니다. must-gather
데이터 파일을 모든 고객 사례에 연결해야 합니다.
필터링 옵션을 사용하여 특정 네임스페이스, 완료, 실패 또는 취소된 마이그레이션 계획 또는 마이그레이션된 VM(가상 머신)에 대한 데이터를 수집할 수 있습니다.
필터링된 must-gather
명령에 존재하지 않는 리소스를 지정하는 경우 아카이브 파일이 생성되지 않습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 OpenShift Virtualization 클러스터에 로그인해야 합니다. -
Red Hat OpenShift CLI(
oc
) 가 설치되어 있어야 합니다.
프로세스
-
must-gather
데이터를 저장하려는 디렉터리로 이동합니다. oc adm must-gather
명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7
데이터는
/must-gather/must-gather.tar.gz
로 저장됩니다. Red Hat 고객 포털에서 해당 지원 사례에 이 파일을 업로드할 수 있습니다.선택 사항:
oc adm must-gather
명령을 다음 옵션과 함께 실행하여 필터링된 데이터를 수집합니다.namespace:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- NS=<namespace> /usr/bin/targeted
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- NS=<namespace> /usr/bin/targeted
마이그레이션 계획:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- PLAN=<migration_plan> /usr/bin/targeted
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- PLAN=<migration_plan> /usr/bin/targeted
가상 머신:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- VM=<vm_name> NS=<namespace> /usr/bin/targeted
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.6.7 \ -- VM=<vm_name> NS=<namespace> /usr/bin/targeted
1 - 1
Plan
CR에 표시되는 VM ID가 아닌 VM 이름을 지정해야 합니다.
11장. 추가 정보
11.1. MTV 성능 애드온
여기에 제공된 데이터는 Red Hat Labs의 테스트에서 수집되었으며 참조용으로만 제공됩니다.
전반적으로 이러한 숫자는 최상의 시나리오를 표시하도록 고려해야 합니다.
마이그레이션의 성능은 이러한 결과와 다를 수 있으며 여러 요인에 따라 달라집니다.
11.1.1. ESXi 성능
단일 ESXi 성능
동일한 ESXi 호스트를 사용하여 마이그레이션을 테스트합니다.
반복할 때마다 기간 동안 동시 마이그레이션의 영향을 표시하기 위해 총 VM이 증가합니다.
결과는 총 VM을 늘릴 때 마이그레이션 시간이 선형임을 보여줍니다(50GiB 디스크, 사용률 70%).
ESXi당 최적의 VM 수는 10개입니다.
테스트 케이스 설명 | MTV | VDDK | max_vm inflight | 마이그레이션 유형 | 총 기간 |
---|---|---|---|---|---|
콜드 마이그레이션, 10개의 VM, 단일 ESXi, 사설 네트워크 [a] | 2.6 | 7.0.3 | 100 | Cold | 0:21:39 |
콜드 마이그레이션, 20개의 VM, 단일 ESXi, 사설 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 0:41:16 |
콜드 마이그레이션, 30개의 VM, 단일 ESXi, 사설 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 1:00:59 |
콜드 마이그레이션, 40개의 VM, 단일 ESXi, 사설 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 1:23:02 |
콜드 마이그레이션, 50개의 VM, 단일 ESXi, 사설 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 1:46:24 |
콜드 마이그레이션, 80개의 VM, 단일 ESXi, 사설 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 2:42:49 |
콜드 마이그레이션, 100개의 VM, 단일 ESXi, 사설 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 3:25:15 |
[a]
사설 네트워크는 비 관리 네트워크를 나타냅니다.
|
멀티 ESXi 호스트 및 단일 데이터 저장소
ESXi 호스트 수를 늘리면 마이그레이션 시간(50GiB 디스크, 사용률 70%)이 향상되는 것을 표시하기 위해 ESXi 호스트 수가 늘어났습니다.
테스트 케이스 설명 | MTV | VDDK | max_vm inflight | 마이그레이션 유형 | 총 기간 |
---|---|---|---|---|---|
콜드 마이그레이션, 100개의 VM, 단일 ESXi, 사설 네트워크 [a] | 2.6 | 7.0.3 | 100 | Cold | 3:25:15 |
콜드 마이그레이션, 100개의 VM, 4 ESXs( ESX당 25개의 VM), 프라이빗 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 1:22:27 |
콜드 마이그레이션, 100개의 VM, 5 ESXs (20개 VM per ESX), 프라이빗 네트워크, 1 DataStore | 2.6 | 7.0.3 | 100 | Cold | 1:04:57 |
[a]
사설 네트워크는 관리 대상이 아닌 네트워크를 나타냅니다.
|
11.1.2. 다른 마이그레이션 네트워크 성능
Migration Network
를 반복할 때마다 공급자 를 사용하여 마이그레이션에 가장 빠른 네트워크를 찾습니다.
결과는 모든 인터페이스와 네트워크 속도가 동일할 때 비관리 네트워크와 비교했을 때 관리를 사용하여 성능이 저하되지 않음을 보여줍니다.
테스트 케이스 설명 | MTV | VDDK | max_vm inflight | 마이그레이션 유형 | 총 기간 |
---|---|---|---|---|---|
콜드 마이그레이션, 10개의 VM, 단일 ESXi, MGMT 네트워크 | 2.6 | 7.0.3 | 100 | Cold | 0:21:30 |
콜드 마이그레이션, 10개의 VM, 단일 ESXi, 사설 네트워크 [a] | 2.6 | 7.0.3 | 20 | Cold | 0:21:20 |
콜드 마이그레이션, 10개의 VM, 단일 ESXi, 기본 네트워크 | 2.6.2 | 7.0.3 | 20 | Cold | 0:21:30 |
[a]
사설 네트워크는 관리 대상이 아닌 네트워크를 나타냅니다.
|