다음을 통해 공유


Azure용 RedHat 기반 가상 머신 준비

적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합 ✔️ 균일한 확장 집합

이 문서에서는 Azure에서 사용할 RHEL(Red Hat Enterprise Linux) VM(가상 머신)을 준비하는 방법을 알아봅니다. 이 문서에서 다루는 RHEL 버전은 7.x, 8.X., 9.x입니다. 이 문서에서 다루는 준비에 대한 하이퍼바이저는 Hyper-V, KVM(커널 기반 VM), VMware 및 Kickstart입니다.

Red Hat 클라우드 액세스 프로그램에 참여하기 위한 자격 요구 사항에 대한 자세한 내용은 Red Hat Cloud Access 웹 사이트Azure에서 실행 중인 RHEL을 참조하세요. RHEL 이미지 빌드를 자동화하는 방법은 Azure Image Builder를 참조하세요.

참고 항목

EOL(수명 종료)되어 Red Hat에서 더 이상 지원하지 않는 버전에 유의해야 합니다. EOL 이후의 업로드된 이미지는 합리적인 비즈니스 활동에 따라 지원됩니다. 자세한 내용은 Red Hat 제품 수명 주기를 참조하세요.

필수 조건

이 섹션은 RedHat 웹 사이트에서 ISO 파일을 확보했으며 VHD(가상 하드 디스크)에 RHEL 이미지를 이미 설치한 것으로 가정합니다. Hyper-V 관리자를 사용하여 운영 체제 이미지를 설치하는 방법에 대한 자세한 내용은 Hyper-V 역할 설치 및 가상 머신 구성을 참조하세요.

RHEL 설치 참고 사항

  • Azure는 VHDX 형식을 지원하지 않습니다. Azure는 고정 VHD만 지원합니다. Hyper-V 관리자를 사용하여 디스크를 VHD 형식으로 변환하거나 convert-vhd cmdlet을 사용할 수 있습니다. VirtualBox를 사용하는 경우 디스크를 만들 때 기본 동적 할다 옵션과 달리 고정 크기를 선택합니다.
  • Azure는 Gen1(BIOS 부팅) 및 Gen2(UEFI 부팅) VM을 지원합니다.
  • VHD에 허용되는 최대 크기는 1,023GB입니다.
  • 커널에서 vfat 커널 모듈을 사용하도록 설정해야 합니다.
  • LVM(논리 볼륨 관리자)이 지원되며 Azure VM의 OS 디스크 또는 데이터 디스크에서 사용할 수 있습니다. 일반적으로 LVM보다는 OS 디스크의 표준 파티션을 사용하는 것이 좋습니다. 이렇게 하면 특히 문제 해결을 위해 운영 체제 디스크를 다른 동일한 VM에 연결해야 하는 경우 복제된 VM과 LVM 이름이 충돌하는 것을 방지할 수 있습니다. 자세한 내용은 LVMRAID 설명서를 참조하세요.
  • UDF(범용 디스크 형식) 파일 시스템을 탑재하기 위한 커널 지원이 필요합니다. Azure에서 처음 부팅할 때 게스트에 연결된 UDF 형식의 미디어는 프로비전 구성을 Linux VM에 전달합니다. Azure Linux 에이전트는 해당 구성을 읽고 VM을 프로비전하기 위해 UDF 파일 시스템을 탑재할 수 있어야 합니다. 이 단계가 없으면 프로비전이 실패합니다.
  • 운영 체제 디스크에서는 스왑 파티션을 구성하지 마세요. 자세한 내용은 다음 단계를 참조하세요.
  • Azure의 모든 VHD에는 1MB로 정렬된 가상 크기가 있어야 합니다. 원시 디스크를 VHD로 변환하는 경우 변환하기 전에 원시 디스크 크기가 1MB의 배수인지 확인해야 합니다. 자세한 내용은 다음 단계를 참조하세요. Linux 설치 참고 사항도 참조하세요.

참고 항목

