2.3. 명령줄에서 VMware vSphere 마이그레이션 실행


CLI(명령줄 인터페이스)를 사용하여 VMware vSphere 소스 공급자에서 마이그레이션할 수 있습니다.

중요

안티바이러스 소프트웨어는 마이그레이션이 실패할 수 있습니다. 마이그레이션을 시작하기 전에 소스 VM에서 이러한 소프트웨어를 제거하는 것이 좋습니다.

중요

MTV는 VMware NVMe(Non-Volatile Memory Express) 디스크 마이그레이션을 지원하지 않습니다.

참고

공유 디스크가 있는 VM(가상 머신)을 마이그레이션하려면 공유 디스크가 있는 가상 머신 마이그레이션을 참조하십시오.

사전 요구 사항

  • UDN(사용자 정의 네트워크)을 사용하는 경우 OpenShift Virtualization에 정의된 네임스페이스 이름을 기록해 둡니다.

프로세스

  1. 소스 공급자 인증 정보에 대한 시크릿 매니페스트를 생성합니다.

    $ 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
    Copy to Clipboard Toggle word wrap
    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 ).
  1. 소스 공급자에 대한 공급자 매니페스트를 생성합니다.

    $ 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 Toggle word wrap
    1
    API 끝점의 URL을 지정합니다(예: https://<vCenter_host>/sdk ).
    2
    선택 사항이지만 마이그레이션을 가속화하기 위해 VDDK 이미지를 생성하는 것이 좋습니다. OpenShift 문서에 따라 생성한 VDDK 이미지를 지정합니다.
    3
    옵션: vcenter 또는 esxi.
    4
    공급자 Secret CR의 이름을 지정합니다.
  1. 호스트 매니페스트를 생성합니다.

    $ 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
    Copy to Clipboard Toggle word wrap
    1
    VMware vSphere Provider CR의 이름을 지정합니다.
    2
    VMware vSphere 호스트의 Managed Object Reference (moRef)를 지정합니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
    3
    VMware vSphere 마이그레이션 네트워크의 IP 주소를 지정합니다.
  1. NetworkMap 매니페스트를 생성하여 소스 및 대상 네트워크를 매핑합니다.

    $  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> 
    5
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    허용되는 값은 pod,multusignored 입니다. 이 마이그레이션을 위해 이 네트워크에 VM을 연결하지 않도록 무시됨을 사용합니다.
    2
    id 또는 name 매개변수를 사용하여 소스 네트워크를 지정할 수 있습니다. id 는 VMware vSphere 네트워크 Managed Object Reference (moRef)를 지정합니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
    3
    각 추가 OpenShift Virtualization 네트워크에 대한 네트워크 연결 정의를 지정합니다.
    4
    typemultus 인 경우에만 필요합니다. OpenShift Virtualization 네트워크 연결 정의의 네임스페이스를 지정합니다.
    5
    UDN(사용자 정의 네트워크)을 사용하는 경우 해당 네임스페이스는 OpenShift Virtualization에 정의됩니다.
  1. 소스 및 대상 스토리지를 매핑하는 StorageMap 매니페스트를 생성합니다.

    $ 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
    Copy to Clipboard Toggle word wrap
    1
    허용되는 값은 ReadWriteOnceReadWriteMany 입니다.
    2
    VMware vSphere 데이터 저장소 moRef를 지정합니다. 예를 들면 f2737930-b567-451a-9ceb-2887f6207009 입니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
  2. 선택 사항: Plan CR에 지정된 단계에서 VM에서 사용자 정의 코드를 실행하려면 후크 매니페스트를 생성합니다.

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    선택사항: Red Hat OpenShift 서비스 계정. serviceAccount 매개변수를 사용하여 클러스터 리소스를 수정합니다.
    2
    base64로 인코딩된 Ansible Playbook. 플레이북을 지정하는 경우 이미지에 ansible-runner 를 포함해야 합니다.
    참고

    기본 hook-runner 이미지를 사용하거나 사용자 정의 이미지를 지정할 수 있습니다. 사용자 지정 이미지를 지정하는 경우 플레이북을 지정할 필요가 없습니다.

  1. 다음 명령을 입력하여 MTV 마이그레이션에 사용되는 전송 네트워크의 네트워크 연결 정의(NAD)를 생성합니다.

    이 정의를 사용하여 DHCP(Dynamic Host Configuration Protocol) 또는 정적에서 인터페이스의 IP 주소를 구성합니다.

    IP 주소를 구성하면 인터페이스가 구성된 게이트웨이에 도달할 수 있습니다.

    $ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name_of_transfer_network>
      namespace: <namespace>
      annotations:
        forklift.konveyor.io/route: <IP_address>
    Copy to Clipboard Toggle word wrap
  2. 마이그레이션을 위한 계획 매니페스트를 생성합니다.

    $ 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>
      preserveStaticIPs: 
    8
    
      networkNameTemplate: <network_interface_template> 
    9
    
      pvcNameTemplate: <pvc_name_template> 
    10
    
      pvcNameTemplateUseGenerateName: true 
    11
    
      skipGuestConversion: false 
    12
    
      targetAffinity: <affinity rule> 
    13
    
      targetLabels: 
    14
    
        label: <label>
      targetNodeSelector: 
    15
    
        <key>:<value>
      targetNamespace: <target_namespace>
      useCompatibilityMode: true 
    16
    
      volumeNameTemplate: <volume_name_template> 
    17
    
      vms: 
    18
    
        - id: <source_vm1> 
    19
    
        - name: <source_vm2>
          networkNameTemplate: <network_interface_template_for_this_vm> 
    20
    
          pvcNameTemplate: <pvc_name_template_for_this_vm> 
    21
    
          volumeNameTemplate: <volume_name_template_for_this_vm> 
    22
    
          targetName: <target_name> 
    23
    
          hooks: 
    24
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    25
    
              step: <step> 
    26
    
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    Plan CR의 이름을 지정합니다.
    2
    마이그레이션이 웜인지 - true - 또는 cold - false 인지 여부를 지정합니다. 마이그레이션 매니페스트에서 cutover 매개변수 값을 지정하지 않고 웜 마이그레이션 을 지정하면 사전 복사 단계만 실행됩니다.
    3
    계획당 하나의 네트워크 맵과 하나의 스토리지 맵만 지정합니다.
    4
    마이그레이션할 VM이 네트워크에 할당되지 않은 경우에도 네트워크 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
    5
    NetworkMap CR의 이름을 지정합니다.
    6
    마이그레이션할 VM이 디스크 이미지로 할당되지 않은 경우에도 스토리지 매핑을 지정합니다. 이 경우 매핑이 비어 있을 수 있습니다.
    7
    StorageMap CR의 이름을 지정합니다.
    8
    기본적으로 마이그레이션 프로세스 중에 vNIC(가상 네트워크 인터페이스 컨트롤러)가 변경됩니다. 결과적으로 게스트 VM의 인터페이스 이름에 연결된 고정 IP 주소로 구성된 vNIC는 IP 주소가 손실됩니다. 이를 방지하려면 preserveStaticIPstrue 로 설정합니다. MTV는 vNIC 속성이 누락된 모든 VM에 대한 경고 메시지를 발행합니다. 누락된 vNIC 속성을 검색하려면 vNIC 속성이 MTV에 보고되도록 vSphere에서 해당 VM을 실행합니다.
    9
    선택 사항입니다. 계획에서 VM의 네트워크 인터페이스 이름에 대한 템플릿을 지정합니다. 템플릿은 Go 템플릿 구문을 따르며 다음 변수에 액세스할 수 있습니다.
    • .NetworkName: 대상 네트워크가 multus 인 경우 Multus 네트워크 연결 정의의 이름을 추가합니다. 그렇지 않으면 이 변수를 비워 둡니다.
    • .networkNamespace: 대상 네트워크가 multus 인 경우 Multus 네트워크 연결 정의가 있는 네임스페이스를 추가합니다.
    • .networkType: 네트워크 유형을 지정합니다. options: multus 또는 pod.
    • .NetworkIndex: 네트워크 인터페이스(0 기반)의 Sequential 인덱스입니다.

    • "net-{{.NetworkIndex}}"
    • {{if eq .NetworkType "pod"}}pod{{else}}multus-{{.NetworkIndex}}{{end}}"

      변수 이름은 63자를 초과할 수 없습니다. 템플릿으로 제공되는 VM 이름은 대문자를 포함하거나 RFC 1123 규칙을 위반해서는 안 됩니다. 이러한 규칙은 네트워크 이름 네트워크 템플릿, PVC 이름 템플릿, VM 이름 템플릿, 볼륨 이름 템플릿에 적용됩니다.

      중요

      MTV는 여기에 설명된 템플릿에서 생성된 VM 이름을 확인하지 않습니다. 이름에 대문자가 포함되거나 RFC 1123 규칙을 위반하는 VM이 포함된 마이그레이션은 자동으로 실패합니다. 실패를 방지하려면 MTV에서 지원하는 sprig 방법을 사용하는 Go 스크립트를 실행해야 할 수 있습니다. MTV가 지원하는 방법을 설명하는 표는 VMware VM 이름에 대한 MTV 템플릿 유틸리티를 참조하십시오.

    10
    선택 사항입니다. 계획의 PVC(영구 볼륨 클레임) 이름에 대한 템플릿을 지정합니다. 템플릿은 Go 템플릿 구문을 따르며 다음 변수에 액세스할 수 있습니다.
    • .vmname: VM의 이름입니다.
    • .PlanName: 마이그레이션 계획의 이름입니다.
    • .DiskIndex: 디스크의 초기 볼륨 인덱스입니다.
    • .RootDiskIndex: 루트 디스크의 인덱스입니다.
    • .shared : 공유 볼륨의 경우 true: true , 비공유 볼륨에 대해 false 입니다.

    • "{{.VmName}}-disk-{{.DiskIndex}}"
    • "{{if eq .DiskIndex .RootDiskIndex}}root{{else}}data{{end}}-{{.DiskIndex}}"
    • "{{if .Shared}}shared-{{end}}{{.VmName}}-{{.DiskIndex}}"
    11
    선택 사항:
    • true 로 설정하면 MTV는 모든 PVC에 고유한 이름이 있는지 확인하기 위해 임의로 생성된 하나 이상의 영숫자 문자를 PVC 이름에 추가합니다.
    • false 로 설정하면 pvcNameTemplate 을 지정하면 MTV는 PVC 이름에 이러한 문자를 추가하지 않습니다.

      주의

      pvcNameTemplateUseGenerateNamefalse 로 설정하면 생성된 PVC 이름이 고유하지 않을 수 있으며 충돌이 발생할 수 있습니다.

    12
    virt-v2v 툴을 사용하여 마이그레이션하기 전에 VM을 변환하는지 여부를 결정합니다. 이로 인해 VM이 OpenShift Virtualization과 호환됩니다.
    • false 로 설정하면 기본값인 MTV는 virt-v2v 를 사용하여 VM을 마이그레이션합니다.
    • true 로 설정하면 MTV는 먼저 변환하지 않고 VM을 복사하는 원시 복사 모드를 사용하여 VM을 마이그레이션합니다.

      원시 복사 모드는 virt-v2v 로 변환하지 않고 VM을 복사합니다. 이를 통해 더 빠른 변환, 광범위한 운영 체제를 실행하는 VM 마이그레이션, 키 없이도 Linux Unified Key Setup(LUKS)을 사용하여 암호화된 디스크 마이그레이션을 지원할 수 있습니다. 그러나 원시 복사 모드를 사용하여 마이그레이션된 VM은 OpenShift Virtualization에서 제대로 작동하지 않을 수 있습니다. virt-v2v 에 대한 자세한 내용은 MTV가 virt-v2v 툴을 사용하는 방법을 참조하십시오.

    13
    선택 사항: 매우 복잡할 수 있는 유사성 규칙이 이 라벨 뒤에 있는 행에 입력됩니다.

    targetAffinity,targetLabels, targetNodeSelector 는 VM 대상 스케줄링을 지원하는 레이블입니다. MTV를 통해 VM(가상 머신)을 특정 노드 또는 워크로드(Pod)로 마이그레이션하고 VM 전원이 켜진 시기를 예약할 수 있는 기능입니다. 일반적으로 기능에 대한 자세한 내용은 대상 VM 스케줄링 옵션을 참조하십시오. 예제 YAML 스니펫을 포함하여 CLI와 함께 기능을 사용하는 방법에 대한 자세한 내용은 명령줄 인터페이스의 대상 VM 예약을 참조하십시오.

    14
    선택 사항: 식별 및 관리를 위해 마이그레이션된 VM에 조직 또는 운영 레이블을 적용합니다.
    15
    선택 사항: 입력한 키-값 쌍에 대해 정확히 일치하는 노드에 VM이 예약되었는지 확인합니다.
    16
    skipGuestConversiontrue 인 경우 마이그레이션에서 VirtIO 장치 또는 호환성 장치(SATA 버스, E1000E NIC)를 사용하는지 여부를 결정합니다. 즉, 마이그레이션에 원시 복사 모드가 사용되는 경우입니다. virt-v2v 변환이 항상 VirtIO 장치를 사용하므로 skipGuestConversionfalse 인 경우 useCompatibilityMode 설정은 적용되지 않습니다.
    • true 로 설정하면 MTV는 마이그레이션 프로세스에서 호환성 장치(SATA 버스, E1000E NIC)를 사용하여 마이그레이션 후 VM을 부팅할 수 있도록 합니다.
    • false 로 설정하면 MTV는 마이그레이션 프로세스에서 고성능 VirtIO 장치를 사용하고 virt-v2v 는 마이그레이션 후 VM을 부팅할 수 있도록 합니다. 이 옵션을 사용하기 전에 VirtIO 드라이버가 소스 VM에 이미 설치되어 있는지 확인합니다.
    17
    선택 사항: 계획에 있는 VM의 볼륨 인터페이스 이름에 대한 템플릿을 지정합니다. 템플릿은 Go 템플릿 구문을 따르며 다음 변수에 액세스할 수 있습니다.
    • .PVCName: 이 볼륨을 사용하여 VM에 마운트된 PVC의 이름입니다.
    • .VolumeIndex: 볼륨 인터페이스(0 기반)의 중요한 인덱스입니다.

    • "disk-{{.VolumeIndex}}"
    • "pvc-{{.PVCName}}"
    18
    id 또는 name 매개변수를 사용하여 소스 VM을 지정할 수 있습니다. UDN을 사용하는 경우 공급자의 IP 주소가 UDN 서브넷 외부에 있는지 확인합니다. IP 주소가 UDN 서브넷 내에 있으면 마이그레이션이 실패합니다.
    19
    VMware vSphere VM moRef를 지정합니다. moRef를 검색하려면 VMware vSphere moRef 검색을 참조하십시오.
    20
    선택 사항: 특정 VM의 네트워크 인터페이스 이름을 지정합니다. spec:networkNameTemplate 에 설정된 값을 재정의합니다. 호출 9에서 와 같이 변수 및 예제 .
    21
    선택 사항: 특정 VM의 PVC 이름을 지정합니다. spec:pvcNameTemplate 에 설정된 값을 재정의합니다. 호출기 10에서 와 같이 변수 및 예제입니다.
    22
    선택 사항: 특정 VM의 볼륨 이름을 지정합니다. spec:volumeNameTemplate 에 설정된 값을 재정의합니다. 호출 14에서 와 같은 변수 및 예제입니다.
    23
    선택 사항: MTV는 대상 VM의 이름을 자동으로 생성합니다. 이 매개변수를 사용하고 새 이름을 입력하여 이 이름을 재정의할 수 있습니다. 입력한 이름은 고유해야 하며 유효한 Kubernetes 하위 도메인이어야 합니다. 그러지 않으면 마이그레이션이 자동으로 실패합니다.
    24
    선택 사항: VM에 대해 최대 두 개의 후크를 지정합니다. 각 후크는 별도의 마이그레이션 단계에서 실행되어야 합니다.
    25
    Hook CR의 이름을 지정합니다.
    26
    허용되는 값은 마이그레이션 계획이 시작되기 전에 Pre Hook 또는 마이그레이션이 완료된 후 postHook입니다.
    중요

    VMware 7 VM을 CentOS 7.9를 사용하는 OpenShift 4.13+ 플랫폼으로 마이그레이션하면 네트워크 인터페이스 이름이 변경되고 VM의 고정 IP 구성이 더 이상 작동하지 않습니다.

  3. Plan CR을 실행할 마이그레이션 매니페스트를 생성합니다.

    $ 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
    Copy to Clipboard Toggle word wrap
    참고

    컷오버 시간을 지정하는 경우 UTC 시간 오프셋과 함께 ISO 8601 형식을 사용합니다(예: 2024-04-04T01:23:45.678+09:00 ).

중요

forklift-controller 가 지속적으로 마이그레이션 계획을 조정하지 못하고 나중에 HTTP 500 오류를 반환하는 데 문제가 있습니다. 이 문제는 VM(가상 머신)에서만 사용자 권한을 지정할 때 발생합니다.

MTV에서는 VM에서 사용하는 스토리지, 네트워크, 스위치 등을 포함하는 데이터 센터 수준에서 권한을 추가해야 합니다. 그런 다음 사용 권한을 자식 요소에 전파해야 합니다.

이 수준의 권한을 추가하지 않으려면 필요한 VM 호스트의 각 오브젝트에 권한을 수동으로 추가해야 합니다.

2.3.1. VMware vSphere moRef 검색

명령줄에서 MCP(Migration Toolkit for Virtualization)를 사용하여 VMware vSphere 소스 공급자가 있는 VM을 마이그레이션하는 경우 vSphere의 특정 엔티티(데이터 저장소, 네트워크 및 VM)의 관리 오브젝트 참조(moRef)를 알아야 합니다.

인벤토리 서비스에서 하나 이상의 vSphere 엔티티의 moRef를 검색할 수 있습니다. 그런 다음 각 moRef를 다른 엔티티의 moRef를 검색하기 위한 참조로 사용할 수 있습니다.

프로세스

  1. 프로젝트의 경로를 검색합니다.

    oc get route -n openshift-mtv
    Copy to Clipboard Toggle word wrap
  2. 인벤토리 서비스 경로를 검색합니다.

    $ oc get route <inventory_service> -n openshift-mtv
    Copy to Clipboard Toggle word wrap
  3. 액세스 토큰을 검색합니다.

    $ TOKEN=$(oc whoami -t)
    Copy to Clipboard Toggle word wrap
  4. VMware vSphere 공급자의 moRef를 검색합니다.

    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/vsphere -k
    Copy to Clipboard Toggle word wrap
  5. VMware vSphere 소스 공급자의 데이터 저장소를 검색합니다.

    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
    Copy to Clipboard Toggle word wrap

    출력 예

    [
      {
        "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"
      },
     ...
    Copy to Clipboard Toggle word wrap

이 예에서 데이터 저장소 v2v_general_porpuse_ISCSI_DC 의 moRef는 datastore-11 이고 데이터 저장소 f01-h27-640-SSD_2 의 moRef는 datastore-730 입니다.

2.3.2. 공유 디스크를 사용하여 가상 머신 마이그레이션

MTV(Migration Toolkit for Virtualization)를 사용하여 공유 디스크가 있는 VMware VM(가상 머신)을 마이그레이션할 수 있습니다. 이 기능은 콜드 마이그레이션에서만 사용할 수 있으며 공유 부팅 디스크에는 사용할 수 없습니다.

공유 디스크는 두 개 이상의 VM에 연결되어 있으며 다중 쓰기기 옵션을 사용하는 디스크입니다. 이러한 특성으로 인해 공유 디스크가 마이그레이션하기 어렵습니다.

특정 상황에서 VM의 애플리케이션에는 공유 디스크가 필요합니다. 데이터베이스 및 클러스터형 파일 시스템은 공유 디스크의 주요 사용 사례입니다.

MTV 버전 2.7.11 이상에는 다음과 같이 MTV를 공유 디스크를 마이그레이션하거나 마이그레이션 중에 건너뛰도록 MTV에 지시하는 Plan CR(사용자 정의 리소스)에서 migrateSharedDisks 라는 매개변수가 포함되어 있습니다.

  • true 로 설정하면 MTV가 공유 디스크를 마이그레이션합니다. MTV는 virt-v2v 를 사용한 일반 콜드 마이그레이션 흐름을 사용하고 공유 PVC(영구 볼륨 클레임) 레이블을 지정합니다.
  • false 로 설정하면 MTV가 공유 디스크를 건너뜁니다. MTV는 디스크 전송을 위해 KubeVirt Containerized-Data-Importer(CDI)를 사용합니다.

디스크 전송 후 MTV는 이미 공유된 PVC와 이미 마이그레이션된 공유 디스크를 자동으로 찾아서 VM에 연결합니다.

기본적으로 migrateSharedDiskstrue 로 설정됩니다.

공유 디스크를 사용하여 VM을 성공적으로 마이그레이션하려면 다음과 같이 두 가지 Plan CR을 생성합니다.

  • 첫 번째 단계에서는 migrateSharedDiskstrue 로 설정합니다.

    MTV는 다음을 마이그레이션합니다.

    • 모든 공유 디스크입니다.
    • 각 공유 디스크에 대해 연결된 VM 중 하나입니다. 가능한 경우 둘 이상의 VM에 연결된 공유 디스크가 계획에 포함되지 않도록 VM을 선택합니다. 추가 지침은 다음 자료를 참조하십시오.
    • 이 계획에 대해 선택한 VM에 연결된 모든 공유되지 않은 디스크입니다.
  • 두 번째에서는 migrateSharedDisksfalse 로 설정합니다.

    MTV는 다음을 마이그레이션합니다.

    • 기타 모든 VM.
    • 두 번째 Plan CR에 있는 VM의 공유되지 않은 디스크입니다.

MTV가 공유 디스크가 있는 VM을 마이그레이션하면 해당 공유 디스크가 이미 마이그레이션되었는지 확인하지 않습니다. 따라서 두 개의 각각에 VM을 할당하여 각 공유 디스크가 한 번만 마이그레이션되도록 하는 것이 중요합니다.

Plan CR에 VM 및 공유 디스크를 할당하는 방법을 이해하려면 다음 두 가지 숫자를 고려하십시오. 둘 다에서 plan1 에 대해 migrateSharedDiskstrue 로 설정되고 plan2 에서는 false 로 설정됩니다.

첫 번째 그림에서 VM 및 공유 디스크가 올바르게 할당됩니다.

그림 2.1. VM 및 공유 디스크가 올바르게 할당된 예

plan1 은 VM 2 및 4를 공유 디스크 1, 2, 3, VM 2 및 4의 비공유 디스크를 마이그레이션합니다. VM 2 및 4는 각각 한 번 모든 공유 디스크에 연결되므로 이 계획에 포함됩니다.

plan2 는 VM 1 및 3과 비공유 디스크를 마이그레이션합니다. plan2migrateSharedDisksfalse 로 설정되어 있기 때문에 VM 1 및 3에 연결된 공유 디스크를 마이그레이션하지 않습니다.

MTV는 다음과 같이 각 VM 및 해당 디스크를 마이그레이션합니다.

  1. plan1 에서 :

    1. VM 3, 공유 디스크 1 및 2 및 VM 3에 연결된 비공유 디스크입니다.
    2. VM 4, 공유 디스크 3 및 VM 4에 연결된 비공유 디스크입니다.
  2. plan2 에서 다음을 수행합니다.

    1. VM 1 및 비공유 디스크가 연결되어 있습니다.
    2. VM 2 및 비공유 디스크가 연결되어 있습니다.

그 결과 VM 2 및 4가 모든 공유 디스크와 공유되지 않은 모든 디스크가 마이그레이션되지만 한 번만 마이그레이션됩니다. MTV는 공유 디스크를 포함하여 모든 VM을 해당 디스크에 다시 연결할 수 있습니다.

두 번째 그림에서 VM 및 공유 디스크가 올바르게 할당되지 않습니다.

그림 2.2. VM 및 공유 디스크 잘못 할당의 예

이 경우 MTV는 각 VM 및 해당 디스크를 다음과 같이 마이그레이션합니다.

  1. plan1 에서 :

    1. VM 2, 공유 디스크 1 및 2 및 VM 2에 연결된 비공유 디스크입니다.
    2. VM 3, 공유 디스크 2 및 3, VM 3에 연결된 공유되지 않은 디스크입니다.
  2. plan2 에서 다음을 수행합니다.

    1. VM 1 및 비공유 디스크가 연결되어 있습니다.
    2. VM 4 및 연결된 비공유 디스크입니다.

이 마이그레이션은 "성공"이지만 문제가 발생합니다. 공유 디스크 2는 첫 번째 Plan CR에 의해 두 번 마이그레이션됩니다. 절차를 따르는 알려진 문제 섹션에서 설명하는 두 가지 해결 방법 중 하나를 사용하여 이 문제를 해결할 수 있습니다.

프로세스

  1. MTV에서 공유 디스크에 대한 마이그레이션 계획, 연결된 최소 VM 수, 해당 VM의 공유되지 않은 디스크를 생성합니다.
  2. VMware 클러스터에서 공유 디스크에 연결된 모든 VM의 전원을 끕니다.
  3. Red Hat OpenShift 웹 콘솔에서 마이그레이션 > 가상화 계획을 클릭합니다.
  4. 원하는 계획을 선택합니다.

    계획 세부 정보 페이지가 열립니다.

  5. 계획의 YAML 탭을 클릭합니다.
  6. migrateSharedDiskstrue 로 설정되어 있는지 확인합니다.

    migrateSharedDisks 가 true로 설정된 Plan CR의 예

    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
     name: transfer-shared-disks
     namespace: openshift-mtv
    spec:
     map:
       network:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: NetworkMap
         name: vsphere-7gxbs
         namespace: openshift-mtv
         uid: a3c83db3-1cf7-446a-b996-84c618946362
       storage:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: StorageMap
         name: vsphere-mqp7b
         namespace: openshift-mtv
         uid: 20b43d4f-ded4-4798-b836-7c0330d552a0
     migrateSharedDisks: true
     provider:
       destination:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: host
         namespace: openshift-mtv
         uid: abf4509f-1d5f-4ff6-b1f2-18206136922a
       source:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: vsphere
         namespace: openshift-mtv
         uid: be4dc7ab-fedd-460a-acae-a850f6b9543f
     targetNamespace: openshift-mtv
     vms:
       - id: vm-69
         name: vm-1-with-shared-disks
    Copy to Clipboard Toggle word wrap

  7. 첫 번째 계획의 마이그레이션을 시작하고 완료될 때까지 기다립니다.
  8. 두 번째 Plan CR을 생성하여 다른 모든 VM과 공유되지 않은 디스크를 첫 번째 대상 네임스페이스와 동일한 대상 네임스페이스로 마이그레이션합니다.
  9. Red Hat OpenShift 웹 콘솔의 가상화 계획 페이지에서 새 계획을 선택합니다.

    계획 세부 정보 페이지가 열립니다.

  10. 계획의 YAML 탭을 클릭합니다.
  11. migrateSharedDisksfalse 로 설정합니다.

    migrateSharedDisks 가 false로 설정된 Plan CR의 예

    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
     name: skip-shared-disks
     namespace: openshift-mtv
    spec:
     map:
       network:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: NetworkMap
         name: vsphere-7gxbs
         namespace: openshift-mtv
         uid: a3c83db3-1cf7-446a-b996-84c618946362
       storage:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: StorageMap
         name: vsphere-mqp7b
         namespace: openshift-mtv
         uid: 20b43d4f-ded4-4798-b836-7c0330d552a0
     migrateSharedDisks: false
     provider:
       destination:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: host
         namespace: openshift-mtv
         uid: abf4509f-1d5f-4ff6-b1f2-18206136922a
       source:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: vsphere
         namespace: openshift-mtv
         uid: be4dc7ab-fedd-460a-acae-a850f6b9543f
     targetNamespace: openshift-mtv
     vms:
       - id: vm-71
         name: vm-2-with-shared-disks
    Copy to Clipboard Toggle word wrap

  12. 두 번째 계획의 마이그레이션을 시작하고 완료될 때까지 기다립니다.
  13. 모든 공유 디스크가 마이그레이션 전과 동일한 VM에 연결되어 있고 중복되지 않았는지 확인합니다. 문제가 있는 경우 다음 알려진 문제에 대한 설명을 참조하십시오.

2.3.2.1. 알려진 문제: Cyclic 공유 디스크 종속 항목

공유 디스크를 마이그레이션하는 알려진 문제는 순환 공유 디스크 종속 항목이 있는 VM(가상 머신)을 성공적으로 마이그레이션할 수 없다는 것입니다.

  • 설명: migrateSharedDiskstrue 로 설정된 경우 MTV는 공유 디스크가 이미 마이그레이션되었는지 확인하지 않고 계획의 각 VM을 하나씩 마이그레이션하고 여기에 연결된 모든 공유 디스크를 마이그레이션합니다.

하나의 디스크를 공유하는 2개의 VM이 있는 경우 문제가 없습니다. MTV는 공유 디스크를 전송하고 마이그레이션 후 2개의 VM을 공유 디스크에 연결합니다.

그러나 3개 이상의 VM 간에 공유 디스크의 순환 종속성이 있는 경우 MTV는 공유 디스크 중 하나를 복제하거나 생략합니다. 다음 그림은 이 문제의 가장 간단한 버전을 보여줍니다.

그림 2.3. 주기 공유 디스크의 간단한 예

이 경우 동일한 Plan CR에서 VM 및 공유 디스크를 마이그레이션할 수 없습니다. 이 문제는 migrateSharedDisks 및 2 Plan CR을 사용하여 해결할 수 있지만 공유 디스크로 VM을 마이그레이션하는 경우 피해야 하는 기본 문제를 보여줍니다.

2.3.2.2. 공유 디스크 종속 항목이 있는 VM에 대한 해결방법

앞에서 설명한 것처럼 각 공유 디스크가 한 번 마이그레이션되는 2개의 Plan CR을 생성하는 것이 중요합니다. 그러나 마이그레이션으로 인해 공유 디스크가 중복되거나 전송되지 않는 경우 다음 해결 방법 중 하나를 사용할 수 있습니다.

  • 공유 디스크 중 하나 복제
  • 공유 디스크 중 하나를 "제거"
2.3.2.2.1. 공유 디스크 복제

다음 그림에서 VM 2 및 3은 첫 번째 계획의 공유 디스크로 마이그레이션되고 VM 1이 두 번째 계획에서 마이그레이션됩니다. 이렇게 하면 순환 종속성이 제거되지만 이 해결 방법에는 문제가 있습니다. 공유 디스크 3이 중복됩니다. 해결 방법은 중복 PV를 제거하고 VM 1을 다시 마이그레이션하는 것입니다.

그림 2.4. 중복된 공유 디스크

이점: 소스 VM은 영향을 받지 않습니다.

단점: 공유 디스크가 두 번 전송되므로 중복 디스크를 수동으로 삭제하고 마이그레이션 후 Red Hat OpenShift의 공유 디스크 3에 VM 3을 다시 연결해야 합니다.

2.3.3. VMware VM 이름에 대한 MTV 템플릿 유틸리티

MCP(Migration Toolkit for Virtualization)의 템플릿 유틸리티를 사용하여 VM(가상 머신)의 이름을 생성할 수 있습니다. 이러한 방법으로 생성된 이름을 사용하면 OpenShift Virtualization으로 마이그레이션한 후 VM의 문제가 발생할 수 있습니다.

다음 표에서는 MTV와 함께 사용하기 위해 VM 이름을 바꾸는 템플릿에서 사용할 수 있는 문자열 및 수치 함수입니다.

Expand
표 2.1. 문자열 함수
함수설명

낮음

문자열을 소문자로 변환합니다.

{{ lower "TEXT" }} text

upper

문자열을 대문자로 변환합니다.

{{ upper "text" }} TEXT

포함

문자열이 특정 하위 문자열을 포함하는지 확인합니다.Check if a string contains a specific substring.

{{에는 "hello" "lo" }} true가 포함되어 있습니다.

replace

문자열의 발생을 바꿉니다.Replaces occurrences in a string.

{{"I Am Henry VIII" | "{#159}" "-"}}I-Am-Henry-VIII

trim

문자열 끝에서 공백을 제거합니다.Removes whitespace from both ends of a string.

{{ Trim " text "}} text

trimAll

문자열 끝에서 지정된 문자를 제거합니다.Removes specified characters from both ends of a string.

{{ trimAll "$" "$5.00$" }} 5.00

trimSuffix

문자열이 있는 경우 지정된 접미사를 제거합니다.

{{ trimSuffix ".go" "file.go" }} 파일

trimPrefix

문자열이 있는 경우 지정된 접두사를 제거합니다.

{{ trimPrefix "go." "go.file" }} file

title

문자열을 제목 대소문자로 변환합니다.

{{ title "hello world" }} Hello World

인타이틀먼트 없음

제목 대소문자로 문자열을 소문자로 변환합니다.

{{ untitle "Hello World" }}hello world

반복

문자열 n 번 반복합니다.

{{ repeat 3 "abc" }} abcabcabc

substr

index>=a에서 b& lt;index 로 하위 문자열 을 추출합니다.

{{ substr 1 4 "abcdef" }} bcd

NOSPACE

문자열에서 공백을 모두 제거합니다.Removes all whitespace from a string.

{{ NOSPACE "a b" }} abc

trunc

문자열을 지정된 길이로 자릅니다.

{{ trunc 3 "abcdef" }} abc

initials

문자열의 각 단어의 첫 글자를 추출합니다.

{{ initials "John Doe"}} 'JD

hasPrefix

문자열이 지정된 접두사로 시작하는지 확인합니다.

{{ hasPrefix "go" "golang" }} true

hasSuffix

문자열이 지정된 접미사로 종료되는지 확인합니다.

{{ hasSuffix "ing" "coding"}} true

mustRegexReplaceAll

하위 일치 확장과 정규 표현식을 사용하여 일치 항목을 대체합니다.

{{ mustRegexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W" }} -W-xxW-

Expand
표 2.2. 수학적 기능
함수설명

add

뒤에 오는 숫자의 합계입니다.

{{ add 1 2 3 }} 6

add1

1씩 증가합니다.

{{ add1 5 }} 6

sub

첫 번째 숫자에서 두 번째 숫자를 뺀 값입니다.

{{ sub 5 3}} 2

div

정수 분할(폐기자)입니다.

{{ Div 10 3}}3

MOD

modulo 작업.

{{ MOD 10 3}} 1

뒤에 오는 숫자를 곱합니다.

{{Mul 2 3 4}} 24

max

다음 정수 중 가장 큰 정수를 반환합니다.

{{ Max 1 5 3}} 5

다음 정수 중 가장 작은 정수를 반환합니다.

{{ min 1 5 3}} 1

플로어

다음 숫자를 가장 가까운 정수로 반올림합니다.

{{ floor 3.75 }} 3.0

ceil

다음 숫자를 가장 가까운 정수로 반올림합니다.

{{ ceil 3.25 }} 4.0

round

지정된 소수 자리 수에 다음 숫자를 반올림합니다.Round the following number to the specified number of decimal places.

{{ round 3.75159 2}} 3.75

2.3.4. 명령줄 인터페이스에서 마이그레이션 취소

CLI(명령줄 인터페이스)를 사용하여 마이그레이션이 진행되는 동안 전체 마이그레이션 또는 특정 VM(가상 머신) 마이그레이션을 취소할 수 있습니다.

2.3.4.1. 명령줄 인터페이스에서 전체 마이그레이션 취소

CLI(명령줄 인터페이스)를 사용하여 마이그레이션이 진행되는 동안 전체 마이그레이션을 취소할 수 있습니다.

프로세스

  • Migration CR을 삭제합니다.

    $ oc delete migration <migration> -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Migration CR의 이름을 지정합니다.

2.3.4.2. 명령줄 인터페이스에서 특정 VM 마이그레이션 취소

CLI(명령줄 인터페이스)를 사용하여 마이그레이션이 진행되는 동안 특정 VM(가상 머신) 마이그레이션을 취소할 수 있습니다.

프로세스

  1. 다음 예에 따라 특정 VM을 마이그레이션 매니페스트의 spec.cancel 블록에 추가합니다.

    $ 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
    Copy to Clipboard Toggle word wrap
    1
    id 키 또는 name 키를 사용하여 VM을 지정할 수 있습니다.

    id 키의 값은 RHV VM의 관리 오브젝트 참조, VMware VM 또는 VM UUID 입니다.

  2. 다음 예에 따라 Migration CR(사용자 정의 리소스)을 검색하여 나머지 VM의 진행 상황을 모니터링합니다.

    $ oc get migration/<migration> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat