OpenShift Ansible Hooks: VM 마이그레이션을 위한 최고의 무기

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/blog/2024/12/21/openshift-ansible-hooks-ultimate-weapon-vm-migrations

소개

최근 몇 달 동안 가상화 환경에 큰 변화가 나타났습니다. 많은 기업들이 벤더 종속에서 벗어나 오픈소스 기술의 유연성을 활용하고자 기존 가상화 솔루션의 대안을 적극적으로 모색하고 있습니다. 쿠버네티스와 컨테이너화의 부상은 기업들이 단일 플랫폼에서 VM과 컨테이너를 모두 관리할 수 있는 OpenShift Virtualization과 같은 솔루션으로 전환하는 주요 원동력입니다. 하지만 새로운 플랫폼으로의 마이그레이션은 쉽지 않은 작업일 수 있습니다. 

이 게시물에서는 Ansible Hooks가 어떻게 여러분의 무기고에서 최고의 무기가 될 수 있는지, 그리고 가상화를 위한 마이그레이션 툴킷을 통해 VMware vSphere에서 Red Hat OpenShift Virtualization으로 원활하고 효율적으로 마이그레이션할 수 있는지 보여드리겠습니다.

OpenShift 가상화 개요

Red Hat OpenShift의 애드온으로 널리 사용되는 KubeVirt 오픈소스 프로젝트를 기반으로 구축된 OpenShift Virtualization을 사용하면 동일한 플랫폼에서 컨테이너화된 워크로드와 함께 가상 머신(VM)을 실행하고 관리할 수 있습니다. 기존 가상화와 최신 컨테이너화 간의 격차를 해소하여 기존 VM 기반 애플리케이션을 최신 클라우드 네이티브 쿠버네티스 환경으로 가져올 수 있습니다. OpenShift Virtualization을 사용하면 익숙한 쿠버네티스 도구와 개념을 사용하여 단일 지점에서 VM과 컨테이너를 모두 관리할 수 있습니다. 

시간이 지남에 따라 레거시 애플리케이션을 점진적으로 마이크로서비스와 컨테이너로 분할할 수 있으며, VM과 컨테이너 모두에 Kubernetes의 확장성, 복원력 및 자동화 기능을 활용할 수 있습니다.

OpenShift Migration Toolkit for Virtualization

레거시 가상화 플랫폼에서 마이그레이션을 처리하려면 OpenShift Virtualization에 사전 통합된 툴셋인 Migration Toolkit for Virtualization(MTV)을 활용할 수 있습니다. 이 툴셋은 VMware vSphere, Red Hat Virtualization(RHV) 등 다양한 소스 가상화 플랫폼에서 OpenShift Virtualization으로 워크로드를 이전하는 간소화되고 자동화된 방법을 제공합니다.  

MTV는 자동화 기능을 통해 수동 작업을 줄이고, 다운타임을 최소화하며, 원활하고 성공적인 마이그레이션을 보장합니다. 이를 통해 조직은 컨테이너화된 애플리케이션과 함께 OpenShift에서 가상 머신을 실행하는 이점을 빠르게 실현할 수 있습니다. MTV는 단계적 마이그레이션을 지원하여 조직이 중요한 애플리케이션의 우선순위를 정하고, 더 복잡한 워크로드를 처리하기 전에 초기 마이그레이션을 통해 학습할 수 있도록 지원합니다. 

마지막으로 MTV에는 사용자가 유용한 Ansible Automation Playbook을 마이그레이션 프로세스에 포함시켜 모든 종류의 플랫폼이나 장치와 상호 작용하고 대상 OpenShift 환경에서 가상 머신을 작동시킬 수 있도록 하는 사전 및 사후 후크 기능이 포함되어 있습니다.

VMware vSphere에서 OpenShift로 VM 마이그레이션

앞서 설명했듯이 Red Hat은 소스 및 대상 플랫폼과 프로그래밍 방식으로 연동되는 완전한 기능을 갖춘 마이그레이션 툴킷을 개발하여 수동 작업 및 마이그레이션 시간을 단축했습니다. 하지만 가상 머신 마이그레이션은 조직의 내부 프로세스에 맞춰 맞춤 설정해야 하는 복잡한 작업일 수 있으며, 소스 및 대상 환경에 있는 기존 구성과 기능을 그대로 유지해야 합니다.

고객 참여를 통한 실제 마이그레이션 사례

최근 작업 중 하나에서 VMware vSphere를 사용하면서 OpenShift Virtualization의 도입 여부를 평가하기 위해 기능을 테스트하고 싶어 하는 고객과 함께 작업했습니다. 그 결과, 해당 고객은 거의 모든 가상 머신에 운영 체제(OS) 디스크 또는 데이터 디스크 등 서로 다른 종류의 디스크를 사용하고 있음을 알게 되었습니다. VMware vSphere에서는 가상 머신 스냅샷에 포함할 디스크를 선택하기 위해 종속 디스크 와 독립 디스크 , 두 가지 디스크 모드를 정의할 수 있습니다. VMware 플랫폼은 스냅샷에 종속 디스크만 포함하고 독립 디스크는 건너뜁니다.

