Aggiornare un set di scalabilità di macchine virtualiUpgrade a virtual machine scale set

Questo articolo descrive come eseguire un aggiornamento del sistema operativo a un set di scalabilità di macchine virtuali di Azure senza tempi di inattività.This article describes how you can roll out an OS update to an Azure virtual machine scale set without any downtime. In questo contesto, un aggiornamento del sistema operativo riguarda la modifica della versione/SKU del sistema operativo oppure la modifica dell'URI di un'immagine personalizzata.In this context, an OS update involves changing the version or SKU of the OS or changing the URI of a custom image. L'aggiornamento senza tempi di inattività implica l'aggiornamento di una macchina virtuale alla volta o in gruppi, ad esempio un dominio di errore alla volta, anziché contemporaneamente.Updating without downtime means updating virtual machines one at a time or in groups (such as one fault domain at a time) rather than all at once. In questo modo, è possibile mantenere in esecuzione tutte le macchine virtuali non in fase di aggiornamento.By doing so, any virtual machines that are not being upgraded can keep running.

Per evitare ambiguità, si distinguono quattro tipi di aggiornamento del sistema operativo che è possibile eseguire:To avoid ambiguity, let’s distinguish four types of OS update you might want to perform:

  • La modifica della versione o della SKU di un'immagine della piattaforma.Changing the version or SKU of a platform image. Ad esempio la modifica della versione Ubuntu 14.04.2-LTS da 14.04.201506100 a 14.04.201507060 o la modifica della SKU Ubuntu 15.10/più recente a 16.04.0-LTS/più recente.For example, changing Ubuntu 14.04.2-LTS version from 14.04.201506100 to 14.04.201507060, or changing the Ubuntu 15.10/latest SKU to 16.04.0-LTS/latest. Questo scenario è illustrato in questo articolo.This scenario is covered in this article.
  • La modifica dell'URI che punta a una nuova versione di un'immagine personalizzata creata (properties > virtualMachineProfile > storageProfile > osDisk > image > uri).Changing the URI that points to a new version of a custom image you built (properties > virtualMachineProfile > storageProfile > osDisk > image > uri). Questo scenario è illustrato in questo articolo.This scenario is covered in this article.
  • Modifica del riferimento all'immagine di un set di scalabilità creato con i dischi gestiti di Azure.Changing the image reference of a scale set that was created using Azure Managed Disks.
  • L'applicazione di patch del sistema operativo da una macchina virtuale (esempi di questo tipo includono l'installazione di una patch di sicurezza e l'esecuzione di Windows Update).Patching the OS from within a virtual machine (examples of this include installing a security patch and running Windows Update). Questo scenario è supportato ma non è trattato in questo articolo.This scenario is supported but not covered in this article.

I set di scalabilità delle macchine virtuali che vengono distribuiti come parte di un cluster di Azure Service Fabric non sono trattati qui.Virtual machine scale sets that are deployed as part of an Azure Service Fabric cluster are not covered here. Per ulteriori informazioni sulle patch di Service Fabric, vedere Patch del sistema operativo del cluster di Service FabricFor more information about patching Service Fabric, see Patch Windows OS in your Service Fabric cluster

La sequenza di base per la modifica della versione/SKU del sistema operativo di un'immagine della piattaforma o dell'URI di un'immagine personalizzata è simile alla seguente:The basic sequence for changing the OS version/SKU of a platform image or the URI of a custom image looks as follows:

  1. Ottenere il modello del set di scalabilità di macchine virtuali.Get the virtual machine scale set model.
  2. Modificare la versione, la SKU, il riferimento all'immagine o il valore dell'URI del modello.Change the version, SKU, image reference, or URI value in the model.
  3. Aggiornare il modello.Update the model.
  4. Eseguire una chiamata manualUpgrade sulle macchine virtuali nel set di scalabilità.Do a manualUpgrade call on the virtual machines in the scale set. Questo passaggio è applicabile solo se la proprietà upgradePolicy è impostata su Manuale nel set di scalabilità.This step is only relevant if upgradePolicy is set to Manual in your scale set. Se è impostata su Automatico, tutte le macchine virtuali vengono aggiornate contemporaneamente, con conseguente tempo di inattività.If it is set to Automatic, all the virtual machines are upgraded at once, thus causing downtime.

Tenendo conto di queste informazioni, si noti come è possibile aggiornare la versione di un set di scalabilità in PowerShell e tramite l'API REST.With this information in mind, let’s see how you could update the version of a scale set in PowerShell, and by using the REST API. Questi esempi riguardano il caso di un'immagine di piattaforma, ma le informazioni fornite in questo articolo saranno sufficienti a adattare il processo per un'immagine personalizzata.These examples cover the case of a platform image, but this article provides enough information for you to adapt this process to a custom image.

PowerShellPowerShell

