Condividi tramite


Distribuire l'estensione script personalizzata nelle macchine virtuali in esecuzione nel dispositivo Azure Stack Edge Pro

SI APPLICA A: Sì per SKU GPU ProAzure Stack Edge Pro - GPUSì per lo SKU Pro 2Azure Stack Edge Pro 2Sì per SKU R ProAzure Stack Edge Pro RSì per SKU R MiniAzure Stack Edge Mini R

L'estensione per script personalizzati scarica ed esegue script o comandi nelle macchine virtuali in esecuzione nei dispositivi Azure Stack Edge Pro. Questo articolo illustra in dettaglio come installare ed eseguire l'estensione script personalizzata usando un modello di Azure Resource Manager.

Informazioni sull'estensione script personalizzata

L'estensione script personalizzata è utile per la configurazione post-distribuzione, l'installazione del software o qualsiasi altra attività di configurazione/gestione. È possibile scaricare script da Archiviazione di Azure o da un altro percorso Internet accessibile oppure è possibile fornire script o comandi al runtime dell'estensione.

L'estensione per script personalizzati è integrabile con i modelli di Azure Resource Manager. È anche possibile eseguirla tramite l'interfaccia della riga di comando di Azure, PowerShell o l'API REST di Macchine virtuali di Azure.

Sistema operativo per l'estensione script personalizzata

Sistema operativo supportato per l'estensione script personalizzata in Windows

L'estensione script personalizzata per Windows verrà eseguita nei sistemi operativi seguenti. Altre versioni possono funzionare ma non sono state testate internamente nelle macchine virtuali in esecuzione nei dispositivi Azure Stack Edge Pro.

Distribuzione Versione
Windows Server 2019 Core
Windows Server 2016 Core

Sistema operativo supportato per l'estensione script personalizzata in Linux

L'estensione script personalizzata per Linux verrà eseguita nei sistemi operativi seguenti. Altre versioni possono funzionare ma non sono state testate internamente nelle macchine virtuali in esecuzione nei dispositivi Azure Stack Edge Pro.

Distribuzione Versione
Linux Ubuntu: 18.04 LTS
Linux: Red Hat Enterprise Linux 7.4, 7.5, 7.7

Prerequisiti

  1. Scaricare i modelli di macchina virtuale e i file di parametri nel computer client. Decomprimere il download in una directory che verrà usata come directory di lavoro.

  2. Nel dispositivo deve essere creata e distribuita una macchina virtuale. Per creare macchine virtuali, seguire tutti i passaggi descritti in Distribuire una macchina virtuale in Azure Stack Edge Pro usando i modelli.

    Se è necessario scaricare uno script, ad esempio da GitHub o Archiviazione di Azure esternamente, durante la configurazione della rete di calcolo, abilitare la porta connessa a Internet per il calcolo. In questo modo è possibile scaricare lo script.

    Nell'esempio seguente la porta 2 è stata connessa a Internet ed è stata usata per abilitare la rete di calcolo. Se è stato rilevato che Kubernetes non è necessario nel passaggio precedente, è possibile ignorare l'assegnazione ip del nodo Kubernetes e l'assegnazione ip del servizio esterno.

    Screenshot del riquadro Calcolo per un dispositivo Azure Stack Edge. Le impostazioni di calcolo per la porta 2 sono evidenziate.

Installare l'estensione script personalizzata

A seconda del sistema operativo per la macchina virtuale, è possibile installare l'estensione script personalizzata per Windows o per Linux.

Estensione script personalizzata per Windows

Per distribuire l'estensione script personalizzata per Windows per una macchina virtuale in esecuzione nel dispositivo, modificare il addCSExtWindowsVM.parameters.json file dei parametri e quindi distribuire il modello addCSextensiontoVM.json.

Modificare file dei parametri JSON

Il file addCSExtWindowsVM.parameters.json accetta i parametri seguenti:

