準備適用於 Azure 的 Ubuntu 虛擬機器
適用於:✔️ Linux VM ✔️ 彈性擴展集
Ubuntu 現在會在 Ubuntu 雲端映像網頁發佈官方 Azure 虛擬硬碟 (VHD) 供下載。 如果您需要為 Azure 建置自己的特製化 Ubuntu 映像,而不是使用後續的手動程序,請從這些已知可運作的 VHD 開始,並視需要加以自訂。 您一律可以在下列位置找到最新的映像版本:
- Ubuntu 18.04/Bionic:bionic-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 20.04/Focal:focal-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 22.04/Jammy: jammy-server-cloudimg-amd64-azure.vhd.zip
必要條件
本文假設您已將 Ubuntu Linux 作業系統 (OS) 安裝到 VHD。 有多項工具可用來建立 .vhd 檔案。 一個範例是虛擬化解決方案,例如 Hyper-V。 如需指示,請參閱安裝 Hyper-V 角色及設定虛擬機器 (VM)。
Ubuntu 安裝注意事項
- 如需準備 Linux for Azure 的更多提示,請參閱一般 Linux 安裝注意事項。
- Azure 不支援 VHDX 格式,只支援固定 VHD。 您可以使用 Hyper-V 管理員或
Convert-VHD
Cmdlet,將磁碟轉換為 VHD 格式。 - 安裝 Linux 系統時,建議您使用標準磁碟分割而不是邏輯磁碟區管理員 (LVM),其經常是許多安裝的預設設定。 這些標準磁碟分割可避免 LVM 與複製之虛擬機器的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至其他虛擬機器時。 您也可以在資料磁碟上使用 LVM 或 RAID。
- 請勿在作業系統磁碟上設定交換磁碟分割或交換檔。 您可以設定
cloud-init
佈建代理程式,以在暫存資源磁碟上建立交換檔案或交換磁碟分割。 如需此程序的詳細資訊,請參閱下列步驟。 - Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從原始磁碟轉換成 VHD 時,您必須在轉換前先確保原始磁碟大小是 1 MB 的倍數。 如需詳細資訊,請參閱 Linux 安裝注意事項。
手動步驟
注意
在您嘗試為 Azure 建立自己的自訂 Ubuntu 映像之前,請考慮改用來自 Ubuntu 雲端映像網頁預先建置且經測試的映像。
在 Hyper-V 管理員的中間窗格中,選取 VM。
選取 [連線],以開啟 VM 的視窗。
取代映像中的目前存放庫,以使用 Ubuntu 的 Azure 存放庫。
在編輯
/etc/apt/sources.list
之前,建議您先進行備份:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
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 sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list sudo apt-get update
Ubuntu Azure 映像現在使用 Azure 量身打造的核心。 將作業系統更新為最新的 Azure 量身訂做核心,並安裝 Azure Linux 工具 (包括 Hyper-V 相依性):
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
修改 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 技術支援團隊進行問題偵錯程序。確定您已安裝 SSH 伺服器,並已設定為在開機時啟動。 此設定通常是預設值。
安裝
cloud-init
(佈建代理程式),以及 Azure Linux 代理程式 (客體延伸模組處理常式)。Cloud-init
會使用netplan
來設定系統網路設定 (在佈建期間及每個後續開機) 和使用gdisk
來分割資源磁碟。sudo apt update sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent
注意
若已安裝
NetworkManager
和NetworkManager-gnome
套件,則walinuxagent
套件可能會將它們移除。移除
cloud-init
預設設定和可能與 Azure 上的cloud-init
佈建衝突的剩餘netplan
成品: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
設定
cloud-init
以使用 Azure 資料來源佈建系統:cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg datasource_list: [ Azure ] EOF cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg 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 <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg reporting: logging: type: log telemetry: type: hyperv EOF
設定 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
cat <<EOF | sudo tee -a /etc/waagent.conf # 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
清除
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
取消佈建 VM,並準備它以便在 Azure 上佈建。
注意
sudo waagent -force -deprovision+user
命令會藉由嘗試清理系統並讓其適合重新佈建,將映像一般化。+user
選項會刪除最後佈建的使用者帳戶和相關聯的資料。sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history
警告
使用上述命令取消佈建無法保證映像已經過清理,不包含所有敏感性資訊且適合轉散發。
在 Hyper-V 管理員中,選取 [動作]>[關閉]。
Azure 僅接受固定大小的 VHD。 如果 VM 的作業系統磁碟不是固定大小的 VHD,請使用
Convert-VHD
PowerShell Cmdlet 並指定-VHDType Fixed
選項。 如需詳細資訊,請參閱位於 Convert-VHD 的Convert-VHD
文件。若要在 Azure 上帶入第 2 代 VM,請遵循下列步驟:
將目錄切換至
boot EFI
目錄:cd /boot/efi/EFI
將
ubuntu
目錄複製到名為boot
的新目錄:sudo cp -r ubuntu/ boot
將目錄切換至新建立的開機目錄:
cd boot
重新命名
shimx64.efi
檔案:sudo mv shimx64.efi bootx64.efi
將
grub.cfg
檔案重新命名為bootx64.cfg
:sudo mv grub.cfg bootx64.cfg
相關內容
您現在可以開始使用您的 Ubuntu Linux VHD,以在 Azure 中建立新的 VM。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM。