Distribuire l'applicazione nei set di scalabilità delle macchine virtuali

Questo articolo descrive diverse modalità di installazione di software durante il provisioning del set di scalabilità.

È possibile esaminare l'articolo Panoramica sulla progettazione del set di scalabilità che descrive alcuni dei limiti imposti dal set di scalabilità della macchina virtuale.

Acquisire e riusare un'immagine

È possibile usare una macchina virtuale disponibile in Azure per preparare un'immagine di base per il set di scalabilità. Questo processo crea un disco gestito nell'account di archiviazione, a cui è possibile fare riferimento come immagine di base per il set di scalabilità.

Seguire anche questa procedura:

  1. Creare una macchina virtuale di Azure

  2. Connettersi da remoto alla macchina virtuale e personalizzare il sistema in base alle esigenze.

    Se lo si desidera, a questo punto è possibile installare l'applicazione. Tuttavia, tenere presente che per installare l'applicazione a questo punto potrebbe essere necessario un'operazione di aggiornamento più complessa perché potrebbe essere prima necessario rimuoverla. In alternativa, è possibile usare questo passaggio per installare i prerequisiti necessari all'applicazione, ad esempio una funzionalità specifica di runtime o del sistema operativo.

  3. Seguire l'esercitazione "Acquisire una macchina" per Linux o Windows.

  4. Creare un set di scalabilità della macchina virtuale con l'URI dell'immagine acquisito nel passaggio precedente.

Per altre informazioni sui dischi, vedere Panoramica di Managed Disks e Usare dischi dati collegati.

Installare quando viene eseguito il provisioning del set di scalabilità

Le estensioni della macchina virtuale possono essere applicate a un set di scalabilità della macchina virtuale. Con un'estensione della macchina virtuale, è possibile personalizzare le macchine virtuali in un set di scalabilità come gruppo intero. Per altre informazioni sulle estensioni, vedere Estensioni della macchina virtuale.

È possibile usare tre principali estensioni, a seconda che il sistema operativo si basi su Windows o Linux.

Windows

Per un sistema operativo basato su Windows, usare l'estensione Custom Script v1.8 o l'estensione PowerShell DSC.

Custom Script

L'estensione Custom Script esegue uno script in ogni istanza della macchina virtuale nel set di scalabilità. Un file di configurazione o una variabile indica i file che vengono scaricati nella macchina virtuale, quindi il comando eseguito. Questi vengono usati ad esempio per eseguire un programma di installazione, uno script, un file batch o un file eseguibile.

PowerShell usa una tabella hash per le impostazioni. Questo esempio configura l'estensione dello script personalizzato per eseguire uno script di PowerShell che consente di installare IIS.