고객이 이 기능을 사용하는 이유는 OS 디스크의 상태를 저장하기 위해서만 스냅샷 메커니즘을 활용하는 반면, 다른 데이터 디스크의 경우에는 대상 가상 머신에서 직접 실행되는 내부 백업 에이전트를 활용하기 때문입니다. 

이러한 이유로 우리는 다음과 같은 구성으로 가상 머신의 마이그레이션을 테스트했습니다. 즉, 한 운영 체제의 디스크는 종속 모드로, 여러 다른 데이터 디스크는 독립 모드로 설정했습니다.

VMware vSphere에서 첫 번째 마이그레이션을 구성

먼저, Migration Toolkit for Virtualization 대시보드에 VMware vSphere를 공급자로 추가했습니다. 그 후, 내부 도구는 아래 스크린샷에서 볼 수 있듯이 기존 레거시 가상화 플랫폼의 모든 정보를 발견했습니다.

MTV 제공업체를 먼저 살펴보세요

그런 다음 새 마이그레이션 계획을 만들고 대상 가상 머신을 선택한 다음 다음 스크린샷에서 볼 수 있듯이 계획에 이름을 지정했습니다.

MTV 마이그레이션 계획 만들기: 첫 번째 단계

마지막으로 다음 스크린샷에서 볼 수 있듯이 소스 VMware의 네트워크와 스토리지를 대상 OpenShift 가상화 플랫폼에서 사용 가능한 네트워크와 스토리지와 매핑했습니다.

MTV 마이그레이션 계획 만들기: 네트워크 및 스토리지 매핑

VDDK의 숨겨진 버그

불행히도 첫 번째 시도 후 마이그레이션이 실패했습니다! 

오픈 소스 도구인 virt-v2v를 실행하는 마이그레이션 포드가 예기치 않게 중단되어 다음과 같은 이상한 오류가 보고되었습니다.

GetFileName: Cannot create disk spec for disk <name>.
Error occurred when obtaining the file name for <name>.

가상화 마이그레이션 툴킷(MTV)은 VMware vSphere에서 가상 디스크를 전송하기 위해 VMware Virtual Disk Development Kit (VDDK)를 사용합니다. 따라서 VMware 마이그레이션 시 MTV의 필수 조건은 MTV 설명서에 나와 있듯이 VMware SDK를 사용하여 VDDK 컨테이너 이미지를 빌드하는 것입니다 . 

인터넷과 Red Hat Knowledge Base에서 여러 차례 검색한 결과, 디스크 모드가 Independent-Persistent 또는 Independent-Nonpersistent일 경우 VDDK ≥ 7에서 해당 디스크를 열 수 없는 버그가 있음을 발견했습니다. VDDK ≤ 6.7을 활용해 볼 수도 있지만, 제 경우에는 효과가 없었습니다. 다른 방법은 디스크 모드를 일반 종속(dependent) 디스크로 변경하는 것입니다. 자세한 내용은  nbdkit-vddk-plugin 페이지 에서 확인할 수 있습니다 .

안타깝게도 이 문제를 해결하거나 해결할 수 있는 방법은 우회하는 것 외에는 없습니다.

가장 쉬운 방법은 vSphere 인터페이스를 통해 디스크를 독립 디스크에서 종속 디스크로 수동 변경하는 것입니다. 아주 간단한 작업처럼 보이지만, 대규모 마이그레이션 계획에서는 시간이 많이 걸리는 병목 현상이 발생할 수 있습니다. 바로 이 부분에서 Ansible Hooks가 도움을 드립니다!

Ansible Pre Hook 솔루션

Ansible은 구성 관리, 애플리케이션 배포, 오케스트레이션과 같은 IT 작업을 간소화하는 강력한 오픈소스 자동화 도구입니다. 플레이북이라고 하는 간단하고 사람이 읽을 수 있는 YAML 파일로 시스템의 원하는 상태를 정의할 수 있습니다. Ansible은 서버 연결, 필요한 명령 실행, 시스템이 올바르게, 일관되게, 반복적으로 구성되도록 보장합니다. 에이전트리스(Agentless) 방식으로, 대상 머신에 특별한 소프트웨어를 설치할 필요가 없습니다.

이러한 이유로 Ansible은 반복적인 수동 작업, 즉 OpenShift Virtualization으로 마이그레이션할 대상 VM의 디스크를 독립 모드에서 종속 모드로 변경하는 작업에 완벽한 솔루션입니다.

vSphere와 VM의 디스크 설정과 상호 작용하는 데 필요한 모든 모듈이 포함된 community.vmware 컬렉션을 활용하여 완전히 새로운 Ansible Playbook을 구축했습니다.

Ansible Playbook은 세 가지 주요 작업으로 구성됩니다.

  1. 모든 대상 가상 머신의 모든 스냅샷을 삭제합니다.
  2. 다양한 VM에서 모든 디스크 정보를 수집합니다.
  3. 모든 VM에 대해 모든 디스크를 독립에서 종속으로 확인하고 설정합니다.

전체 플레이북은 여기에서 확인할 수 있습니다: playbook-pre-hook.yaml

