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

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

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

用例和示例

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

使用适用于 Windows 的 DSC 扩展将 PowerShell 所需状态配置应用于虚拟机。 有关详细信息,请参阅Azure Desired State configuration extension(Azure Desired State Configuration 扩展)。

使用 Datadog 扩展配置 Azure 基础结构监视功能。 有关详细信息,请参阅Datadog 博客

使用 Chef 配置 Azure 虚拟机。 有关详细信息,请参阅使用 Chef 自动执行 Azure 虚拟机部署

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

先决条件

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

Azure VM 代理

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

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

发现 VM 扩展

有许多不同的 VM 扩展可与 Azure 虚拟机配合使用。 若要查看完整列表,请使用 Azure Resource Manager PowerShell 模块运行以下命令。 运行此命令时请确保指定所需的位置。

PowerShell复制

Get-AzureRmVmImagePublisher-LocationChinaNorth | `Get-AzureRmVMExtensionImageType| `Get-AzureRmVMExtensionImage| Select Type, Version

运行 VM 扩展

Azure 虚拟机扩展可以在现有虚拟机上运行,当需要在已部署的 VM 上进行配置更改或恢复连接时,这很有用。 VM 扩展还可以与 Azure Resource Manager 模板部署捆绑。 在 Resource Manager 模板中使用扩展,可以在不进行部署后干预的情况下部署和配置 Azure 虚拟机。

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

PowerShell

存在多个用于运行单个扩展的 PowerShell 命令。 若要查看列表,请运行以下 PowerShell 命令。

PowerShell复制

get-commandSet-AzureRM*Extension*-ModuleAzureRM.Compute

此命令的输出如下所示:

PowerShell复制

CommandType    Name                                              Version    Source----------------------------CmdletSet-AzureRmVMAccessExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMADDomainExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMAEMExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMBackupExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMBginfoExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMChefExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMCustomScriptExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMDiagnosticsExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMDiskEncryptionExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMDscExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMExtension2.2.0AzureRM.ComputeCmdletSet-AzureRmVMSqlServerExtension2.2.0AzureRM.Compute

以下示例使用自定义脚本扩展从 GitHub 存储库将脚本下载到目标虚拟机上,并运行该脚本。 有关自定义脚本扩展的详细信息,请参阅自定义脚本扩展概述

PowerShell复制

Set-AzureRmVMCustomScriptExtension-ResourceGroupName"myResourceGroup"`-VMName"myVM"-Name"myCustomScript"`-FileUri"https://raw.githubusercontent.com/neilpeterson/nepeters-azure-templates/master/windows-custom-script-simple/support-scripts/Create-File.ps1"`-Run"Create-File.ps1"-Location"China North"

在此示例中,VM 访问扩展用于重置 Windows 虚拟机的管理密码。 有关 VM 访问扩展的详细信息,请参阅重置 Windows VM 中的远程桌面服务

PowerShell复制

$cred=Get-CredentialSet-AzureRmVMAccessExtension-ResourceGroupName"myResourceGroup"-VMName"myVM"-Name"myVMAccess"`-LocationChinaNorth-UserName$cred.GetNetworkCredential().Username `-Password$cred.GetNetworkCredential().Password-typeHandlerVersion"2.0"

Set-AzureRmVMExtension命令可用于启动任何 VM 扩展。 有关详细信息,请参阅Set-AzureRmVMExtension 参考

Azure 门户

可通过 Azure 门户将 VM 扩展应用到现有虚拟机。 为此,请选择要使用的虚拟机,选择“扩展”,然后单击“添加”。 这会提供可用扩展的列表。 选择所需的扩展,并按照向导中的步骤进行操作。

下图显示了从 Azure 门户安装 Microsoft 反恶意软件扩展。

Azure Resource Manager 模板

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

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

JSON复制

{"apiVersion":"2015-06-15","type":"extensions","name":"config-app","location":"[resourceGroup().location]","dependsOn": ["[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]","[variables('musicstoresqlName')]"],"tags": {"displayName":"config-app"},"properties": {"publisher":"Microsoft.Compute","type":"CustomScriptExtension","typeHandlerVersion":"1.4","autoUpgradeMinorVersion":true,"settings": {"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"]    },"protectedSettings": {"commandToExecute":"[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.chinacloudapi.cn')]"}    }}

有关详细信息,请参阅使用 Windows VM 扩展创作 Azure Resource Manager 模板

保护 VM 扩展数据

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

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

JSON复制

{"apiVersion":"2015-06-15","type":"extensions","name":"config-app","location":"[resourceGroup().location]","dependsOn": ["[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]","[variables('musicstoresqlName')]"],"tags": {"displayName":"config-app"},"properties": {"publisher":"Microsoft.Compute","type":"CustomScriptExtension","typeHandlerVersion":"1.4","autoUpgradeMinorVersion":true,"settings": {"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"],"commandToExecute":"[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.chinacloudapi.cn')]"}    }}

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

JSON复制

{"apiVersion":"2015-06-15","type":"extensions","name":"config-app","location":"[resourceGroup().location]","dependsOn": ["[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]","[variables('musicstoresqlName')]"],"tags": {"displayName":"config-app"},"properties": {"publisher":"Microsoft.Compute","type":"CustomScriptExtension","typeHandlerVersion":"1.4","autoUpgradeMinorVersion":true,"settings": {"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"]    },"protectedSettings": {"commandToExecute":"[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.chinacloudapi.cn')]"}    }}

排查 VM 扩展的问题

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

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

查看扩展状态

针对虚拟机运行虚拟机扩展后,使用以下 PowerShell 命令返回扩展状态。 请将示例参数名称替换成自己的值。Name参数采用执行时提供给扩展的名称。

PowerShell复制

Get-AzureRmVMExtension-ResourceGroupNamemyResourceGroup-VMNamemyVM-NamemyExtensionName

输出如下所示:

JSON复制

ResourceGroupName      : myResourceGroupVMName                  : myVMName                    : myExtensionNameLocation                : chinanorthEtag                    :nullPublisher              : Microsoft.Azure.ExtensionsExtensionType          : DockerExtensionTypeHandlerVersion      :1.0Id                      : /subscriptions/mySubscriptionIS/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/extensions/myExtensionNamePublicSettings          :ProtectedSettings      :ProvisioningState      : SucceededStatuses                :SubStatuses            :AutoUpgradeMinorVersion : FalseForceUpdateTag          :

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

重新运行 VM 扩展

在某些情况下,可能需要重新运行虚拟机扩展。 可以通过删除扩展,并使用所选执行方法重新运行扩展来执行此操作。 若要删除扩展,请使用 Azure PowerShell 模块运行以下命令。 请将示例参数名称替换成自己的值。

PowerShell复制

Remove-AzureRmVMExtension-ResourceGroupNamemyResourceGroup-VMNamemyVM-NamemyExtensionName

此外,还可以使用 Azure 门户删除扩展。 为此,请执行以下操作:

选择虚拟机。

选择“扩展” 。

选择所需的扩展。

选择“卸载” 。

常见 VM 扩展参考

扩展名称说明详细信息

适用于 Windows 的自定义脚本扩展针对 Azure 虚拟机运行脚本适用于 Windows 的自定义脚本扩展

适用于 Windows 的 DSC 扩展PowerShell DSC (Desired State Configuration) 扩展适用于 Windows 的 DSC 扩展

Azure 诊断扩展管理 Azure 诊断Azure 诊断扩展

Azure VM 访问扩展管理用户和凭据适用于 Linux 的 VM 访问扩展

立即访问http://market.azure.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容