準備適用於 Azure 的 Ubuntu 虛擬機器

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

Ubuntu 現在發佈官方 Azure VHD 提供下載,位於:https://cloud-images.ubuntu.com/。 如果您需要為 Azure 建置自己的特製化 Ubuntu 映射,而不是使用下列手動程式,建議您從這些已知的工作 VHD 開始,並視需要自訂。 最新的映像版本一律可以在下列位置找到︰

必要條件

本文假設您已經將 Ubuntu Linux 作業系統安裝到虛擬硬碟。 有多個工具可用來建立 .vhd 檔案,例如,像是 Hyper-V 的虛擬化解決方案。 如需指示,請參閱 安裝 Hyper-V 角色及設定虛擬機器

Ubuntu 安裝注意事項

  • 如需有關準備 Azure 之 Linux 的更多秘訣,另請參閱 一般 Linux 安裝注意事項
  • Azure 中不支援 VHDX 格式,只有 固定的 VHD。 您可以使用 Hyper-V 管理員或 Convert-VHD Cmdlet,將磁碟轉換為 VHD 格式。
  • 安裝 Linux 系統時,建議您使用標準磁碟分割,而不是 LVM (許多安裝) 的預設值。 這可避免 LVM 與複製之虛擬機器的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至其他虛擬機器時。 如果願意,您可以在資料磁碟上使用 LVMRAID
  • 請勿在 OS 磁片上設定交換磁碟分割或交換檔。 cloud-init 佈建代理程式可以經過設定以在暫存資源磁碟上建立交換檔案或交換分割區。 您可以在以下步驟中找到與此有關的詳細資訊。
  • Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從未經處理的磁碟轉換成 VHD 時,您必須確定未經處理的磁碟大小在轉換前是 1 MB 的倍數。 如需詳細資訊,請參閱 Linux 安裝注意事項

手動步驟

注意