{
    "$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>"
            }
        }
    }
}

Specificare il nome della macchina virtuale, il nome dell'estensione e il comando da eseguire.

Ecco il file di parametri di esempio usato in questo articolo.

{
    "$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"
            }
        }
    }
}

Distribuire un modello

Distribuire il modello addCSextensiontoVM.json. Questo modello distribuisce l'estensione in una macchina virtuale esistente. Eseguire il comando riportato di seguito:

$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 distribuzione dell'estensione è un processo a esecuzione prolungata e il completamento richiede circa 10 minuti.

Di seguito è riportato un output di esempio:

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>

Tenere traccia della distribuzione

Per controllare lo stato di distribuzione delle estensioni per una determinata macchina virtuale, eseguire il comando seguente:

Get-AzureRmVMExtension -ResourceGroupName <Name of resource group> -VMName <Name of VM> -Name <Name of the extension>

Di seguito è riportato un output di esempio:

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

Al termine della distribuzione, ProvisioningState si trasforma in Succeeded.

L'output dell'estensione viene registrato nei file presenti nella cartella seguente nella macchina virtuale di destinazione.

C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension

I file specificati vengono scaricati nella cartella seguente nella macchina virtuale di destinazione.

C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.*\Downloads\<n>

dove n è un numero intero decimale, che può cambiare tra le esecuzioni dell'estensione. Il valore 1.* corrisponde al valore corrente effettivo typeHandlerVersion dell'estensione. Ad esempio, la directory effettiva in questa istanza era C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.9\Downloads\0.

In questa istanza, il comando da eseguire per l'estensione personalizzata è: md C:\\Users\\Public\\Documents\\test. Quando l'estensione è installata correttamente, è possibile verificare che la directory sia stata creata nella macchina virtuale nel percorso specificato nel comando .

Estensione script personalizzata per Linux

Per distribuire l'estensione script personalizzata per Windows per una macchina virtuale in esecuzione nel dispositivo, modificare il addCSExtLinuxVM.parameters.json file dei parametri e quindi distribuire il modello addCSExtensiontoVM.json.

Modificare file dei parametri JSON

Il file addCSExtLinuxVM.parameters.json accetta i parametri seguenti:

{
    "$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>"
            }
        }
    }
}

Specificare il nome della macchina virtuale, il nome dell'estensione e il comando da eseguire.

Ecco un file di parametri di esempio usato in questo articolo:

$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 distribuzione dell'estensione è un processo a esecuzione prolungata e il completamento richiede circa 10 minuti.

Di seguito è riportato un output di esempio:

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 stato impostato per creare un file file2.txt nella /home/Administrator directory e il contenuto del file è some text. In questo caso, è possibile verificare che il file sia stato creato nel percorso specificato.

Administrator@VM6:~$ dir
file2.txt
Administrator@VM6:~$ cat file2.txt
some text
Administrator@VM6:

Tenere traccia dello stato della distribuzione

La distribuzione dei modelli è un processo a esecuzione prolungata. Per controllare lo stato di distribuzione delle estensioni per una determinata macchina virtuale, aprire un'altra sessione di PowerShell (esegui come amministratore). Esegui questo comando:

Get-AzureRmVMExtension -ResourceGroupName myResourceGroup -VMName <VM Name> -Name <Extension Name>

Di seguito è riportato un output di esempio:

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

Al termine della distribuzione, ProvisioningState si trasforma in Succeeded.

L'output dell'esecuzione dell'estensione viene registrato nel file seguente: /var/lib/waagent/custom-script/download/0/.

Rimuovere l'estensione script personalizzata

Per rimuovere l'estensione script personalizzata, usare il comando seguente:

Remove-AzureRmVMExtension -ResourceGroupName <Resource group name> -VMName <VM name> -Name <Extension name>

Di seguito è riportato un output di esempio:

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

Passaggi successivi

Cmdlet di Azure Resource Manager