在執行於 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 Resource Manager 範本來安裝和執行自訂指令碼延伸模組。
關於自訂指令碼延伸模組
自訂指令碼延伸模組適用於部署後設定、軟體安裝或其他任何設定/管理工作。 您可以從 Azure 儲存體或其他可存取的網際網路位置下載指令碼,或是將指令碼或命令提供給延伸模組執行階段。
自訂指令碼功能可以與 Azure Resource Manager 範本整合。 您也可以使用 Azure CLI、PowerShell 或 Azure 虛擬機器 REST API 來執行它。
適用於自訂指令碼延伸模組的 OS
Windows 上的自訂指令碼延伸模組所支援的 OS
適用於 Windows 的「自訂指令碼延伸模組」會在下列 OS 上執行。 其他版本可能會正常運作,但尚未在 Azure Stack Edge Pro 裝置上執行的 VM 進行過內部測試。
Distribution | 版本 |
---|---|
Windows Server 2019 | 核心 |
Windows Server 2016 | 核心 |
Linux 上的自訂指令碼延伸模組所支援的 OS
適用於 Linux 的自訂指令碼延伸模組會在下列 OS 上執行。 其他版本可能會正常運作,但尚未在 Azure Stack Edge Pro 裝置上執行的 VM 進行過內部測試。
Distribution | 版本 |
---|---|
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 儲存體等外部來源下載指令碼,又需要設定計算網路,請啟用連線到網際網路的連接埠以進行計算。 這可讓您下載指令碼。
在下列範例中,連接埠 2 連線到網際網路並用於啟用計算網路的範例。 如果您發現先前的步驟中不需要 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