共用方式為

禁用或删除 VM 和映像中的 Linux 代理

适用对象:✔️ 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 代理:

#For Ubuntu 18.04+:
sudo apt -y remove walinuxagent

步骤 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>
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