Azure 虛擬機(jī)擴(kuò)展是小型應(yīng)用程序,可在Azure 虛擬機(jī)上提供部署后配置和自動(dòng)化任務(wù)。 例如,如果虛擬機(jī)要求安裝軟件、防病毒保護(hù)或進(jìn)行 Docker 配置,便可以使用 VM 擴(kuò)展來(lái)完成這些任務(wù)。 可以使用 Azure CLI、PowerShell、Azure Resource Manager 模板和 Azure 門(mén)戶運(yùn)行 Azure VM 擴(kuò)展。 擴(kuò)展可與新虛擬機(jī)部署捆綁在一起,或者針對(duì)任何現(xiàn)有系統(tǒng)運(yùn)行。
本文檔提供虛擬機(jī)擴(kuò)展的概述、使用虛擬機(jī)擴(kuò)展的先決條件,以及有關(guān)如何檢測(cè)、管理和刪除虛擬機(jī)擴(kuò)展的指南。 由于有許多 VM 擴(kuò)展可用,每個(gè)擴(kuò)展可能具有唯一的配置,因此本文檔提供通用信息。 擴(kuò)展特定的詳細(xì)信息可在每個(gè)特定于單個(gè)擴(kuò)展的文檔中找到。
用例和示例
有許多不同的 Azure VM 擴(kuò)展可用,每個(gè)都有特定用例。 一些示例用例包括:
使用適用于 Windows 的 DSC 擴(kuò)展將 PowerShell 所需狀態(tài)配置應(yīng)用于虛擬機(jī)。 有關(guān)詳細(xì)信息,請(qǐng)參閱Azure Desired State configuration extension(Azure Desired State Configuration 擴(kuò)展)。
使用 Datadog 擴(kuò)展配置 Azure 基礎(chǔ)結(jié)構(gòu)監(jiān)視功能。 有關(guān)詳細(xì)信息,請(qǐng)參閱Datadog 博客。
使用 Chef 配置 Azure 虛擬機(jī)。 有關(guān)詳細(xì)信息,請(qǐng)參閱使用 Chef 自動(dòng)執(zhí)行 Azure 虛擬機(jī)部署。
除了進(jìn)程特定的擴(kuò)展外,自定義腳本擴(kuò)展也可用于 Windows 和 Linux 虛擬機(jī)。 適用于 Windows 的自定義腳本擴(kuò)展允許在虛擬機(jī)上運(yùn)行任何 PowerShell 腳本。 在設(shè)計(jì)需要本機(jī) Azure 工具無(wú)法提供的配置的 Azure 部署時(shí),這很有用。 有關(guān)詳細(xì)信息,請(qǐng)參閱Windows VM 自定義腳本擴(kuò)展。
先決條件
每個(gè)虛擬機(jī)擴(kuò)展可能都有其自己的一組先決條件。 例如,Docker VM 擴(kuò)展有支持的 Linux 分發(fā)的先決條件。 特定于擴(kuò)展的文檔中詳細(xì)介紹了單個(gè)擴(kuò)展的要求。
Azure VM 代理
Azure VM 代理可管理 Azure 虛擬機(jī)與 Azure 結(jié)構(gòu)控制器之間的交互。 VM 代理負(fù)責(zé)部署和管理 Azure 虛擬機(jī)的許多功能層面,包括運(yùn)行 VM 擴(kuò)展。 Azure VM 代理預(yù)先安裝在 Azure 應(yīng)用商店映像上,并可安裝在支持的操作系統(tǒng)上。
有關(guān)受支持的操作系統(tǒng)以及安裝說(shuō)明的信息,請(qǐng)參閱Azure 虛擬機(jī)代理。
發(fā)現(xiàn) VM 擴(kuò)展
有許多不同的 VM 擴(kuò)展可與 Azure 虛擬機(jī)配合使用。 若要查看完整列表,請(qǐng)使用 Azure Resource Manager PowerShell 模塊運(yùn)行以下命令。 運(yùn)行此命令時(shí)請(qǐng)確保指定所需的位置。
PowerShell復(fù)制
Get-AzureRmVmImagePublisher-LocationChinaNorth | `Get-AzureRmVMExtensionImageType| `Get-AzureRmVMExtensionImage| Select Type, Version
運(yùn)行 VM 擴(kuò)展
Azure 虛擬機(jī)擴(kuò)展可以在現(xiàn)有虛擬機(jī)上運(yùn)行,當(dāng)需要在已部署的 VM 上進(jìn)行配置更改或恢復(fù)連接時(shí),這很有用。 VM 擴(kuò)展還可以與 Azure Resource Manager 模板部署捆綁。 在 Resource Manager 模板中使用擴(kuò)展,可以在不進(jìn)行部署后干預(yù)的情況下部署和配置 Azure 虛擬機(jī)。
可使用以下方法針對(duì)現(xiàn)有虛擬機(jī)運(yùn)行擴(kuò)展。
PowerShell
存在多個(gè)用于運(yùn)行單個(gè)擴(kuò)展的 PowerShell 命令。 若要查看列表,請(qǐng)運(yùn)行以下 PowerShell 命令。
PowerShell復(fù)制
get-commandSet-AzureRM*Extension*-ModuleAzureRM.Compute
此命令的輸出如下所示:
PowerShell復(fù)制
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
以下示例使用自定義腳本擴(kuò)展從 GitHub 存儲(chǔ)庫(kù)將腳本下載到目標(biāo)虛擬機(jī)上,并運(yùn)行該腳本。 有關(guān)自定義腳本擴(kuò)展的詳細(xì)信息,請(qǐng)參閱自定義腳本擴(kuò)展概述。
PowerShell復(fù)制
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 訪問(wèn)擴(kuò)展用于重置 Windows 虛擬機(jī)的管理密碼。 有關(guān) VM 訪問(wèn)擴(kuò)展的詳細(xì)信息,請(qǐng)參閱重置 Windows VM 中的遠(yuǎn)程桌面服務(wù)。
PowerShell復(fù)制
$cred=Get-CredentialSet-AzureRmVMAccessExtension-ResourceGroupName"myResourceGroup"-VMName"myVM"-Name"myVMAccess"`-LocationChinaNorth-UserName$cred.GetNetworkCredential().Username `-Password$cred.GetNetworkCredential().Password-typeHandlerVersion"2.0"
Set-AzureRmVMExtension命令可用于啟動(dòng)任何 VM 擴(kuò)展。 有關(guān)詳細(xì)信息,請(qǐng)參閱Set-AzureRmVMExtension 參考。
Azure 門(mén)戶
可通過(guò) Azure 門(mén)戶將 VM 擴(kuò)展應(yīng)用到現(xiàn)有虛擬機(jī)。 為此,請(qǐng)選擇要使用的虛擬機(jī),選擇“擴(kuò)展”,然后單擊“添加”。 這會(huì)提供可用擴(kuò)展的列表。 選擇所需的擴(kuò)展,并按照向?qū)е械牟襟E進(jìn)行操作。
下圖顯示了從 Azure 門(mén)戶安裝 Microsoft 反惡意軟件擴(kuò)展。
Azure Resource Manager 模板
VM 擴(kuò)展可添加到 Azure Resource Manager 模板,并在部署模板的過(guò)程中執(zhí)行。 使用模板部署擴(kuò)展對(duì)于創(chuàng)建完全配置的 Azure 部署很有用。 例如,以下 JSON 取自一個(gè) Resource Manager 模板,該模板將在每個(gè) VM 上部署一組負(fù)載均衡虛擬機(jī)和一個(gè) Azure SQL 數(shù)據(jù)庫(kù),并安裝一個(gè) .NET Core 應(yīng)用程序。 VM 擴(kuò)展負(fù)責(zé)安裝軟件。
有關(guān)詳細(xì)信息,請(qǐng)參閱完整的Resource Manager 模板。
JSON復(fù)制
{"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')]"}? ? }}
有關(guān)詳細(xì)信息,請(qǐng)參閱使用 Windows VM 擴(kuò)展創(chuàng)作 Azure Resource Manager 模板。
保護(hù) VM 擴(kuò)展數(shù)據(jù)
運(yùn)行 VM 擴(kuò)展時(shí),可能需要提供敏感信息,例如憑據(jù)、存儲(chǔ)帳戶名稱和存儲(chǔ)帳戶訪問(wèn)密鑰。 許多 VM 擴(kuò)展包括用于對(duì)數(shù)據(jù)進(jìn)行加密,并且僅在目標(biāo)虛擬機(jī)內(nèi)對(duì)數(shù)據(jù)進(jìn)行解密的受保護(hù)配置。 每個(gè)擴(kuò)展都有特定的受保護(hù)配置架構(gòu),在特定于擴(kuò)展的文檔中會(huì)詳細(xì)介紹此架構(gòu)。
以下示例顯示適用于 Windows 的自定義腳本擴(kuò)展的實(shí)例。 請(qǐng)注意,要執(zhí)行的命令包含一組憑據(jù)。 在此示例中,不會(huì)加密要執(zhí)行的命令。
JSON復(fù)制
{"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')]"}? ? }}
將要執(zhí)行的命令屬性移動(dòng)到受保護(hù)的配置,以保護(hù)執(zhí)行字符串。
JSON復(fù)制
{"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 擴(kuò)展的問(wèn)題
每個(gè) VM 擴(kuò)展都有特定的故障排除步驟。 例如,使用自定義腳本擴(kuò)展時(shí),可在運(yùn)行該擴(kuò)展的本地虛擬機(jī)上找到腳本執(zhí)行詳細(xì)信息。 任何特定于擴(kuò)展的故障排除步驟均在特定于擴(kuò)展的文檔中詳細(xì)說(shuō)明。
以下故障排除步驟適用于所有虛擬機(jī)擴(kuò)展。
查看擴(kuò)展?fàn)顟B(tài)
針對(duì)虛擬機(jī)運(yùn)行虛擬機(jī)擴(kuò)展后,使用以下 PowerShell 命令返回?cái)U(kuò)展?fàn)顟B(tài)。 請(qǐng)將示例參數(shù)名稱替換成自己的值。Name參數(shù)采用執(zhí)行時(shí)提供給擴(kuò)展的名稱。
PowerShell復(fù)制
Get-AzureRmVMExtension-ResourceGroupNamemyResourceGroup-VMNamemyVM-NamemyExtensionName
輸出如下所示:
JSON復(fù)制
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 門(mén)戶中找到擴(kuò)展執(zhí)行狀態(tài)。 如果要查看擴(kuò)展的狀態(tài),請(qǐng)選擇虛擬機(jī),選擇“擴(kuò)展” ,并選擇所需的擴(kuò)展。
重新運(yùn)行 VM 擴(kuò)展
在某些情況下,可能需要重新運(yùn)行虛擬機(jī)擴(kuò)展。 可以通過(guò)刪除擴(kuò)展,并使用所選執(zhí)行方法重新運(yùn)行擴(kuò)展來(lái)執(zhí)行此操作。 若要?jiǎng)h除擴(kuò)展,請(qǐng)使用 Azure PowerShell 模塊運(yùn)行以下命令。 請(qǐng)將示例參數(shù)名稱替換成自己的值。
PowerShell復(fù)制
Remove-AzureRmVMExtension-ResourceGroupNamemyResourceGroup-VMNamemyVM-NamemyExtensionName
此外,還可以使用 Azure 門(mén)戶刪除擴(kuò)展。 為此,請(qǐng)執(zhí)行以下操作:
選擇虛擬機(jī)。
選擇“擴(kuò)展” 。
選擇所需的擴(kuò)展。
選擇“卸載” 。
常見(jiàn) VM 擴(kuò)展參考
擴(kuò)展名稱說(shuō)明詳細(xì)信息
適用于 Windows 的自定義腳本擴(kuò)展針對(duì) Azure 虛擬機(jī)運(yùn)行腳本適用于 Windows 的自定義腳本擴(kuò)展
適用于 Windows 的 DSC 擴(kuò)展PowerShell DSC (Desired State Configuration) 擴(kuò)展適用于 Windows 的 DSC 擴(kuò)展
Azure 診斷擴(kuò)展管理 Azure 診斷Azure 診斷擴(kuò)展
Azure VM 訪問(wèn)擴(kuò)展管理用戶和憑據(jù)適用于 Linux 的 VM 訪問(wèn)擴(kuò)展
立即訪問(wèn)http://market.azure.cn