# Setup extension configuration hashtable variable
$customConfig = @{
  "fileUris" = @("https://raw.githubusercontent.com/MicrosoftDocs/azure-cloud-services-files/temp/install-iis.ps1");
  "commandToExecute" = "PowerShell -ExecutionPolicy Unrestricted .\install-iis.ps1 >> `"%TEMP%\StartupLog.txt`" 2>&1";
};

# Add the extension to the config
Add-AzureRmVmssExtension -VirtualMachineScaleSet $vmssConfig -Publisher Microsoft.Compute -Type CustomScriptExtension -TypeHandlerVersion 1.8 -Name "customscript1" -Setting $customConfig

# Send the new config to Azure
Update-AzureRmVmss -ResourceGroupName $rg -Name "MyVmssTest143"  -VirtualMachineScaleSet $vmssConfig

Importante

Usare lo switch -ProtectedSetting per tutte le impostazioni che potrebbero contenere informazioni riservate.


L'interfaccia della riga di comando di Azure usa un file JSON per le impostazioni. Questo esempio configura l'estensione dello script personalizzato per eseguire uno script di PowerShell che consente di installare IIS. Salvare il file JSON seguente come settings.json.

{
  "fileUris": [
    "https://raw.githubusercontent.com/MicrosoftDocs/azure-cloud-services-files/temp/install-iis.ps1"
  ],
  "commandToExecute": "PowerShell -ExecutionPolicy Unrestricted .\install-iis.ps1 >> \"%TEMP%\StartupLog.txt\" 2>&1"
}

Quindi, eseguire questo comando dell'interfaccia della riga di comando di Azure.

az vmss extension set --publisher Microsoft.Compute --version 1.8 --name CustomScriptExtension --resource-group myResourceGroup --vmss-name myScaleSet --settings @settings.json

Importante

Usare lo switch --protected-settings per tutte le impostazioni che potrebbero contenere informazioni riservate.

PowerShell DSC

È possibile usare PowerShell DSC per personalizzare le istanze della macchina virtuale del set di scalabilità. L'estensione DSC pubblicata da Microsoft.Powershell distribuisce ed esegue la configurazione DSC indicata in ogni istanza della macchina virtuale. Un file di configurazione o una variabile indica l'estensione in cui si trova il pacchetto .zip e la combinazione di funzione e script da eseguire.

PowerShell usa una tabella hash per le impostazioni. Questo esempio distribuisce un pacchetto DSC che consente di installare IIS.

# Setup extension configuration hashtable variable
$dscConfig = @{
  "wmfVersion" = "latest";
  "configuration" = @{
    "url" = "https://github.com/MicrosoftDocs/azure-cloud-services-files/raw/temp/dsc.zip";
    "script" = "configure-http.ps1";
    "function" = "WebsiteTest";
  };
}

# Add the extension to the config
Add-AzureRmVmssExtension -VirtualMachineScaleSet $vmssConfig -Publisher Microsoft.Powershell -Type DSC -TypeHandlerVersion 2.24 -Name "dsc1" -Setting $dscConfig

# Send the new config to Azure
Update-AzureRmVmss -ResourceGroupName $rg -Name "myscaleset1"  -VirtualMachineScaleSet $vmssConfig

Importante

Usare lo switch -ProtectedSetting per tutte le impostazioni che potrebbero contenere informazioni riservate.


L'interfaccia della riga di comando di Azure usa un file JSON per le impostazioni. Questo esempio distribuisce un pacchetto DSC che consente di installare IIS. Salvare il file JSON seguente come settings.json.

{
  "wmfVersion": "latest",
  "configuration": {
    "url": "https://github.com/MicrosoftDocs/azure-cloud-services-files/raw/temp/dsc.zip",
    "script": "configure-http.ps1",
    "function": "WebsiteTest"
  }
}

Quindi, eseguire questo comando dell'interfaccia della riga di comando di Azure.

az vmss extension set --publisher Microsoft.Powershell --version 2.24 --name DSC --resource-group myResourceGroup --vmss-name myScaleSet --settings @settings.json

Importante

Usare lo switch --protected-settings per tutte le impostazioni che potrebbero contenere informazioni riservate.

Linux

Durante la creazione Linux può usare l'estensione Custom Script v2.0 o cloud-init.

Custom script è un'estensione semplice che scarica i file per istanze di macchine virtuali ed esegue un comando.

Custom Script

Salvare il file JSON seguente come settings.json.

{
  "fileUris": [
    "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/installserver.sh",
    "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vmss-bottle-autoscale/workserver.py"
  ],
  "commandToExecute": "bash installserver.sh"
}

Usare l'interfaccia della riga di comando di Azure per aggiungere questa estensione a un set di scalabilità della macchina virtuale esistente. Ogni macchina virtuale nel set di scalabilità esegue automaticamente l'estensione.

az vmss extension set --publisher Microsoft.Azure.Extensions --version 2.0 --name CustomScript --resource-group myResourceGroup --vmss-name myScaleSet --settings @settings.json

Importante

Usare lo switch --protected-settings per tutte le impostazioni che potrebbero contenere informazioni riservate.

cloud-init

Cloud-Init viene usata durante la creazione del set di scalabilità. Innanzitutto, creare un file locale denominato cloud-init.txt e aggiungere la configurazione. Ad esempio, vedere questo gist

Usare l'interfaccia della riga di comando di Azure per creare un set di scalabilità. Il campo --custom-data accetta il nome del file di uno script cloud-init.

az vmss create \
  --resource-group myResourceGroupScaleSet \
  --name myScaleSet \
  --image Canonical:UbuntuServer:14.04.4-LTS:latest \
  --upgrade-policy-mode automatic \
  --custom-data cloud-init.txt \
  --admin-username azureuser \
  --generate-ssh-keys      

Gestione degli aggiornamenti dell'applicazione

Se l'applicazione è stata distribuita tramite un'estensione, modificare la definizione dell'estensione. Questa modifica fa sì che l'estensione venga ridistribuita a tutte le istanze della macchina virtuale. È necessario modificare alcuni elementi dell'estensione, ad esempio è possibile rinominare un file di riferimento, altrimenti Azure non vede la modifica apportata all'estensione.

Se è stato eseguito un backup dell'applicazione nell'immagine del sistema operativo, usare una pipeline di distribuzione automatica per gli aggiornamenti dell'applicazione. Progettare l'architettura per facilitare il passaggio rapido di un set di scalabilità temporaneo in produzione. Un buon esempio di questo approccio è rappresentato dall'uso del driver Spinnaker di Azure - http://www.spinnaker.io/.

Packer e Terraform supportano Azure Resource Manager; pertanto, è anche possibile definire le immagini "come codice" e compilarle in Azure, quindi usare il disco rigido virtuale nel set di scalabilità. Tuttavia, tale approccio diventerebbe problematico per le immagini Marketplace, in cui gli script personalizzati/le estensioni acquistano importanza in quanto i bit non vengono modificati direttamente da Marketplace.

Cosa accade in caso di aumento della capacità di un set di scalabilità

Quando si aggiungono una o più macchine virtuali a un set di scalabilità, l'applicazione viene installata automaticamente. Se ad esempio il set di scalabilità ha estensioni definite, queste vengono eseguite ogni volta che viene creata una nuova macchina virtuale. Se il set di scalabilità è basato su un'immagine personalizzata, qualsiasi nuova macchina virtuale è una copia dell'immagine di origine personalizzata. Se le macchine virtuali del set di scalabilità sono host del contenitore, potrebbe essere necessario il codice di avvio per caricare i contenitori in un'estensione Custom Script. In alternativa, un'estensione potrebbe installare un agente che esegue la registrazione con un agente di orchestrazione del cluster, ad esempio il servizio contenitore di Azure.

Come distribuire un aggiornamento del sistema operativo nei domini di aggiornamento

Si supponga di voler aggiornare un'immagine del sistema operativo mantenendo in esecuzione il set di scalabilità della macchina virtuale. PowerShell e l'interfaccia della riga di comando di Azure possono aggiornare le immagini della macchina virtuale, per una macchina virtuale alla volta. L'articolo Aggiornare un set di scalabilità di macchine virtuali include altre informazioni sulle opzioni disponibili per eseguire aggiornamenti del sistema operativo in un set di scalabilità della macchina virtuale.

Passaggi successivi