你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Stack Edge Pro 设备的正在运行的 VM 上部署自定义脚本扩展
适用于:Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
自定义脚本扩展会将脚本或命令下载到 Azure Stack Edge Pro 设备的正在运行的虚拟机上并运行它们。 本文详细介绍如何使用 Azure 资源管理器模板来安装并运行自定义脚本扩展。
关于自定义脚本扩展
自定义脚本扩展适用于部署后配置、软件安装或任何其他的配置/管理任务。 可以从 Azure 存储或其他可访问的 Internet 位置下载脚本,也可以将脚本或命令提供给扩展运行时。
将自定义脚本扩展与 Azure 资源管理器模板集成。 也可使用 Azure CLI、PowerShell 或 Azure 虚拟机 REST API 来运行它。
适用于自定义脚本扩展的 OS
Windows 上的自定义脚本扩展支持的 OS
适用于 Windows 的自定义脚本扩展会在以下 OS 上运行。 其他版本可能也有效,但尚未在 Azure Stack Edge Pro 设备的正在运行的 VM 上进行内部测试。
分发 | 版本 |
---|---|
Windows Server 2019 | 核心 |
Windows Server 2016 | 核心 |
Linux 上的自定义脚本扩展支持的 OS
适用于 Linux 的自定义脚本扩展会在以下 OS 上运行。 其他版本可能也有效,但尚未在 Azure Stack Edge Pro 设备的正在运行的 VM 上进行内部测试。
分发 | 版本 |
---|---|
Linux:Ubuntu | 18.04 LTS |
Linux:Red Hat Enterprise Linux | 7.4、7.5、7.7 |
先决条件
将 VM 模板和参数文件下载到客户端计算机。 将下载内容解压缩到将用作工作目录的那个目录中。
你应该已在设备上创建并部署 VM。 若要创建 VM,请按照使用模板在 Azure Stack Edge Pro 上部署 VM 中的所有步骤操作。
如果需要从外部下载特定位置(例如 GitHub 或 Azure 存储)中的脚本,则请在配置计算网络时启用连接到 Internet 的端口,以便进行计算。 这样就可以下载脚本。
在以下示例中,端口 2 已连接到 Internet 并用于启用计算网络。 如果你已在前面的步骤中确定不需要 Kubernetes,则可以跳过 Kubernetes 节点 IP 和外部服务 IP 的分配。
安装自定义脚本扩展
可以根据 VM 的操作系统安装适用于 Windows 或 Linux 的自定义脚本扩展。
适用于 Windows 的自定义脚本扩展
若要为设备上运行的 VM 部署适用于 Windows 的自定义脚本扩展,请编辑 addCSExtWindowsVM.parameters.json
参数文件,然后部署模板 addCSextensiontoVM.json
。
编辑参数文件
文件 addCSExtWindowsVM.parameters.json
采用以下参数:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"value": "<Name of VM>"
},
"extensionName": {
"value": "<Name of extension>"
},
"publisher": {
"value": "Microsoft.Compute"
},
"type": {
"value": "CustomScriptExtension"
},
"typeHandlerVersion": {
"value": "1.10"
},
"settings": {
"value": {
"commandToExecute" : "<Command to execute>"
}
}
}
}
请提供 VM 名称、扩展名称和要执行的命令。
下面是本文中使用过的参数文件示例。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"value": "VM5"
},
"extensionName": {
"value": "CustomScriptExtension"
},
"publisher": {
"value": "Microsoft.Compute"
},
"type": {
"value": "CustomScriptExtension"
},
"typeHandlerVersion": {
"value": "1.10"
},
"settings": {
"value": {
"commandToExecute" : "md C:\\Users\\Public\\Documents\\test"
}
}
}
}
部署模板
部署模板 addCSextensiontoVM.json
。 此模板将扩展部署到现有 VM。 运行以下命令:
$templateFile = "<Path to addCSExtensiontoVM.json file>"
$templateParameterFile = "<Path to addCSExtWindowsVM.parameters.json file>"
$RGName = "<Resource group name>"
New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "<Deployment name>"
注意
扩展部署是一个长时间运行的作业,大约需要 10 分钟才能完成。
下面是示例输出:
PS C:\WINDOWS\system32> $templateFile = "C:\12-09-2020\ExtensionTemplates\addCSExtensiontoVM.json"
PS C:\WINDOWS\system32> $templateParameterFile = "C:\12-09-2020\ExtensionTemplates\addCSExtWindowsVM.parameters.json"
PS C:\WINDOWS\system32> $RGName = "myasegpuvm1"
PS C:\WINDOWS\system32> New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "deployment7"
DeploymentName : deployment7
ResourceGroupName : myasegpuvm1
ProvisioningState : Succeeded
Timestamp : 12/17/2020 10:07:44 PM
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
vmName String VM5
extensionName String CustomScriptExtension
publisher String Microsoft.Compute
type String CustomScriptExtension
typeHandlerVersion String 1.10
settings Object {
"commandToExecute": "md C:\\Users\\Public\\Documents\\test"
}
Outputs :
DeploymentDebugLogLevel :
PS C:\WINDOWS\system32>
跟踪部署
要查看给定 VM 扩展的部署状态,请运行以下命令:
Get-AzureRmVMExtension -ResourceGroupName <Name of resource group> -VMName <Name of VM> -Name <Name of the extension>
下面是示例输出:
PS C:\WINDOWS\system32> Get-AzureRmVMExtension -ResourceGroupName myasegpuvm1 -VMName VM5 -Name CustomScriptExtension
ResourceGroupName : myasegpuvm1
VMName : VM5
Name : CustomScriptExtension
Location : dbelocal
Etag : null
Publisher : Microsoft.Compute
ExtensionType : CustomScriptExtension
TypeHandlerVersion : 1.10
Id : /subscriptions/947b3cfd-7a1b-4a90-7cc5-e52caf221332/resourceGroups/myasegpuvm1/providers/Microsoft.Compute/virtualMachines/VM5/extensions/CustomScriptExtension
PublicSettings : {
"commandToExecute": "md C:\\Users\\Public\\Documents\\test"
}
ProtectedSettings :
ProvisioningState : Creating
Statuses :
SubStatuses :
AutoUpgradeMinorVersion : True
ForceUpdateTag :
PS C:\WINDOWS\system32>
注意
部署完成后,ProvisioningState
会变为 Succeeded
。
扩展输出将记录到可在目标虚拟机上的以下目录中找到的文件中。
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension
指定的文件将下载到目标虚拟机上的以下文件夹中。
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>
其中,n 是一个十进制整数,可以在不同的扩展执行之间更改。 1.* 值与扩展的 typeHandlerVersion
的当前实际值匹配。 例如,此实例中的实际目录为 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0
。
在此实例中,为自定义扩展执行的命令为 md C:\\Users\\Public\\Documents\\test
。 成功安装扩展后,可以在命令中的指定路径验证是否已在 VM 中创建了目录。
适用于 Linux 的自定义脚本扩展
若要为设备上运行的 VM 部署适用于 Windows 的自定义脚本扩展,请编辑 addCSExtLinuxVM.parameters.json
参数文件,然后部署模板 addCSExtensiontoVM.json
。
编辑参数文件
文件 addCSExtLinuxVM.parameters.json
采用以下参数:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"value": "<Name of your VM>"
},
"extensionName": {
"value": "<Name of your extension>"
},
"publisher": {
"value": "Microsoft.Azure.Extensions"
},
"type": {
"value": "CustomScript"
},
"typeHandlerVersion": {
"value": "2.0"
},
"settings": {
"value": {
"commandToExecute" : "<Command to execute>"
}
}
}
}
请提供 VM 名称、扩展名称和要执行的命令。
下面是本文中使用过的一个参数文件示例:
$templateFile = "<Path to addCSExtensionToVM.json file>"
$templateParameterFile = "<Path to addCSExtLinuxVM.parameters.json file>"
$RGName = "<Resource group name>"
New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "<Deployment name>"
注意
扩展部署是一个长时间运行的作业,大约需要 10 分钟才能完成。
下面是示例输出:
PS C:\WINDOWS\system32> $templateFile = "C:\12-09-2020\ExtensionTemplates\addCSExtensionToVM.json"
PS C:\WINDOWS\system32> $templateParameterFile = "C:\12-09-2020\ExtensionTemplates\addCSExtLinuxVM.parameters.json"
PS C:\WINDOWS\system32> $RGName = "myasegpuvm1"
PS C:\WINDOWS\system32> New-AzureRmResourceGroupDeployment -ResourceGroupName $RGName -TemplateFile $templateFile -TemplateParameterFile $templateParameterFile -Name "deployment99"
DeploymentName : deployment99
ResourceGroupName : myasegpuvm1
ProvisioningState : Succeeded
Timestamp : 12/18/2020 1:55:23 AM
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
vmName String VM6
extensionName String LinuxCustomScriptExtension
publisher String Microsoft.Azure.Extensions
type String CustomScript
typeHandlerVersion String 2.0
settings Object {
"commandToExecute": "sudo echo 'some text' >> /home/Administrator/file2.txt"
}
Outputs :
DeploymentDebugLogLevel :
PS C:\WINDOWS\system32>
commandToExecute
已设置为在 /home/Administrator
目录中创建文件 file2.txt
,该文件的内容是 some text
。 在这种情况下,你可以验证是否已在指定的路径中创建了该文件。
Administrator@VM6:~$ dir
file2.txt
Administrator@VM6:~$ cat file2.txt
some text
Administrator@VM6:
跟踪部署状态
模板部署是一个长时间运行的作业。 若要检查给定 VM 的扩展的部署状态,请打开另一个 PowerShell 会话(以管理员身份运行)。 运行以下命令:
Get-AzureRmVMExtension -ResourceGroupName myResourceGroup -VMName <VM Name> -Name <Extension Name>
下面是示例输出:
PS C:\WINDOWS\system32> Get-AzureRmVMExtension -ResourceGroupName myasegpuvm1 -VMName VM5 -Name CustomScriptExtension
ResourceGroupName : myasegpuvm1
VMName : VM5
Name : CustomScriptExtension
Location : dbelocal
Etag : null
Publisher : Microsoft.Compute
ExtensionType : CustomScriptExtension
TypeHandlerVersion : 1.10
Id : /subscriptions/947b3cfd-7a1b-4a90-7cc5-e52caf221332/resourceGroups/myasegpuvm1/providers/Microsoft.Compute/virtualMachines/VM5/extensions/CustomScriptExtension
PublicSettings : {
"commandToExecute": "md C:\\Users\\Public\\Documents\\test"
}
ProtectedSettings :
ProvisioningState : Creating
Statuses :
SubStatuses :
AutoUpgradeMinorVersion : True
ForceUpdateTag :
PS C:\WINDOWS\system32>
注意
部署完成后,ProvisioningState
会变为 Succeeded
。
扩展执行输出会记录到以下文件:/var/lib/waagent/custom-script/download/0/
。
删除自定义脚本扩展
若要删除自定义脚本扩展,请使用以下命令:
Remove-AzureRmVMExtension -ResourceGroupName <Resource group name> -VMName <VM name> -Name <Extension name>
下面是示例输出:
PS C:\WINDOWS\system32> Remove-AzureRmVMExtension -ResourceGroupName myasegpuvm1 -VMName VM6 -Name LinuxCustomScriptExtension
Virtual machine extension removal operation
This cmdlet will remove the specified virtual machine extension. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Yes
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK