适用于:✔️ Linux 虚拟机 ✔️ 灵活规模集
Ubuntu 提供官方的 Azure 就绪云映像(cloudimg),其中包括在 Azure 上成功预配所需的所有组件,例如 cloud-init、Azure 优化的内核、Azure 来宾代理兼容性以及虚拟化环境的性能优化默认值。 这些映像是创建自定义 VHD 时建议的起点,因为它们符合Azure VM 预配要求并减少所需的手动配置步骤。
Ubuntu以多种格式发布这些映像,包括https://cloud-images.ubuntu.com/网站上的即用型的 Azure 虚拟硬盘(VHD)。 如果需要为Azure生成专用的 Ubuntu 映像,可以从这些经过验证的 VHD 生成开始,并根据需要对其进行自定义。 可在以下位置获取最新的映像版本:
- Ubuntu 20.04/Focal:focal-server-cloudimg-amd64-azure.vhd.tar.gz
- Ubuntu 22.04/Jammy:jammy-server-cloudimg-amd64-azure.vhd.tar.gz
- Ubuntu 24.04/Noble:noble-server-cloudimg-amd64-azure.vhd.tar.gz
先决条件
本文假定已将 Ubuntu Linux 操作系统 (OS) 安装到 VHD。 可使用多种工具创建 .vhd 文件。 一个例子是虚拟化解决方案(如 Hyper-V)。 有关说明,请参阅安装 Hyper-V 角色并配置虚拟机 (VM)。
Ubuntu 安装说明
- 有关为Azure准备 Linux 的更多提示,请参阅 General Linux 安装说明。
- Azure不支持 VHDX 格式,仅支持 fixed VHD。 可使用 Hyper-V 管理器或
Convert-VHDcmdlet 将磁盘转换为 VHD 格式。 - 在安装 Linux 系统时,建议使用标准分区而不是逻辑卷管理器 (LVM)(通常是许多安装的默认设置)。 这些标准分区可避免 LVM 名称与克隆 VM 发生冲突,特别是在 OS 磁盘需要连接到另一台 VM 以进行故障排除的情况下。 LVM 或 RAID也可用于数据磁盘。
- 请勿在 OS 磁盘上配置交换分区或交换文件。 可以将
cloud-init预配代理配置为在临时资源磁盘上创建交换文件或交换分区。 有关此过程的详细信息,请参阅 为 Azure Linux VM 创建 SWAP 分区。 - Azure上的所有 VHD 必须具有与 1 MB 对齐的虚拟大小。 从原始磁盘转换为 VHD 时,必须确保在转换前的原始磁盘大小是 1 MB 的倍数。 有关详细信息,请参阅 Linux 安装说明。
可以将预生成的 Ubuntu 映像直接上传到Azure,并使用生成的 VHD 创建新的virtual machines。 如果这是你第一次上传 .vhd 文件,请参阅 从自定义磁盘创建 Linux VM。
手动步骤
注意事项
在尝试为 Azure 创建自己的自定义 Ubuntu 映像之前,请考虑改用 Ubuntu 云映像网页中的预生成和测试映像。
如果使用 Windows 提取预生成的映像,请使用 Windows WSL 并运行以下命令
sudo tar --sparse -xvzf <image name>-azure.vhd.tar.gz
在 Hyper-V 管理器的中心窗格中,选择虚拟机。
选择“连接”以打开虚拟机的窗口。
替换映像中的当前存储库以使用 Ubuntu 的Azure存储库。
在编辑
/etc/apt/sources.list/etc/apt/sources.list.d/ubuntu.sources之前,建议进行备份:对于 Ubuntu 22.04 及更早版本
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak对于 Ubuntu 24.04 及更高版本
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak对于 Ubuntu 22.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 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 update对于 Ubuntu 24.04 及更高版本
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources sudo apt updateUbuntu Azure映像使用Azure定制内核Azure定制内核。 将 OS 更新到最新的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注意事项
如果安装了
walinuxagent和NetworkManager包,则NetworkManager-gnome包会将其移除。删除
cloud-init默认配置和剩余netplan工件,这些可能与 Azure 上的cloud-init配置冲突:适用于 Ubuntu 22.04 及更早版本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对于 Ubuntu 24.04 及更高版本
sudo rm -f /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使用Azure数据源配置
cloud-init以预配系统:sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg <<EOF datasource_list: [ Azure ] EOF sudo tee /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 sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg <<EOF reporting: logging: type: log telemetry: type: hyperv EOF将 Azure Linux 代理配置为依赖于
cloud-init来执行预配。 有关这些选项的详细信息,请参阅 WALinuxAgent project。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.confsudo tee -a /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清理
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 的 OS 磁盘不是固定大小的 VHD,请使用
Convert-VHDPowerShell cmdlet 并指定-VHDType Fixed选项。 有关更多信息,请查看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。