适用于 Linux 的虚拟机扩展和功能

Azure 虚拟机扩展是小型应用程序,可在Azure 虚拟机上提供部署后配置和自动化任务。 例如,如果虚拟机要求安装软件、防病毒保护或 Docker 配置,便可以使用 VM 扩展来完成这些任务。 可以使用 Azure CLI、PowerShell、Azure Resource Manager 模板和 Azure 门户运行 Azure VM 扩展。 扩展可与新虚拟机部署捆绑在一起,或者针对任何现有系统运行。

本文档提供 VM 扩展的概述、使用 Azure VM 扩展的先决条件,以及有关如何检测、管理和删除 VM 扩展的指南。 由于有许多 VM 扩展可用,每个扩展可能具有唯一的配置,因此本文档提供通用信息。 扩展特定的详细信息可在每个特定于单个扩展的文档中找到。

用例和示例

有许多不同的 Azure VM 扩展可用,每个都有特定用例。 下面是一些示例:

  • 使用适用于 Linux 的 DSC 扩展将 PowerShell 所需状态配置应用于虚拟机。 有关详细信息,请参阅 Azure Desired State configuration extension(Azure Desired State Configuration 扩展)。
  • 使用 Microsoft 监视代理 VM 扩展配置虚拟机监视功能。 有关详细信息,请参阅如何监视 Linux VM
  • 使用 Datadog 扩展配置 Azure 基础结构监视功能。 有关详细信息,请参阅 Datadog 博客
  • 使用 Docker VM 扩展在 Azure 虚拟机上配置 Docker 主机。 有关详细信息,请参阅 Docker VM extension(Docker VM 扩展)。

除了进程特定的扩展外,自定义脚本扩展也可用于 Windows 和 Linux 虚拟机。 适用于 Linux 的“自定义脚本”扩展允许在虚拟机上运行任何 Bash 脚本。 在设计需要本机 Azure 工具无法提供的配置的 Azure 部署时,自定义脚本很有用。 有关详细信息,请参阅 Linux VM Custom Script extension(Linux VM“自定义脚本”扩展)。

先决条件

每个虚拟机扩展可能都有其自己的一组先决条件。 例如,Docker VM 扩展有支持的 Linux 分发的先决条件。 特定于扩展的文档中详细介绍了单个扩展的要求。

Azure VM 代理

Azure VM 代理可管理 Azure 虚拟机与 Azure 结构控制器之间的交互。 VM 代理负责部署和管理 Azure 虚拟机的许多功能层面,包括运行 VM 扩展。 Azure VM 代理预先安装在 Azure 应用商店映像上,并可手动安装在支持的操作系统上。

有关受支持的操作系统以及安装说明的信息,请参阅 Azure virtual machine agent(Azure 虚拟机代理)。

发现 VM 扩展

有许多不同的 VM 扩展可与 Azure 虚拟机配合使用。 要查看完整列表,请使用 Azure CLI 运行以下命令,并将示例位置替换为所选位置。

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

az vm extension image list --location chinanorth -o table

运行 VM 扩展

Azure 虚拟机扩展可以在现有虚拟机上运行,当需要在已部署的 VM 上进行配置更改或恢复连接时,这很有用。 VM 扩展还可以与 Azure Resource Manager 模板部署捆绑。 将扩展与资源管理器模板配合使用,可以部署和配置 Azure 虚拟机,而无需部署后干预。

可使用以下方法针对现有虚拟机运行扩展。

Azure CLI

可以使用 az vm extension set 命令针对现有虚拟机运行 Azure 虚拟机扩展。 此示例针对虚拟机运行自定义脚本扩展。

