Tutorial: Modificación de un conjunto de escalado de máquinas virtuales con la CLI de Azure
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 la CLI de Azure.
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 az vmss show:
az vmss show --resource-group 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 la CLI de Azure:
{
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
"location": "eastus",
"name": "myScaleSet",
"orchestrationMode": "Flexible",
"platformFaultDomainCount": 1,
"resourceGroup": "myResourceGroup",
"sku": {
"capacity": 2,
"name": "Standard_DS1_v2",
"tier": "Standard"
},
"timeCreated": "2022-11-29T22:16:43.250912+00:00",
"type": "Microsoft.Compute/virtualMachineScaleSets",
"networkProfile": {
"networkApiVersion": "2020-11-01",
"networkInterfaceConfigurations": [
{
"deleteOption": "Delete",
"disableTcpStateTracking": false,
"dnsSettings": {
"dnsServers": []
},
"enableIpForwarding": false,
"ipConfigurations": [
{
"applicationGatewayBackendAddressPools": [],
"applicationSecurityGroups": [],
"loadBalancerBackendAddressPools": [
{
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
"resourceGroup": "myResourceGroup"
}
],
"name": "mysca2215IPConfig",
"privateIpAddressVersion": "IPv4",
"subnet": {
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
"resourceGroup": "myResourceGroup"
}
}
],
"name": "mysca2215Nic",
"networkSecurityGroup": {
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
"resourceGroup": "myResourceGroup"
},
"primary": true
}
]
},
"osProfile": {
"allowExtensionOperations": true,
"computerNamePrefix": "myScaleS",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"enableVmAgentPlatformUpdates": false,
"patchSettings": {
"assessmentMode": "ImageDefault",
"patchMode": "ImageDefault"
},
"provisionVmAgent": true,
},
},
"storageProfile": {
"imageReference": {
"offer": "0001-com-ubuntu-server-jammy",
"publisher": "Canonical",
"sku": "22_04-lts",
"version": "latest"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"deleteOption": "Delete",
"diskSizeGb": 30,
"managedDisk": {
"storageAccountType": "Premium_LRS"
},
"osType": "Linux",
}
},
},
}
Puede usar az vmss update para actualizar varias propiedades del conjunto de escalado. Por ejemplo, actualizar el tipo de licencia o una directiva de protección de instancias de máquinas virtuales.
az vmss update --name MyScaleSet --resource-group MyResourceGroup --license-type windows_server
az vmss update --name MyScaleSet --resource-group MyResourceGroup --instance-id 4 --protect-from-scale-set-actions False --protect-from-scale-in
Además, si ha implementado previamente el conjunto de escalado con el comando az vmss create
, puede ejecutar el comando az vmss create
de nuevo para actualizar el conjunto de escalado. Asegúrese de que todas las propiedades del comando az vmss create
son las mismas que antes, excepto las propiedades que desea modificar. Por ejemplo, a continuación vamos a aumentar el recuento de instancias a cinco.
Importante
A partir de noviembre de 2023, los conjuntos de escalado de máquinas virtuales creados con PowerShell y la CLI de Azure tendrán como valor predeterminado el modo de orquestación flexible si no se especifica ningún modo de orquestación. Para más información acerca de este cambio y las acciones que debe realizar, vaya a Cambio importante para clientes de PowerShell o la CLI de VMSS: Centro de comunidad de Microsoft
az vmss create \
--resource-group myResourceGroup \
--name myScaleSet \
--orchestration-mode flexible \
--image RHELRaw8LVMGen2 \
--admin-username azureuser \
--generate-ssh-keys \
--instance-count 5
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 az vm show.
az vm show --resource-group myResourceGroup --name myScaleSet_Instanace1
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 la CLI de Azure:
{
"hardwareProfile": {
"vmSize": "Standard_DS1_v2",
},
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
"location": "eastus",
"name": "myScaleSet_Instance1",
"networkProfile": {
"networkInterfaces": [
{
"deleteOption": "Delete",
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
"primary": true,
"resourceGroup": "myResourceGroup"
}
]
},
"osProfile": {
"allowExtensionOperations": true,
"computerName": "myScaleset_Computer1",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"enableVmAgentPlatformUpdates": false,
"patchSettings": {
"assessmentMode": "ImageDefault",
"patchMode": "ImageDefault"
},
"provisionVmAgent": true,
},
},
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"storageProfile": {
"dataDisks": [],
"imageReference": {
"exactVersion": "22.04.202204200",
"offer": "0001-com-ubuntu-server-jammy",
"publisher": "Canonical",
"sku": "22_04-lts",
"version": "latest"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"deleteOption": "Delete",
"diskSizeGb": 30,
"managedDisk": {
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
"resourceGroup": "myResourceGroup",
"storageAccountType": "Premium_LRS"
},
"name": "myScaleSet_Instance1_disk1_e1a6c46a6b5f44d695fc9e38727267c2",
"osType": "Linux",
}
},
"timeCreated": "2022-11-29T22:16:44.500895+00:00",
"type": "Microsoft.Compute/virtualMachines",
"virtualMachineScaleSet": {
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet",
"resourceGroup": "myResourceGroup"
},
}
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:
az vm disk attach --resource-group myResourceGroup --vm-name myScaleSet_Instance1 --name disk_name1 --new
Al ejecutar az vm show de nuevo, ahora veremos que la instancia de máquina virtual tiene el nuevo disco asociado.
"storageProfile": {
"dataDisks": [
{
"caching": "None",
"createOption": "Empty",
"deleteOption": "Detach",
"diskSizeGb": 1023,
"lun": 0,
"managedDisk": {
"id": "/subscriptions/49d84582-7207-4a4f-824e-044e83c71887/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/disk_name1",
"resourceGroup": "myResourceGroup",
"storageAccountType": "Premium_LRS"
},
"name": "disk_name1",
"toBeDetached": false,
}
],
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 az vm create y especificando el nombre del conjunto de escalado al que desea agregar la instancia.
az vm create --name myNewInstance --resource-group myResourceGroup --vmss myScaleSet --image RHELRaw8LVMGen2
{
"fqdns": "",
"id": "/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance",
"location": "eastus",
"macAddress": "60-45-BD-D7-13-DD",
"powerState": "VM running",
"privateIpAddress": "10.0.0.6",
"publicIpAddress": "20.172.144.96",
"resourceGroup": "myResourceGroup",
"zones": ""
Si, después, comprobamos nuestro conjunto de escalado, veremos que se ha agregado la nueva instancia.
az vm list --resource-group myResourceGroup --output table
Name ResourceGroup Location
------------------- --------------- ----------
myNewInstance myResourceGroup eastus
myScaleSet_Instance1 myResourceGroup eastus
myScaleSet_Instance1 myResourceGroup eastus
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 az vmss update.
az vmss update --resource-group myResourceGroup --name 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 az vmss reimage y especifique los nombres de la instancia.
az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id myScaleSet_Instance1
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. Quiere actualizar a una versión más reciente de Ubuntu, como la versión 22.04.202204200. La propiedad de versión de referencia de imagen no forma parte de una lista, por lo que puede modificar directamente estas propiedades mediante az vmss update.
az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=22.04.202204200
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 az vmss update.
az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set 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).
Actualización del equilibrador de carga en el conjunto de escalado
Supongamos que tiene un conjunto de escalado con una instancia de Azure Load Balancer y quiere reemplazar Azure Load Balancer por una instancia de Azure Application Gateway. Las propiedades de Load Balancer y Application Gateway de un conjunto de escalado son parte de una lista, así que puede usar los comandos para quitar o agregar elementos de la lista en lugar de modificar las propiedades directamente.
# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0
# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group myResourceGroup --name myScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0
# Add the application gateway backend pool to the scale set model
az vmss update --resource-group myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'
Nota
Estos comandos dan por hecho que solo hay una configuración IP y un equilibrador de carga en el conjunto de escalado. Si hay varios, debe usar un índice de lista distinto de 0.
Pasos siguientes
En este tutorial, ha aprendido a modificar varios aspectos del conjunto de escalado e instancias individuales.
- 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
- Actualización del equilibrador de carga en el conjunto de escalado