Implementación de una extensión de script personalizado en máquinas virtuales que se ejecutan en el dispositivo Azure Stack Edge Pro
SE APLICA A: Azure Stack Edge Pro: GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
La extensión de script personalizado descarga y ejecuta scripts o comandos en máquinas virtuales que se ejecutan en los dispositivos Azure Stack Edge Pro. En este artículo se detalla cómo instalar y ejecutar la extensión de script personalizado mediante el uso de una plantilla de Azure Resource Manager.
Acerca de la extensión de script personalizado
La extensión de script personalizado es útil para la configuración posterior a la implementación, la instalación de software o cualquier otra tarea de configuración o administración. Los scripts se pueden descargar desde Azure Storage u otra ubicación de Internet accesible, o se pueden proporcionar scripts o comandos al tiempo de ejecución de la extensión.
La extensión de script personalizado se integra con las plantillas de Azure Resource Manager. También puede ejecutarla mediante la CLI de Azure, PowerShell o la API REST de Azure Virtual Machines.
SO para la extensión de script personalizado
SO admitido para la extensión de script personalizado en Windows
La extensión de script personalizado para Windows se ejecutará en los siguientes sistemas operativos. Otras versiones pueden funcionar, pero no se han probado internamente en máquinas virtuales que se ejecutan en dispositivos Azure Stack Edge Pro.
Distribución | Versión |
---|---|
Windows Server 2019 | Core |
Windows Server 2016 | Core |
SO admitido para la extensión de script personalizado en Linux
La extensión de script personalizado para Linux se ejecutará en los siguientes sistemas operativos. Otras versiones pueden funcionar, pero no se han probado internamente en máquinas virtuales que se ejecutan en dispositivos Azure Stack Edge Pro.
Distribución | Versión |
---|---|
Linux: Ubuntu | 18.04 LTS |
Linux: Red Hat Enterprise Linux | 7.4, 7.5, 7.7 |
Requisitos previos
Descargue las plantillas de máquina virtual y los archivos de parámetros en la máquina cliente. Descomprima la descarga en un directorio que usará como directorio de trabajo.
Debe tener una máquina virtual creada e implementada en el dispositivo. Para crear máquinas virtuales, siga todos los pasos de Implementación de máquinas virtuales en el dispositivo Azure Stack Edge Pro mediante plantillas.
Si tiene que descargar un script de forma externa de la misma forma que desde GitHub o Azure Storage, durante la configuración de la red de proceso, habilite el puerto conectado a Internet para el proceso. Esto le permite descargar el script.
En el ejemplo siguiente, el puerto 2 estaba conectado a Internet y se usaba para habilitar la red de proceso. Si ha identificado que Kubernetes no es necesario en el paso anterior, puede omitir la dirección IP del nodo de Kubernetes y la asignación de direcciones IP del servicio externo.
Instalación de la extensión de script personalizado
En función del sistema operativo de la máquina virtual, podría instalar la extensión de script personalizado para Windows o para Linux.
Extensión de la secuencia de comandos personalizada para Windows
Para implementar la extensión de script personalizado para Windows para una máquina virtual que se ejecuta en el dispositivo, edite el archivo de parámetros addCSExtWindowsVM.parameters.json
y, a continuación, implemente la plantilla addCSextensiontoVM.json
.
Edición del archivo de parámetros
El archivo addCSExtWindowsVM.parameters.json
toma los parámetros siguientes:
{
"$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>"
}
}
}
}
Proporcione el nombre de la máquina virtual, el nombre de la extensión y el comando que quiere ejecutar.
Este es el archivo de parámetros de ejemplo que se usó en este artículo.
{
"$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"
}
}
}
}
Implementar plantilla
Implemente la plantilla addCSextensiontoVM.json
. Esta plantilla implementa la extensión en una máquina virtual existente. Ejecute el comando siguiente:
$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>"
Nota:
La implementación de la extensión es un trabajo de larga duración y tarda unos 10 minutos en completarse.
Este es una salida de ejemplo:
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>
Seguimiento de la implementación
Para comprobar el estado de implementación de las extensiones de una máquina virtual determinada, ejecute el comando siguiente:
Get-AzureRmVMExtension -ResourceGroupName <Name of resource group> -VMName <Name of VM> -Name <Name of the extension>
Este es una salida de ejemplo:
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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>
Nota:
Una vez completada la implementación, ProvisioningState
cambia a Succeeded
.
La salida de la extensión se registra en archivos que se encuentran en la siguiente carpeta de la máquina virtual de destino.
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension
Los archivos especificados se descargan en la siguiente carpeta de la máquina virtual de destino.
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>
donde n es un entero decimal que puede variar entre las ejecuciones de la extensión. El valor 1.* coincide con el valor typeHandlerVersion
actual y real de la extensión. Por ejemplo, el directorio real de esta instancia era C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0
.
En esta instancia, el comando a ejecutar para la extensión personalizada era: md C:\\Users\\Public\\Documents\\test
. Cuando la extensión se haya instalado correctamente, puede comprobar que el directorio se ha creado en la máquina virtual en la ruta de acceso especificada en el comando.
Extensión de script personalizado para Linux
Para implementar la extensión de script personalizado para Windows para una máquina virtual que se ejecuta en el dispositivo, edite el archivo de parámetros addCSExtLinuxVM.parameters.json
y, a continuación, implemente la plantilla addCSExtensiontoVM.json
.
Edición del archivo de parámetros
El archivo addCSExtLinuxVM.parameters.json
toma los parámetros siguientes:
{
"$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>"
}
}
}
}
Proporcione el nombre de la máquina virtual, el nombre de la extensión y el comando que quiere ejecutar.
Este es un archivo de parámetros de ejemplo que se usó en este artículo:
$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>"
Nota:
La implementación de la extensión es un trabajo de larga duración y tarda unos 10 minutos en completarse.
Este es una salida de ejemplo:
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
se estableció para crear un archivo file2.txt
en el directorio /home/Administrator
y el contenido del archivo es some text
. En este caso, puede comprobar que el archivo se creó en la ruta de acceso especificada.
Administrator@VM6:~$ dir
file2.txt
Administrator@VM6:~$ cat file2.txt
some text
Administrator@VM6:
Seguimiento del estado de la implementación
La implementación de la plantilla es un trabajo de larga duración. Para comprobar el estado de implementación de las extensiones de una máquina virtual determinada, abra otra sesión de PowerShell (ejecutar como administrador). Ejecute el siguiente comando:
Get-AzureRmVMExtension -ResourceGroupName myResourceGroup -VMName <VM Name> -Name <Extension Name>
Este es una salida de ejemplo:
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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>
Nota:
Una vez completada la implementación, ProvisioningState
cambia a Succeeded
.
La salida de la ejecución de las extensiones se registra en el archivo siguiente:/var/lib/waagent/custom-script/download/0/
.
Eliminación de la extensión de script personalizado
Para quitar la extensión de script personalizado, use el siguiente comando:
Remove-AzureRmVMExtension -ResourceGroupName <Resource group name> -VMName <VM name> -Name <Extension name>
Este es una salida de ejemplo:
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