适用对象:✔️ Linux VM ✔️ 灵活规模集
在删除 Linux 代理之前,必须了解删除 Linux 代理后 VM 将无法执行的作。
Azure 虚拟机(VM) 扩展 是小型应用程序,用于在 Azure VM 上提供部署后配置和自动化任务,扩展由 Azure 控制平面安装和管理。 Azure Linux 代理 的工作是处理平台扩展命令并确保 VM 中扩展的正确状态。
Azure 平台托管许多扩展,包括 VM 配置、监视、安全性和实用工具应用程序。 有很多第一方和第三方扩展可供选择,扩展用于以下关键情境的示例:
- 支持第一方 Azure 服务,例如 Azure 备份、监视、磁盘加密、安全性、站点复制等。
- SSH/密码重置
- VM 配置 - 运行自定义脚本、安装 Chef、Puppet 代理等。
- 第三方产品,如 AV 产品、VM 漏洞工具、VM 和应用监视工具。
- 扩展可与新的 VM 部署捆绑在一起。 例如,它们可以参与更大规模的部署,在 VM 供应时配置应用程序,或在部署后,运行于任何受支持的扩展操作系统。
禁用扩展处理
有多种方法可以根据需要禁用扩展处理,但在继续之前, 必须 删除部署到 VM 的所有扩展,例如使用 Azure CLI,可以 列出 和 删除:
az vm extension delete -g MyResourceGroup --vm-name MyVm -n extension_name
注释
如果不执行上述操作,平台将在 40 分钟后尝试发送扩展配置,并将在超时后中止。
在控制平面上禁用
如果不确定将来是否需要扩展,则可以将 Linux 代理安装到 VM 上,然后从平台禁用扩展处理功能。 此选项在 API 版本Microsoft.Compute
或更高版本中2018-06-01
可用,并且不依赖于安装的 Linux 代理版本。
az vm update -g <resourceGroup> -n <vmName> --set osProfile.allowExtensionOperations=false
可以使用上述命令轻松地从平台重新启用此扩展处理功能,但将其设置为“true”。
从正在运行的 VM 中删除 Linux 代理
请确保之前已从 VM 中删除 所有现有扩展,如上所述。
步骤 1:删除 Azure Linux 代理
如果只是删除 Linux 代理,而不是关联的配置项目,则可以在以后重新安装。 以管理员权限运行下列命令之一以删除 Azure Linux 代理:
步骤 2:(可选)删除 Azure Linux 代理项目
重要
可以删除 Linux 代理的所有关联项目,但这意味着以后无法重新安装它。 因此,强烈建议先禁用 Linux 代理,仅使用上述方式删除 Linux 代理。
如果知道不会再次重新安装 Linux 代理,则可以运行以下内容:
#For Ubuntu 18.04+:
sudo apt -y purge walinuxagent
sudo cp -rp /var/lib/waagent /var/lib/waagent.bkp
sudo rm -rf /var/lib/waagent
sudo rm -f /var/log/waagent.log
在没有 Linux 代理的情况下准备映像
如果你有一个已包含 cloud-init 的映像,并希望删除 Linux 代理,但仍然使用 cloud-init 进行预配,请以 root 身份运行步骤 2(以及可选的步骤 3)以移除 Azure Linux 代理,接下来,将删除 cloud-init 的配置和缓存数据,并将 VM 准备好以创建自定义映像。
sudo cloud-init clean --logs --seed
取消预配和创建映像
Linux 代理能够清理某些现有映像元数据,在执行步骤“waagent -deprovision+user”后,需要执行如下操作,并从中删除任何其他敏感数据。
删除所有现有的 ssh 主机密钥
sudo rm /etc/ssh/ssh_host_*key*
删除管理员帐户
sudo touch /var/run/utmp sudo userdel -f -r <admin_user_account>
删除根密码
sudo passwd -d root
完成上述作后,可以使用 Azure CLI 创建自定义映像。
创建标准托管映像
az vm deallocate -g <resource_group> -n <vm_name>
az vm generalize -g <resource_group> -n <vm_name>
az image create -g <resource_group> -n <image_name> --source <vm_name>
在 Azure 计算库列中创建映像版本
az sig image-version create \
-g $sigResourceGroup
--gallery-name $sigName
--gallery-image-definition $imageDefName
--gallery-image-version 1.0.0
--managed-image /subscriptions/00000000-0000-0000-0000-00000000xxxx/resourceGroups/imageGroups/providers/images/MyManagedImage
从不包含 Linux 代理的映像创建 VM
从没有 Linux 代理的映像创建 VM 时,需要确保 VM 部署配置指示此 VM 上不支持扩展。
注释
如果不执行上述操作,平台将在 40 分钟后尝试发送扩展配置,并将在超时后中止。
若要部署禁用扩展的 VM,可以将 Azure CLI 与 --enable-agent 配合使用。
az vm create \
--resource-group $resourceGroup \
--name $prodVmName \
--image Canonical:UbuntuServer:22_04-lts:latest \
--admin-username azadmin \
--ssh-key-value "$sshPubkeyPath" \
--enable-agent false
或者,可以通过设置 "provisionVMAgent": false,
使用 Azure 资源管理器 (ARM) 模板执行此作。
"osProfile": {
"computerName": "[parameters('virtualMachineName')]",
"adminUsername": "[parameters('adminUsername')]",
"linuxConfiguration": {
"disablePasswordAuthentication": "true",
"provisionVMAgent": false,
"ssh": {
"publicKeys": [
{
"path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]",
"keyData": "[parameters('adminPublicKey')]"
后续步骤
有关详细信息,请参阅 预配 Linux。