az vm extension set `
  --resource-group exttest `
  --vm-name exttest `
  --name customScript `
  --publisher Microsoft.Azure.Extensions `
  --settings '{"fileUris": ["https://gist.github.com/ahmetalpbalkan/b5d4a856fe15464015ae87d5587a4439/raw/466f5c30507c990a4d5a2f5c79f901fa89a80841/hello.sh"],"commandToExecute": "./hello.sh"}'

脚本生成的输出类似于以下文本:

info:    Executing command vm extension set
+ Looking up the VM "myVM"
+ Installing extension "CustomScript", VM: "mvVM"
info:    vm extension set command OK

Azure 门户

可通过 Azure 门户将 VM 扩展应用到现有虚拟机。 为此,请选择虚拟机,选择“扩展”,并单击“添加”。 从可用扩展的列表中选择所需扩展,并按向导中的说明操作。

下图展示了如何从 Azure 门户安装 Linux 自定义脚本扩展。

安装自定义脚本扩展

Azure Resource Manager 模板

VM 扩展可添加到 Azure Resource Manager 模板,并在部署模板的过程中执行。 使用模板部署扩展时,可以创建完全配置的 Azure 部署。 例如,以下 JSON 取自 Resource Manager 模板。 该模板会在每个 VM 上部署一组负载均衡的虚拟机、一个 Azure SQL 数据库,然后安装一个 .NET Core 应用程序。 VM 扩展负责安装软件。

有关详细信息,请参阅完整的 Resource Manager 模板

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.0",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
    }
}

有关详细信息,请参阅创作 Azure 资源管理器模板

保护 VM 扩展数据

运行 VM 扩展时,可能需要提供敏感信息,例如凭据、存储帐户名称和存储帐户访问密钥。 许多 VM 扩展包括受保护的配置,该配置对数据进行加密并且仅在目标虚拟机内才对数据进行解密。 每个扩展都有一个特定的受保护的配置架构,扩展特定的文档中详述了各个架构。

以下示例演示了适用于 Linux 的自定义脚本扩展的实例。 请注意,要执行的命令包含一组凭据。 在此示例中,不会加密要执行的命令。

{
  "apiVersion": "2015-06-15",
  "type": "extensions",
  "name": "config-app",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.0",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
      ],
      "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
  }
}

要执行的命令属性移动到受保护的配置可以保护执行字符串。

{
  "apiVersion": "2015-06-15",
  "type": "extensions",
  "name": "config-app",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.0",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
      ]
    },
    "protectedSettings": {
      "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
  }
}

排查 VM 扩展的问题

每个 VM 扩展都有特定于扩展的故障排除步骤。 例如,使用自定义脚本扩展时,可在运行该扩展的本地虚拟机上找到脚本执行详细信息。 任何特定于扩展的故障排除步骤均在特定于扩展的文档中详细说明。

以下故障排除步骤适用于所有虚拟机扩展。

查看扩展状态

针对虚拟机运行虚拟机扩展后,使用以下 Azure CLI 命令返回扩展状态。 请将示例参数名称替换成自己的值。

az vm extension list --resource-group myResourceGroup --vm-name myVM -o table

输出类似于以下文本:

AutoUpgradeMinorVersion    Location    Name          ProvisioningState    Publisher                   ResourceGroup      TypeHandlerVersion  VirtualMachineExtensionType
-------------------------  ----------  ------------  -------------------  --------------------------  ---------------  --------------------  -----------------------------
True                       chinanorth      customScript  Succeeded            Microsoft.Azure.Extensions  exttest                             2  customScript

此外,还可以在 Azure 门户中找到扩展执行状态。 如果要查看扩展的状态,请选择虚拟机,选择“扩展” ,并选择所需的扩展。

重新运行 VM 扩展

在某些情况下,可能需要重新运行虚拟机扩展。 如果要重新运行扩展,可以先删除扩展,然后使用所选执行方法重新运行扩展。 若要删除扩展,请使用 Azure CLI 模块运行以下命令。 请将示例参数名称替换成自己的值。

az vm extension delete --name customScript --resource-group myResourceGroup --vm-name myVM

在 Azure 门户中可通过下列步骤删除扩展:

  1. 选择虚拟机。
  2. 选择“扩展” 。
  3. 选择所需的扩展。
  4. 选择“卸载” 。

常见 VM 扩展参考

扩展名称 说明 详细信息
适用于 Linux 的自定义脚本扩展 针对 Azure 虚拟机运行脚本 适用于 Linux 的自定义脚本扩展
Docker 扩展 安装 Docker 守护程序以支持远程 Docker 命令。 Docker VM 扩展
VM 访问扩展 重新获取对 Azure 虚拟机的访问权限 VM 访问扩展
Azure 诊断扩展 管理 Azure 诊断 Azure 诊断扩展
Azure VM 访问扩展 管理用户和凭据 适用于 Linux 的 VM 访问扩展