- name: Reconfigure all disks to persistent
  hosts: localhost
  gather_facts: false
  vars:
    vcenter_hostname: your.host.local
    vcenter_username: administrator@vsphere.local
    vcenter_password: Your_Super_Secret_P4ssw0rd
    vcenter_dc: YOURDCNAME
  tasks:
    - name: Load Plan
      include_vars:
        file: plan.yml
        name: plan
    
    - name: Load Workload
      include_vars:
        file: workload.yml
        name: workload

    - name: Delete all snapshots for virtual machine using name
      community.vmware.vmware_guest_snapshot:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        datacenter: "{{ vcenter_dc }}"
        folder: "/{{ vcenter_dc }}/vm/"
        name: "{{ item.ref.name }}"
        state: remove_all
        validate_certs: false
      delegate_to: localhost
      loop: "{{ plan.vms }}"

    - name: Gather disk info from VM
      community.vmware.vmware_guest_disk_info:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        datacenter: "{{ vcenter_dc }}"
        name: "{{ item.ref.name }}"
        validate_certs: false
      register: disk_info
      loop: "{{ plan.vms }}"

    - name: Filter the dict variable to build a list for the nested loop
      ansible.builtin.set_fact:
        disk_list: "{{ disk_list | default([]) + [{'name':item.item.ref.name,'disks':item.guest_disk_info | dict2items }] }}"
      loop: "{{ disk_info.results }}"

    - name: Set Disk to persistent
      community.vmware.vmware_guest_disk:
        hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        datacenter: "{{ vcenter_dc }}"
        name: "{{ item.0.name }}"
        validate_certs: false
        disk:
          - controller_number: "{{ item.1.value.controller_bus_number }}"
            controller_type: "{{ item.1.value.controller_type }}"
            unit_number: "{{ item.1.value.unit_number }}"
            size_kb: "{{ item.1.value.capacity_in_kb }}"
            disk_mode: "persistent"
      with_subelements:
        - "{{ disk_list }}"
        - disks

Ansible Playbook에서 확인하실 수 있듯이, 초기 작업에서 사용 가능한 모든 변수를 로드하고 있음에도 불구하고 현재 MTV는 Ansible Playbook에서 Providers 자격 증명을 제공하지 않고 있습니다. 이러한 이유로 Request For Enhancement (RFE)를 개설했습니다 . 이 기능에 관심이 있으시면 투표나 댓글을 남겨주세요.

참고: community.vmware 컬렉션을 사용하면서 디스크 모드 변경 사항이 Ansible 모듈의 Python 코드에 아직 구현되지 않았다는 것을 발견했습니다. 따라서 누락된 Python 코드를 추가하고 community.vmware Ansible 컬렉션에 풀 리퀘스트를 생성했습니다 . 오픈 소스 방식, 정말 멋지네요!

OpenShift 가상화 플랫폼에서 플레이북을 실행하려면 업데이트된 community.vmware 컬렉션을 포함하는 사용자 지정 ansible-runner 컨테이너가 필요합니다 .

GitHub에서 ansible-runner 컨테이너 의 소스 코드를 찾을 수 있습니다. 아니면 제가 빌드한 컨테이너 이미지를 가져와서 사용할 수도 있습니다: quay.io/alezzandro/hook-runner-vmware:latest

이제 OpenShift Virtualization의 마이그레이션 계획에 Pre Hook을 추가할 준비가 되었습니다.

아래 스크린샷에 표시된 대로 마이그레이션 계획이 준비되면(녹색 확인 표시를 찾으세요):

MTV 마이그레이션 계획 준비 완료

이제 Ansible Pre Hook을 정의할 준비가 되었습니다.

  1. 먼저 사용자 정의 ansible-runner 컨테이너 이미지 의 위치를 ​​정의해야 합니다 .
  2. 그런 다음 Ansible Playbook을 MTV 인터페이스에 복사하여 붙여넣어야 합니다.

다음 스크린샷에서 예를 확인할 수 있습니다.

가상화를 위한 마이그레이션 툴킷: Ansible 사전 후크

이 과정은 매우 간단하고 직관적이지만 MTV Hooks에 대해 더 자세히 알고 싶다면 여기에서 이를 설명하는 좋은 기사를 찾을 수 있습니다: 가상화를 위한 마이그레이션 툴킷에서 마이그레이션 후크 사용하기 .

Ansible Pre-Hook을 정의하면 마이그레이션 계획을 다시 시작할 준비가 됩니다. 이번에는 마이그레이션이 성공할 것이고 대상 가상 머신이 OpenShift Virtualization에서 실행될 것입니다!

결론

Ansible Hooks는 가상화를 위한 마이그레이션 툴킷을 통해 VMware vSphere에서 Red Hat OpenShift Virtualization으로 원활하고 효율적인 마이그레이션을 지원할 수 있습니다.

일반적으로 마이그레이션 전후 작업에 Ansible을 활용하면 마이그레이션 속도를 높이고 프로세스 중에 업데이트 또는 구성해야 하는 모든 외부 플랫폼이나 장치를 제어할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like