Tutorial: Modificación de un conjunto de escalado de máquinas virtuales mediante PowerShell
A lo largo del ciclo de vida de las aplicaciones, puede que tenga la necesidad de modificar o actualizar el conjunto de escalado de máquinas virtuales. Estas actualizaciones pueden incluir cómo actualizar la configuración del conjunto de escalado o cambiar la configuración de la aplicación. En este artículo se describe cómo modificar un conjunto de escalado existente mediante PowerShell.
Actualización del modelo del conjunto de escalado
Un conjunto de escalado tiene un "modelo de conjunto de escalado" que captura el estado deseado del conjunto de escalado como un todo. Para consultar el modelo de un conjunto de escalado, puede usar Get-AzVmss.
Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
La presentación exacta de la salida depende de las opciones proporcionadas al comando. En el ejemplo siguiente se muestra una salida de ejemplo condensada de PowerShell:
Sku :
Name : Standard_DS1_v2
Tier : Standard
Capacity : 2
ProvisioningState : Succeeded
SinglePlacementGroup : False
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
Name : myScaleSet
Type : Microsoft.Compute/virtualMachineScaleSets
Location : eastus
VirtualMachineProfile :
ComputerNamePrefix : myScaleSe
ProvisionVMAgent : True
EnableAutomaticUpdates : True
PatchMode : AutomaticByOS
AssessmentMode : ImageDefault
EnableVMAgentPlatformUpdates : False
AllowExtensionOperations : True
StorageProfile :
Publisher : MicrosoftWindowsServer
Offer : WindowsServer
Sku : 2016-Datacenter
Version : latest
OsDisk :
Caching : None
CreateOption : FromImage
DiskSizeGB : 127
OsType : Windows
StorageAccountType : Premium_LRS
DeleteOption : Delete
NetworkProfile :
NetworkInterfaceConfigurations[0] :
Name : myScaleSet
Primary : True
DisableTcpStateTracking : False
Name : myScaleSet
Subnet :
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSet/subnets/myScaleSet
PrivateIPAddressVersion : IPv4
LoadBalancerBackendAddressPools[0] :
/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSet/backendAddressPools/myScaleSet
EnableIPForwarding : False
DeleteOption : Delete
NetworkApiVersion : 2020-11-01
OrchestrationMode : Flexible
TimeCreated : 12/2/2022 5:41:21 PM
También puede usar Update-AzVmss para actualizar varias propiedades del conjunto de escalado. Por ejemplo, para actualizar el tipo de licencia.
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -LicenseType Windows_Server
Actualización de instancias de máquina virtual individuales en un conjunto de escalado
Al igual que un conjunto de escalado tiene una vista de modelo, cada instancia de máquina virtual de este tiene su propia vista de modelo. Para consultar la vista de modelo de una instancia de máquina virtual de un conjunto de escalado puede usar Get-AzVM.
Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1
ResourceGroupName : myResourceGroup
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1
Name : myScaleSet_Instance1
Type : Microsoft.Compute/virtualMachines
Location : eastus
Extensions : {MicrosoftMonitoringAgent}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
VirtualMachineScaleSet : {Id}
TimeCreated : 12/2/2022 5:41:23 PM
También puede agregar la marca -Status
para obtener la vista de instancia, que proporciona más detalles sobre la máquina virtual.
Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1 -Status
ResourceGroupName : myResourceGroup
Name : MyScaleSet_Instance1
OsName : Windows Server 2016 Datacenter
OsVersion : 10.0.14393.5501
HyperVGeneration : V1
Disks[0] :
Name : myScaleSet_Instance1_disk1_cab60acccff7414b81d60572eeecb9e3
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 12/2/2022 5:41:25 PM
Disks[1] :
Name : disk1
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 12/2/2022 6:33:36 PM
Extensions[0] :
Name : MicrosoftMonitoringAgent
Type : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
TypeHandlerVersion : 1.0.18067.0
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Message : Latest configuration has been applied to the Microsoft Monitoring Agent.
VMAgent :
VmAgentVersion : 2.7.41491.1071
ExtensionHandlers[0] :
Type : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
TypeHandlerVersion : 1.0.18067.0
Status :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Ready
Message : This virtual machine has successfully connected to Azure Log Analytics.
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Ready
Message : GuestAgent is running and processing the extensions.
Time : 12/2/2022 6:34:55 PM
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 12/2/2022 6:33:42 PM
Statuses[1] :
Code : PowerState/running
Level : Info
DisplayStatus : VM running
Estas propiedades describen la configuración de una instancia de máquina virtual en un conjunto de escalado, no la del conjunto de escalado como un todo.
Puede realizar actualizaciones en instancias de máquina virtual individuales en un conjunto de escalado como lo haría con una máquina virtual independiente. Por ejemplo, asociando un nuevo disco de datos a la instancia 1:
$VirtualMachine = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myScaleSet_Instance1".
Add-AzVMDataDisk -VM $VirtualMachine -Name "disk1" -LUN 0 -Caching ReadOnly -DiskSizeinGB 128 -CreateOption Empty
Update-AzVM -ResourceGroupName "myResourceGroup" -VM $VirtualMachine
Incorporación de una instancia al conjunto de escalado
Hay ocasiones en las que es posible que desee agregar una nueva máquina virtual al conjunto de escalado, pero desea opciones de configuración diferentes de las que aparecen en el modelo del conjunto de escalado. Las máquinas virtuales se pueden agregar a un conjunto de escalado durante la creación mediante el comando Get-AzVmss y especificando el nombre del conjunto de escalado al que desea agregar la instancia.
New-AzVM -Name myNewInstance -ResourceGroupName myResourceGroup -image Ubuntu2204 -VmssId /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
ResourceGroupName : myResourceGroup
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance
Name : myNewInstance
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, LinuxConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : mynewinstance-21bc01.eastus.cloudapp.azure.com
VirtualMachineScaleSet : {Id}
TimeCreated : 12/2/2022 6:40:20 PM
Al volver a ejecutar Get-AzVM, podemos ver que se creó la nueva instancia y se agregó al conjunto de escalado existente.
Get-AzVm -ResourceGroupName myResourceGroup
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState
----------------- ---- -------- ------ ------ --- -----------------
myResourceGroup myNewInstance eastus Standard_D2s_v3 Linux myNewInstance Succeeded
myResourceGroup myScaleSet_Instance1 eastus Standard_DS1_v2 Windows myScaleSet-a9f1d54c Succeeded
myResourceGroup myScaleSet_Instance2 eastus Standard_DS1_v2 Windows myScaleSet-4dc708e5 Succeeded
Actualización de las máquinas virtuales con el modelo de conjunto de escalado más reciente
Nota
Los modos de actualización no se admiten actualmente en los conjuntos de escalado de máquinas virtuales que usan el modo de orquestación flexible.
Los conjuntos de escalado tienen una "directiva de actualización" que determina cómo se actualizan las máquinas virtuales con el modelo de conjunto de escalado más reciente. Los tres modos de la directiva de actualización son:
- Automático: en este modo, el conjunto de escalado no ofrece ninguna garantía sobre el orden en el que se desactivan las máquinas virtuales. El conjunto de escalado puede desactivarlas todas al mismo tiempo.
- Gradual: en este modo, el conjunto de escalado implementa la actualización por lotes con un tiempo de pausa opcional entre ellos.
- Manual: en este modo, cuando se actualiza el modelo del conjunto de escalado, no ocurre nada en las máquinas virtuales existentes hasta que se desencadena una actualización manual.
Si el conjunto de escalado está establecido en actualizaciones manuales, puede desencadenar una actualización manual mediante Update-AzVmss.
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet
Nota
Los clústeres de Service Fabric solo pueden usar el modo automático, pero la actualización se administra de forma diferente. Para más información, consulte Actualización de la aplicación de Service Fabric.
Restablecimiento de la imagen inicial de un conjunto de escalado
Virtual Machine Scale Sets generará un nombre único para cada máquina virtual del conjunto de escalado. La convención de nomenclatura difiere en función del modo de orquestación:
- Modo de orquestación flexible:
{scale-set-name}_{8-char-guid}
- Modo de orquestación uniforme:
{scale-set-name}_{instance-id}
En los casos en los que necesite restablecer una instancia de imagen inicial concreta, use Set-AzVmss y especifique el nombre de la instancia.
Set-AzVmssVM -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet -InstanceId myScaleSet_Instance1 -Reimage
Para restablecer la imagen inicial de todas las instancias de un conjunto de escalado, simplemente especifique el nombre del conjunto de escalado y omita los identificadores de instancia.
Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet
Actualización de la imagen del sistema operativo en el conjunto de escalado
Puede que tenga un conjunto de escalado que ejecuta una versión anterior de Ubuntu LTS 18.04. Quiere actualizar a una versión más reciente de Ubuntu LTS 16.04, como 18.04.202210180. La propiedad de versión de referencia de imagen no forma parte de una lista, por lo que puede modificar directamente estas propiedades mediante Update-AzVmss.
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.version=18.04.202210180
Como alternativa, puede cambiar la imagen que se usa el conjunto de escalado. Por ejemplo, es posible que desee actualizar o cambiar una imagen personalizada usada por el conjunto de escalado. Puede cambiar la imagen que usa el conjunto de escalado mediante la actualización de la propiedad de identificador de la referencia de imagen. La propiedad de identificador de referencia de imagen no forma parte de una lista, por lo que puede modificar directamente esta propiedad mediante Update-AzVmss.
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
Si usa imágenes de plataforma de Azure, puede actualizar la imagen mediante la modificación de la propiedad imageReference (para más información, consulte la documentación de API REST).
Nota
Con imágenes de plataforma, es habitual especificar la versión más reciente de la referencia de imagen. Al realizar procedimientos de creación, escalado horizontal y restablecimiento de imagen inicial, las máquinas virtuales se crean con la última versión disponible. Sin embargo, no significa que la imagen del sistema operativo se actualice automáticamente con el tiempo a medida que se lanzan nuevas versiones de imágenes. Una característica independiente proporciona actualizaciones automáticas del sistema operativo. Para más información, consulte la documentación de actualizaciones automáticas del sistema operativo.
Si usa imágenes personalizadas, puede actualizar la imagen mediante la actualización del identificador de imageReference (para más información, consulte la documentación de API REST).
Pasos siguientes
En este tutorial, ha aprendido a modificar varios aspectos del conjunto de escalado e instancias individuales mediante PowerShell.
- Actualización del modelo del conjunto de escalado
- Actualización de una instancia de máquina virtual individual en un conjunto de escalado
- Incorporación de una instancia al conjunto de escalado
- Actualización de las máquinas virtuales con el modelo de conjunto de escalado más reciente
- Restablecimiento de la imagen inicial de un conjunto de escalado
- Actualización de la imagen del sistema operativo en el conjunto de escalado