在嘗試為 Azure 建立您的自訂 Ubuntu 映像之前,請考慮改為使用來自 https://cloud-images.ubuntu.com/ 的已預先建置並已測試的映像。

  1. 在 Hyper-V 管理員的中間窗格中,選取虛擬機器。

  2. 按一下 [連接] ,以開啟虛擬機器的視窗。

  3. 取代映像中的目前存放庫,以使用 Ubuntu 的 Azure 存放庫。

    編輯 /etc/apt/sources.list 之前,建議您先進行備份:

     sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    

    Ubuntu 18.04 和 Ubuntu 20.04:

     sudo sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/azure\.archive\.ubuntu\.com\/ubuntu\//g' /etc/apt/sources.list
     sudo sed -i 's/http:\/\/[a-z][a-z]\.archive\.ubuntu\.com\/ubuntu\//http:\/\/azure\.archive\.ubuntu\.com\/ubuntu\//g' /etc/apt/sources.list
     sudo apt-get update
    
  4. Ubuntu Azure 映像現在使用 Azure 量身打造的核心。 藉由執行下列命令,將作業系統更新為最新的 Azure 量身打造的核心,並安裝 Azure Linux 工具 (包括 Hyper-V 相依性):

    • Ubuntu 18.04 和 Ubuntu 20.04:
     sudo apt update
     sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure
    
    • 建議使用:
    sudo apt full-upgrade
    sudo reboot
    
  5. 修改 Grub 的核心開機程式行,使其額外包含用於 Azure 的核心參數。 若要這樣做,請在文字編輯器中開啟 /etc/default/grub,找到名為 GRUB_CMDLINE_LINUX_DEFAULT 的變數 (或視需要加入它),然後進行編輯以使其包含以下參數:

     GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
    

    儲存並關閉此檔案,然後執行 sudo update-grub。 這將確保所有主控台訊息都會傳送給第一個序列埠,有助於 Azure 技術支援團隊進行問題偵錯程序。

  6. 確定您已安裝 SSH 伺服器,並已設定為在開機時啟動。 這通常是預設值。

  7. 安裝 cloud-init (佈建代理程式),以及 Azure Linux 代理程式 (客體擴充功能處理常式)。 cloud-init 會使用 netplan 來設定系統網路設定 (在佈建期間及每個後續開機) 和使用 gdisk 來分割資源磁碟。

     sudo apt update
     sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent
    

    注意

    若已安裝 NetworkManagerNetworkManager-gnome 套件,則 walinuxagent 套件可能會將它們移除。

  8. 移除 cloud-init 預設設定和剩餘的 netplan 成品 (其可能與 Azure 上的 cloud-init 佈建衝突):

     sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
     sudo rm -f /etc/cloud/ds-identify.cfg
     sudo rm -f /etc/netplan/*.yaml
    
  9. 設定 cloud-init 以使用 Azure 資料來源佈建系統:

     sudo cat > /etc/cloud/cloud.cfg.d/90_dpkg.cfg << EOF
     datasource_list: [ Azure ]
    EOF
    
     cat > /etc/cloud/cloud.cfg.d/90-azure.cfg << EOF
    system_info:
       package_mirrors:
         - arches: [i386, amd64]
           failsafe:
             primary: http://archive.ubuntu.com/ubuntu
             security: http://security.ubuntu.com/ubuntu
           search:
             primary:
               - http://azure.archive.ubuntu.com/ubuntu/
             security: []
         - arches: [armhf, armel, default]
           failsafe:
             primary: http://ports.ubuntu.com/ubuntu-ports
             security: http://ports.ubuntu.com/ubuntu-ports
    EOF
    
     cat > /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg << EOF
    reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  10. 將 Azure Linux 代理程式設定為依賴於 cloud-init 來執行佈建。 如需這些選項的詳細資訊,請查看 WALinuxAgent 專案

    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/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
    
    sudo cat >> /etc/waagent.conf << EOF
    # For Azure Linux agent version >= 2.2.45, this is the option to configure,
    # enable, or disable the provisioning behavior of the Linux agent.
    # Accepted values are auto (default), waagent, cloud-init, or disabled.
    # A value of auto means that the agent will rely on cloud-init to handle
    # provisioning if it is installed and enabled, which in this case it will.
    Provisioning.Agent=auto
    EOF
    
  11. 清除 cloud-init 和 Azure Linux 代理程式執行時間成品和記錄:

     sudo cloud-init clean --logs --seed
     sudo rm -rf /var/lib/cloud/
     sudo systemctl stop walinuxagent.service
     sudo rm -rf /var/lib/waagent/
     sudo rm -f /var/log/waagent.log
    
  12. 執行下列命令,以取消佈建虛擬機器,並準備將它佈建於 Azure 上:

    注意

    sudo waagent -force -deprovision+user 命令會藉由嘗試清理系統並讓其適合重新佈建,將映像一般化。 +user 選項會刪除最後佈建的使用者帳戶和相關聯的資料。

    警告

    使用上述命令取消佈建無法保證映像檔已經過清理,不包含所有敏感性資訊都且適合轉散發。

     sudo waagent -force -deprovision+user
     sudo rm -f ~/.bash_history
     sudo export HISTSIZE=0
    
  13. 在 Hyper-V 管理員中,依序按一下 [動作] > [關閉]。

  14. Azure 僅接受固定大小的 VHD。 如果 VM 的 OS 磁片不是固定大小的 VHD,請使用 Convert-VHD PowerShell Cmdlet 並指定 -VHDType Fixed 選項。 請查看 Convert-VHD 的文件,這裡:Convert-VHD

  15. 若要在 Azure 上帶入第 2 代 VM,請遵循下列步驟:

    1. 將目錄切換至開機 EFI 目錄:

       sudo cd /boot/efi/EFI
      
    2. 將 ubuntu 目錄複製到名為 boot 的新目錄:

       sudo cp -r ubuntu/ boot
      
    3. 將目錄切換至新建立的開機目錄:

       sudo cd boot
      
    4. 重新命名 shimx64.efi 檔案:

       sudo mv shimx64.efi bootx64.efi
      
    5. 將 grub.cfg 檔案重新命名為 bootx64.cfg:

       sudo mv grub.cfg bootx64.cfg 
      

下一步

您現在可以開始使用您的 Ubuntu Linux 虛擬硬碟在 Azure 建立新的虛擬機器。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM