共用方式為


準備適用於 Azure 的 Red Hat 型虛擬機器

適用於:✔️ Linux VM ✔️ 彈性擴展集 ✔️ 統一擴展集

在本文中,您將了解如何準備 Red Hat Enterprise Linux (RHEL) 虛擬機器 (VM) 以在 Azure 中使用。 本文涵蓋的 RHEL 版本為 7.x、8.X.、9.x。 本文涵蓋的準備 Hypervisor 是 Hyper-V、核心型 VM (KVM)、VMware 和 Kickstart。

如需參加 Red Hat 的 Cloud Access 方案之資格需求的詳細資訊,請參閱 Red Hat Cloud Access 網站在 Azure 上執行 RHEL。 如需自動化建置 RHEL 映像的方式,請參閱 Azure Image Builder

注意

請注意已處於生命週期結束 (EOL),且 Red Hat 不再支援的版本。 於 EOL 或之後上傳的映像,將會根據合理的商務義務支援。 如需詳細資訊,請參閱 Red Hat 產品生命週期

必要條件

本節假設您已經從 Red Hat 網站取得 ISO 檔案並將 RHEL 映像安裝至虛擬硬碟 (VHD)。 如需有關如何使用 Hyper-V 管理員來安裝作業系統映像的詳細資訊,請參閱安裝 Hyper-V 角色和設定虛擬機器

RHEL 安裝注意事項

  • Azure 不支援 VHDX 格式。 Azure 只支援固定 VHD。 您可以使用 Hyper-V 管理員將磁碟轉換為 VHD 格式,或者使用 convert-vhd Cmdlet。 如果您使用 VirtualBox,請選取 [固定大小] ,而不是預設在建立磁碟時動態配置的選項。
  • Azure 支援 Gen1 (BIOS 開機) 和 Gen2 (UEFI 開機) VM。
  • 允許的 VHD 大小上限為 1,023 GB。
  • 必須在核心中啟用 vfat 核心模組。
  • 邏輯磁碟區管理員 (LVM) 受到支援,而且可在 OS 磁碟或 Azure VM 中的資料磁碟上使用。 通常建議在 OS 磁碟 (而不是 LVM) 上使用標準磁碟分割。 此練習可避免 LVM 名稱與複製的 VM 發生衝突,特別是為了疑難排解而需要將作業系統磁碟連結至另一部相同 VM 時。 如需詳細資訊,請參閱 LVMRAID 文件。
  • 需要掛接通用磁碟格式 (UDF) 檔案系統的核心支援。。 在 Azure 上初次開機時,連結至客體的 UDF 格式媒體會將佈建組態傳遞至 Linux VM。 Azure Linux 代理程式必須能夠掛接 UDF 檔案系統讀取其組態並佈建 VM。 如果缺少此步驟,佈建會失敗。
  • 請勿在作業系統磁碟上設定交換磁碟分割。 如需詳細資訊,請參閱下列步驟。
  • Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從原始磁碟轉換成 VHD 時,您必須在轉換前先確定原始磁碟大小是 1 MB 的倍數。 如需詳細資訊,請參閱下列步驟。 另請參閱 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. 註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此修改,請在文字編輯器中開啟 /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
    

    注意

    如果 /etc/default/grubENABLE_BLSCFG=false 而不是 ENABLE_BLSCFG=true,依賴開機載入器規格 (BLS) 來管理開機項目和組態的工具 (例如 grubeditgubby) 可能無法在 RHEL 8 和 9 中正常運作。 如果沒有 ENABLE_BLSCFG,預設行為是 false

    這項修改也可確保所有控制台訊息都會傳送到第一個序列埠,並啟用與序列主控台的互動,這有助於 Azure 支援 偵錯問題。 此組態也會關閉網路適配器 (NIC) 的新命名慣例。

    rhgb quiet crashkernel=auto
    

    在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留 crashkernel 選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 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 extras 儲存機制。 啟用額外的存放庫:

    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-initwaagent

      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 代理程式,在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 此動作現在由 cloud-init 處理。 您不得使用 Linux 代理程式格式化資源磁碟來建立分頁檔。 適當修改 /etc/waagent.conf 中的下列參數:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • 如果您想要裝載、格式化和建立交換,您可以:

      • 每次建立 VM 時,將此程式碼當做 cloud-init 組態傳入。 建議您採用此方法。

      • 使用模擬到映像中的 cloud-init 指示詞,每次建立 VM 時都會執行此步驟。

        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