Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
A continuación, declaramos variables de entorno que se usarán en este documento. Se anexa un sufijo aleatorio a los nombres de recursos que deben ser únicos para cada implementación. El REGION
se ha configurado en WestUS2.
Configurar el grupo de recursos
Antes de continuar, asegúrese de que el grupo de recursos existe. Este paso crea el grupo de recursos si aún no existe.
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --___location $REGION
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
"___location": "WestUS2",
"managedBy": null,
"name": "myResourceGroupxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Crear el conjunto de escalado de máquinas virtuales
Para asegurarse de que los comandos de actualización y consulta posteriores tienen un recurso válido en el que trabajar, cree un conjunto de escalado de máquinas virtuales. En este paso, se implementa un conjunto de escalado básico mediante una imagen válida (Ubuntu2204) y se establece el recuento de instancias en 5 para que las actualizaciones específicas de la instancia puedan tener como destino un identificador de instancia existente.
export SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--image Ubuntu2204 \
--upgrade-policy-mode manual \
--instance-count 5 \
--admin-username azureuser \
--generate-ssh-keys
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
"___location": "WestUS2",
"name": "myScaleSetxxx",
"provisioningState": "Succeeded"
}
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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME
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/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
"___location": "WestUS2",
"name": "myScaleSetxxx",
"orchestrationMode": "Flexible",
"platformFaultDomainCount": 1,
"resourceGroup": "myResourceGroupxxx",
"sku": {
"capacity": 5,
"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/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
"resourceGroup": "myResourceGroupxxx"
}
],
"name": "mysca2215IPConfig",
"privateIpAddressVersion": "IPv4",
"subnet": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
"resourceGroup": "myResourceGroupxxx"
}
}
],
"name": "mysca2215Nic",
"networkSecurityGroup": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
"resourceGroup": "myResourceGroupxxx"
},
"primary": true
}
]
},
"osProfile": {
"allowExtensionOperations": true,
"computerNamePrefix": "myScaleS",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"enableVmAgentPlatformUpdates": false,
"patchSettings": {
"assessmentMode": "ImageDefault",
"patchMode": "ImageDefault"
},
"provisionVmAgent": true
}
},
"storageProfile": {
"imageReference": {
"offer": "UbuntuServer",
"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, actualizando el tipo de licencia o la directiva de protección de instancias de una máquina virtual. Tenga en cuenta que el valor de tipo de licencia permitido es RHEL_BYOS en lugar de Windows_Server.
az vmss update --name $SCALE_SET_NAME --resource-group $MY_RESOURCE_GROUP_NAME --license-type RHEL_BYOS
export INSTANCE_ID=$(az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--query "[0].instanceId" \
-o tsv)
az vmss update \
--name $SCALE_SET_NAME \
--resource-group $MY_RESOURCE_GROUP_NAME \
--instance-id "$INSTANCE_ID" \
--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 $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--orchestration-mode flexible \
--image RHELRaw8LVMGen2 \
--admin-username azureuser \
--generate-ssh-keys \
--instance-count 5 \
--os-disk-size-gb 64
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.
export INSTANCE_NAME=$(az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--query "[0].name" \
-o tsv)
az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $INSTANCE_NAME
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/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
"___location": "WestUS2",
"name": "myScaleSet_Instance1",
"networkProfile": {
"networkInterfaces": [
{
"deleteOption": "Delete",
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
"primary": true,
"resourceGroup": "myResourceGroupxxx"
}
]
},
"osProfile": {
"allowExtensionOperations": true,
"computerName": "myScaleset_Computer1",
"linuxConfiguration": {
"disablePasswordAuthentication": true,
"enableVmAgentPlatformUpdates": false,
"patchSettings": {
"assessmentMode": "ImageDefault",
"patchMode": "ImageDefault"
},
"provisionVmAgent": true
}
},
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroupxxx",
"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/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_xxx",
"resourceGroup": "myResourceGroupxxx",
"storageAccountType": "Premium_LRS"
},
"name": "myScaleSet_Instance1_disk1_xxx",
"osType": "Linux"
}
},
"timeCreated": "2022-11-29T22:16:44.500895+00:00",
"type": "Microsoft.Compute/virtualMachines",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
"resourceGroup": "myResourceGroupxxx"
}
}
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 $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --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/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/disk_name1",
"resourceGroup": "myResourceGroupxxx",
"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 quiera agregar una nueva máquina virtual al conjunto de escalado, pero quiere opciones de configuración diferentes a las enumeradas en el modelo de 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.
export NEW_INSTANCE_NAME="myNewInstance$RANDOM_SUFFIX"
az vm create --name $NEW_INSTANCE_NAME --resource-group $MY_RESOURCE_GROUP_NAME --vmss $SCALE_SET_NAME --image RHELRaw8LVMGen2
{
"fqdns": "",
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myNewInstancexxx",
"___location": "WestUS2",
"macAddress": "60-45-BD-D7-13-DD",
"powerState": "VM running",
"privateIpAddress": "10.0.0.6",
"publicIpAddress": "20.172.144.96",
"resourceGroup": "myResourceGroupxxx",
"zones": ""
}
Si, después, comprobamos nuestro conjunto de escalado, veremos que se ha agregado la nueva instancia.
az vm list --resource-group $MY_RESOURCE_GROUP_NAME --output table
Name ResourceGroup Location
-------------------- --------------- ----------
myNewInstancexxx myResourceGroupxxx WestUS2
myScaleSet_Instance1 myResourceGroupxxx WestUS2
myScaleSet_Instance1 myResourceGroupxxx WestUS2
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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME
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: {nombre_del_conjunto_de_escalado}_{guid_de_8_caracteres}
- Modo de orquestación uniforme: {nombre_del_conjunto_de_escalado}_{id-_de_la_instancia}
En los casos en los que necesite volver a crear una imagen de imagen específica, use az vmss reimage y especifique el identificador de instancia. Otra opción es usar az vm redeploy para volver a crear la imagen de la máquina virtual directamente. Este comando es útil si desea volver a crear una imagen de una máquina virtual sin tener que especificar el identificador de instancia.
# Get the VM name first
VM_NAME=$(az vmss list-instances \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $SCALE_SET_NAME \
--query "[0].name" \
-o tsv)
# Reimage the VM directly
az vm redeploy \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $VM_NAME
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 más reciente. 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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest
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.
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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --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 $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/xxxxx/resourceGroups/'$MY_RESOURCE_GROUP_NAME'/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