Cloud-init >= 21.2에서는 udf가 필요하지 않습니다. 그러나 UDF 모듈을 사용하도록 설정하지 않으면 프로비전 중에 CD-ROM이 탑재되지 않아 사용자 지정 데이터가 적용되지 않습니다. 해결 방법은 사용자 데이터를 사용하여 사용자 지정 데이터를 적용하는 것입니다. 사용자 지정 데이터와 달리 사용자 데이터는 암호화되지 않습니다. 자세한 내용은 사용자 데이터 서식을 참조하세요.

  1. Hyper-V 관리자에서 VM을 선택합니다.

  2. 연결을 선택하여 VM에 대한 콘솔 창을 엽니다.

  3. 파일 /etc/sysconfig/network를 만들거나 편집하고 다음 텍스트를 추가합니다.

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. 파일 /etc/sysconfig/network-scripts/ifcfg-eth0를 만들거나 편집하고 다음 텍스트를 추가합니다.

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    참고 항목

    가속화된 네트워킹을 사용하는 경우 만들어진 가상 인터페이스는 udev 규칙을 사용하여 관리되지 않도록 구성되어야 합니다. 이 작업은 NetworkManager가 기본 인터페이스와 동일한 IP를 할당하는 것을 방지합니다.

    이를 적용하려면 다음을 수행합니다.

    sudo tee <<EOF /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules > /dev/null
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. 부팅 시 네트워크 서비스가 시작되는지 확인합니다.

    sudo systemctl enable network
    
  6. RHEL 리포지토리에서 패키지 설치를 사용하도록 설정하려면 Red Hat 구독을 등록합니다.

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Azure용 커널 매개 변수를 추가로 포함하려면 grub 구성에서 커널 부팅 줄을 수정합니다. 이렇게 수정하려면 텍스트 편집기에서 /etc/default/grub를 열고 GRUB_CMDLINE_LINUX 매개 변수를 편집합니다. 예시:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    ENABLE_BLSCFG=true
    

    참고 항목

    부팅 항목 및 구성을 관리하기 위해 BLS(부팅 로더 사양)를 사용하는 grubedit 또는 gubby와 같은 ENABLE_BLSCFG=true 도구 대신 ENABLE_BLSCFG=false/etc/default/grub에 있는 경우 RHEL 8 및 9에서 올바르게 작동하지 않을 수 있습니다. ENABLE_BLSCFG가 없으면 기본 동작은 false입니다.

    또한 이 수정을 통해 모든 콘솔 메시지가 첫 번째 직렬 포트로 전송되고 직렬 콘솔과의 상호 작용이 가능하므로 디버깅 문제를 Azure 지원 수 있습니다. 또한 이 구성은 NIC(네트워크 인터페이스 카드)에 대한 새 명명 규칙을 해제합니다.

    rhgb quiet crashkernel=auto
    

    모든 로그를 직렬 포트로 보내려는 클라우드 환경에서는 그래픽 및 자동 부팅 기능이 유용하지 않습니다. 원하는 경우 crashkernel 옵션을 구성된 상태로 둘 수 있습니다. 이 매개 변수는 VM에서 사용 가능한 메모리 양을 128MB 이상 줄입니다. 이는 더 작은 VM 크기에 문제가 될 수 있습니다.

  8. /etc/default/grub 편집을 마친 후 다음 명령을 실행하여 grub 구성을 다시 빌드합니다.

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    참고 항목

    UEFI 지원 VM을 업로드하는 경우 grub을 업데이트하는 명령은 grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg입니다.

  9. SSH 서버가 설치되어 부팅 시 시작되도록 구성되어 있는지 확인합니다. 이것이 일반적으로 기본값입니다. 다음 줄을 포함하도록 /etc/ssh/sshd_config 을 수정합니다.

    ClientAliveInterval 180
    
  10. WALinuxAgent 패키지 WALinuxAgent-<version>은 Red Hat 기타 리포지토리에 푸시되었습니다. 추가 리포지토리를 사용하도록 설정합니다.

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Azure Linux 에이전트, cloud-init 및 기타 필요한 유틸리티를 설치합니다.

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. 프로비전을 처리하도록 cloud-init를 구성합니다.

    1. cloud-init에 대해 waagent를 구성합니다.

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      

      참고 항목

      특정 VM을 마이그레이션하고 범용 이미지를 만들지 않으려면 /etc/waagent.conf 구성에서 Provisioning.Agent=disabled를 설정합니다.

    2. 탑재 구성

      sudo echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
    3. Azure 데이터 원본 구성

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
          Azure:
              apply_network_config: False
      EOF
      
    4. 구성된 경우 기존 스왑 파일을 제거합니다.

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. cloud-init 로깅 구성:

      sudo echo "Add console log file"
      sudo tee <<EOF /etc/cloud/cloud.cfg.d/05_logging.cfg > /dev/null
      
      # This tells cloud-init to redirect its stdout and stderr to
      # 'tee -a /var/log/cloud-init-output.log' so the user can see output
      # there without needing to look on the console.
      output: {all: '| tee -a /var/log/cloud-init-output.log'}
      EOF
      
  13. 스왑 구성:

    • 운영 체제 디스크에 스왑 공간을 만들지 마세요.

      이전에는 Azure Linux 에이전트를 사용하여 Azure에서 VM을 프로비전한 후 VM에 연결된 로컬 리소스 디스크를 사용하여 스왑 공간을 자동으로 구성했습니다. 이 작업은 이제 cloud-init에 의해 처리됩니다. 스왑 파일을 만들기 위해 리소스 디스크를 포맷하는 데 Linux 에이전트를 사용해서는 안 됩니다. /etc/waagent.conf에서 다음 매개 변수를 적절하게 수정합니다.

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • 교환을 탑재, 포맷 및 만들려면 다음 중 하나를 수행합니다.

      • 사용자 지정 데이터를 통해 VM을 만들 때마다 이 코드를 cloud-init 구성으로 전달합니다. 이 방법을 권장합니다.

      • VM이 만들어질 때마다 이 단계를 수행하는 이미지에 포함된 cloud-init 지시문을 사용합니다.

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF    
        #cloud-config
        # Generated by Azure cloud image build
        disk_setup:
          ephemeral0:
            table_type: mbr
            layout: [66, [33, 82]]
            overwrite: True
        fs_setup:
          - device: ephemeral0.1
            filesystem: ext4
          - device: ephemeral0.2
            filesystem: swap
        mounts:
          - ["ephemeral0.1", "/mnt/resource"]
          - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
        EOF
        
  14. 프로비저닝 문제 해결을 지원하도록 원격 분석을 구성 cloud-init 합니다.

    sudo tee >> /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg << EOF
    # This config enables cloud-init to report provisioning telemetry to aid with troubleshooting
    Reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  15. 구독에 대한 등록을 해제하려면 다음 명령을 실행합니다.

    
    sudo subscription-manager unregister
    
  16. VM을 프로비전을 해제하고 Azure에서 프로비전할 수 있도록 준비합니다.

    주의

    특정 VM을 마이그레이션하고 범용 이미지를 만들지 않으려면 프로비전 해제 단계를 건너뜁니다. waagent -force -deprovision+user 명령을 실행하면 원본 컴퓨터를 사용할 수 없게 됩니다. 이 단계는 일반화된 이미지를 만들기 위한 것입니다.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean --logs --seed
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  17. Hyper-V 관리자에서 작업>종료를 선택합니다. 이제 Linux VHD를 Azure에 업로드할 수 있습니다.