Questo esempio aggiorna un set di scalabilità di una macchina virtuale Windows creando una nuova versione 4.0.20160229.This example updates a Windows virtual machine scale set (creating to the new version 4.0.20160229. Dopo l'aggiornamento del modello viene eseguito un aggiornamento di un'istanza di macchina virtuale alla volta.After updating the model, it does an update one virtual machine instance at a time.

$rgname = "myrg"
$vmssname = "myvmss"
$newversion = "4.0.20160229"
$instanceid = "1"

# get the VMSS model
$vmss = Get-AzureRmVmss -ResourceGroupName $rgname -VMScaleSetName $vmssname

# set the new version in the model data
$vmss.virtualMachineProfile.storageProfile.imageReference.version = $newversion

# update the virtual machine scale set model
Update-AzureRmVmss -ResourceGroupName $rgname -Name $vmssname -VirtualMachineScaleSet $vmss

# now start updating instances
Update-AzureRmVmssInstance -ResourceGroupName $rgname -VMScaleSetName $vmssname -InstanceId $instanceId

Se si sta aggiornando l'URI per un'immagine personalizzata anziché la modifica di una versione dell'immagine della piattaforma, sostituire la riga "impostare la nuova versione" con un comando che aggiorna l'URI dell'immagine di origine.If you are updating the URI for a custom image instead of changing a platform image version, replace the “set the new version” line with a command that updates the source image URI. Ad esempio, se il set di scalabilità è stato creato senza usare i dischi gestiti di Azure, l'aggiornamento sarebbe simile al seguente:For example, if the scale set was created without using Azure Managed Disks, the update would look like this:

# set the new version in the model data
$vmss.virtualMachineProfile.storageProfile.osDisk.image.uri= $newURI

Se è stato creato un set di scalabilità basata su immagini personalizzate utilizzando i dischi gestiti di Azure, verrà aggiornato il riferimento all'immagine.If a custom image-based scale set was created using Azure Managed Disks, then the image reference would be updated. Ad esempio: For example:

# set the new version in the model data
$vmss.virtualMachineProfile.storageProfile.imageReference.id = $newImageReference

API RESTThe REST API

Di seguito sono riportati due esempi di Python che usano l'API REST di Azure per implementare un aggiornamento di versione del sistema operativo.Here are a couple of Python examples that use the Azure REST API to roll out an OS version update. Entrambi usano la libreria azurerm semplificata della funzione wrapper dell'API REST di Azure per eseguire un'operazione GET sul modello del set di scalabilità, seguiti da un'operazione PUT con un modello aggiornato.Both use the lightweight azurerm library of Azure REST API wrapper functions to do a GET on the scale set model, followed by a PUT with an updated model. Gli esempi esaminano le viste delle istanze della macchina virtuale per l'individuazione delle macchine virtuali tramite il dominio di aggiornamento.They also look at virtual machine instances views to identify the virtual machines by update domain.

VmssupgradeVmssupgrade

Vmssupgrade è uno script Python utile per implementare un aggiornamento del sistema operativo per un set di scalabilità di macchine virtuali in esecuzione, un dominio di aggiornamento alla volta.Vmssupgrade is a Python script that's used to roll out an OS upgrade to a running virtual machine scale set one update domain at a time.

Script Vmssupgrade per la scelta delle macchine virtuali o di un dominio di aggiornamento

Questo script consente di scegliere le macchine virtuali specifiche per aggiornare o specificare un dominio di aggiornamento.This script lets you choose specific virtual machines to update or specify an update domain. Supporta la modifica di una versione dell'immagine della piattaforma o la modifica dell'URI di un'immagine personalizzata.It supports changing a platform image version or changing the URI of a custom image.

VmsseditorVmsseditor

Vmsseditor è un editor generico per i set di scalabilità di macchine virtuali che mostra lo stato della macchina virtuale come heatmap in cui una riga rappresenta un dominio di aggiornamento.Vmsseditor is a general-purpose editor for virtual machine scale sets that shows virtual machine status as a heatmap where one row represents one update domain. Tra le altre cose, è possibile aggiornare il modello per un set di scalabilità con una nuova versione, SKU o URI dell'immagine personalizzata e quindi selezionare i domini di errore da aggiornare.Among other things, you can update the model for a scale set with a new version, SKU, or custom image URI, and then pick fault domains to upgrade. A questo scopo, tutte le macchine virtuali in questo dominio di aggiornamento vengono aggiornate al nuovo modello.When you do so, all the virtual machines in that update domain are upgraded to the new model. In alternativa, è possibile eseguire un aggiornamento in sequenza in base alla dimensione di batch scelta.Alternatively, you can do a rolling upgrade based on the batch size of your choice.

La schermata seguente illustra un modello di un set di scalabilità per Ubuntu 14.04-2LTS versione 14.04.201507060.The following screenshot shows a model of a scale set for Ubuntu 14.04-2LTS version 14.04.201507060. Da quando è stata acquisita questa schermata, sono state aggiunte a questo strumento molte opzioni.Many more options have been added to this tool since this screenshot was taken.

Modello Vmsseditor di un set di scalabilità per Ubuntu 14.04-2LTS

Dopo aver selezionato Aggiorna e Dettagli, le macchine virtuali nel dominio di aggiornamento 0 avviano l'aggiornamento.After you click Upgrade and then Get Details, virtual machines in UD 0 start to update.

Vmsseditor che illustra un aggiornamento in corso