为 Azure 准备 Ubuntu 虚拟机
适用于:✔️ Linux VM ✔️ 灵活规模集
现在,Ubuntu 发布了官方 Azure 虚拟硬盘 (VHD),可在 Ubuntu 云映像网页下载。 如果需要为 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/Jammy:jammy-server-cloudimg-amd64-azure.vhd.tar.gz
先决条件
本文假定已将 Ubuntu Linux 操作系统 (OS) 安装到 VHD。 可使用多种工具创建 .vhd 文件。 一个例子是虚拟化解决方案(如 Hyper-V)。 有关说明,请参阅安装 Hyper-V 角色并配置虚拟机 (VM)。
Ubuntu 安装说明
- 有关如何为 Azure 准备 Linux 的更多提示,请参阅常规 Linux 安装说明。
- Azure 不支持 VHDX 格式,仅支持固定大小的 VHD。 可使用 Hyper-V 管理器或
Convert-VHD
cmdlet 将磁盘转换为 VHD 格式。 - 在安装 Linux 系统时,建议使用标准分区而不是逻辑卷管理器 (LVM)(通常是许多安装的默认设置)。 这些标准分区可避免 LVM 名称与克隆 VM 发生冲突,特别是在 OS 磁盘需要连接到另一台 VM 以进行故障排除的情况下。 LVM 或 RAID 也可在数据磁盘上使用。
- 请勿在 OS 磁盘上配置交换分区或交换文件。 可以将
cloud-init
预配代理配置为在临时资源磁盘上创建交换文件或交换分区。 有关此过程的详细信息,请参阅以下步骤。 - Azure 上所有 VHD 的虚拟大小必须已按 1 MB 对齐。 从原始磁盘转换为 VHD 时,必须确保在转换前的原始磁盘大小是 1 MB 的倍数。 有关详细信息,请参阅 Linux 安装说明。
手动步骤
注意
在尝试为 Azure 创建自己的自定义 Ubuntu 映像之前,请考虑改为使用 Ubuntu 云映像网页中的预生成和已测试映像。
在 Hyper-V 管理器的中心窗格中,选择虚拟机。
选择“连接”以打开虚拟机的窗口。
替换映像中的当前存储库,以使用 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 定制内核。 将 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
注意
如果安装了
NetworkManager
和NetworkManager-gnome
包,则walinuxagent
包会将其移除。移除可能与 Azure 上的
cloud-init
预配发生冲突的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 数据源预配系统: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 项目。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 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-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。