使用 cloud-init 在 Azure 的 Linux VM 中更新和安装包
适用于:✔️ Linux VM ✔️ 灵活规模集
本文演示如何在 Azure 中使用 cloud-init 在预配时间更新 Linux 虚拟机 (VM) 或虚拟机规模集上的包。 Azure 预配资源后,这些 cloud-init 脚本即会在第一次启动时运行。 有关 cloud-init 如何在 Azure 以及受支持的 Linux 发行版中本机工作的详细信息,请参阅 cloud-init 概述
使用 cloud-init 更新 VM
出于安全目的,你需要配置 VM,以便在首次启动时应用最新的更新。 由于 cloud-init 支持不同的 Linux 发行版,因此无需为包管理器指定 apt
、zypper
或 yum
。 相反,你需要定义 package_upgrade
,并让 cloud-init 进程确定正在使用的发行版的适当机制。
本示例使用 Azure CLI。 若要查看操作中的升级进程,请创建一个名为“cloud_init_upgrade.txt”的文件并粘贴下面的配置。 可使用任何想要使用的编辑器。 请确保已正确复制整个 cloud-init 文件,尤其是第一行。
复制下面的文本并将其粘贴到 cloud_init_upgrade.txt
文件中。 请确保已正确复制整个 cloud-init 文件,尤其是第一行。
#cloud-config
package_upgrade: true
packages:
- httpd
在部署之前,需要使用 az group create 命令创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。 以下示例在“chinaeast” 位置创建名为“myResourceGroup” 的资源组。
az group create --name myResourceGroup --location chinanorth
现在,使用 az vm create 创建 VM,并通过 --custom-data
参数指定 cloud-init 文件,如下所示:
az vm create \
--resource-group myResourceGroup \
--name vmName \
--image imageCIURN \
--custom-data cloud_init_upgrade.txt \
--admin-username azureuser \
--generate-ssh-keys
注意
相应地替换“myResourceGroup”、“vmName”和“imageCIURN”值。 确保选择了包含 Cloud-init 的映像。
通过 SSH 连接到 VM 的公共 IP 地址显示在先前命令的输出中。 按如下所示输入自己的用户和 publicIpAddress:
ssh <user>@<publicIpAddress>
运行包管理工具并检查更新:
- 执行以下命令以确认没有挂起的更新
sudo yum check-update
由于 cloud-init 在启动时已检查和安装更新,因此,应没有要应用的其他更新。
- 可以通过运行以下命令并查看输出来查看更新过程、更改的包数量以及
httpd
的安装。
sudo yum history
ID | Command line | Date and time | Action(s) | Altered
--------------------------------------------------------------------------------------------------
3 | -y install httpd | 2022-02-18 18:30 | Install | 7
2 | -y upgrade | 2022-02-18 18:23 | I, O, U | 321 EE
1 | | 2021-02-04 19:20 | Install | 496 EE
后续步骤
有关配置更改的其他 cloud-init 示例,请参阅以下文章: