Uso de directivas personalizadas de reducción horizontal con Virtual Machine Scale Sets de Azure

Una implementación de Virtual Machine Scale Sets se puede escalar horizontalmente o reducir horizontalmente en función de una matriz de métricas, incluidas las métricas personalizadas de la plataforma y las definidas por el usuario. Mientras que una escalabilidad horizontal crea nuevas máquinas virtuales basadas en el modelo de conjuntos de escalado, una reducción horizontal afecta a las máquinas virtuales en ejecución que pueden tener diferentes configuraciones o funciones a medida que evoluciona la carga de trabajo del conjunto de escalado.

La característica de la directiva de reducción horizontal proporciona a los usuarios una manera de configurar el orden en el que se reducen horizontalmente las máquinas virtuales, por medio de tres configuraciones de escalado horizontal.

  1. Valor predeterminado
  2. NewestVM
  3. OldestVM

Directiva predeterminada de reducción horizontal

Orquestación flexible

Con esta directiva, las máquinas virtuales se escalan horizontalmente después del equilibrio entre zonas de disponibilidad (si el conjunto de escalado está en configuración zonal) y la máquina virtual más antigua desde createdTime se escala primero. El equilibrio entre dominios de error no está disponible en la directiva predeterminada con el modo de orquestación flexible.

Orquestación uniforme

De forma predeterminada, Virtual Machine Scale Sets aplica esta directiva para determinar qué instancias se van a reducir horizontalmente. Con la directiva Predeterminada, se seleccionan las máquinas virtuales para la reducción horizontal en el orden siguiente:

  1. Equilibrar máquinas virtuales entre zonas de disponibilidad (si el conjunto de escalado se implementa en una configuración de zona).
  2. Equilibrar máquinas virtuales entre dominios de error (mejor opción).
  3. Eliminar la máquina virtual con el identificador de instancia más alto.

No es necesario que los usuarios especifiquen una directiva de reducción horizontal si solo quieren seguir el orden predeterminado.

El equilibrio entre zonas de disponibilidad o dominios de error no mueve instancias entre zonas de disponibilidad ni dominios de error. El equilibrio se logra mediante la eliminación de máquinas virtuales de las zonas de disponibilidad o los dominios de error desequilibrados hasta que se equilibra la distribución de máquinas virtuales.

Directiva NewestVM de reducción horizontal

Esta directiva eliminará la máquina virtual más nueva o la creada más recientemente en el conjunto de escalado, después de equilibrar las máquinas virtuales entre las zonas de disponibilidad (para implementaciones de zonas). La habilitación de esta directiva requiere un cambio de configuración en el modelo de Virtual Machine Scale Sets.

Directiva OldestVM de reducción horizontal

Esta directiva eliminará la máquina virtual creada más antigua en el conjunto de escalado, después de equilibrar las máquinas virtuales entre las zonas de disponibilidad (para implementaciones de zonas). La habilitación de esta directiva requiere un cambio de configuración en el modelo de Virtual Machine Scale Sets.

Habilitación de la directiva de reducción horizontal

Una directiva de reducción horizontal se define en el modelo de Virtual Machine Scale Sets. Como se ha indicado en las secciones anteriores, se necesita una definición de directiva de reducción horizontal cuando se usan las directivas "NewestVM" y "OldestVM". El conjunto de escalado de máquinas virtuales usará automáticamente la directiva de reducción horizontal "Predeterminada" si no hay ninguna definición de directiva de reducción horizontal en el modelo de conjuntos de escalado.

Se puede definir una directiva de reducción horizontal en el modelo de Virtual Machine Scale Sets de las siguientes maneras:

Portal de Azure

En los pasos siguientes se define la directiva de reducción horizontal al crear un nuevo conjunto de escalado.

  1. Vaya a Virtual Machine Scale Sets.
  2. Seleccione + Agregar para crear un nuevo conjunto de escalado.
  3. Vaya a la pestaña Escalado.
  4. Busque la sección Directiva de reducción horizontal.
  5. Seleccione una directiva de reducción horizontal en el menú desplegable.
  6. Cuando haya terminado de crear el nuevo conjunto de escalado, seleccione el botón Revisar y crear.

Uso de la API

Ejecute PUT en Virtual Machine Scale Sets mediante la API 2019-03-01:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["OldestVM"]  
        } 
    }    
} 

Azure PowerShell

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 sobre 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

Cree un grupo de recursos y, a continuación, cree un nuevo conjunto de escalado con la directiva de reducción horizontal establecida como OldestVM.

New-AzResourceGroup -ResourceGroupName "myResourceGroup" -Location "<VMSS location>"
New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "<VMSS location>" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -ScaleInPolicy “OldestVM”

CLI de Azure

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 sobre 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

En el ejemplo siguiente se agrega la directiva de reducción horizontal al crear un nuevo conjunto de escalado. En primer lugar, cree un grupo de recursos y, después, cree un nuevo conjunto de escalado con la directiva de reducción horizontal como OldestVM.

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --orchestration-mode flexible \
  --image Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --scale-in-policy OldestVM

Uso de una plantilla

En la plantilla, en "properties", agregue la propiedad scaleInPolicy:

"scaleInPolicy": {  
      "rules": ["OldestVM"]  
}

Estos bloques de código especifican que el conjunto de escalado de máquinas virtuales eliminará la máquina virtual más antigua en un conjunto de escalado con equilibrio de zona, cuando se desencadene una reducción horizontal (mediante el escalado automático o la eliminación manual).

Cuando un conjunto de escalado de máquinas virtuales no tenga equilibrio de zona, el conjunto de escalado eliminará primero las máquinas virtuales en las zonas desequilibradas. Dentro de las zonas desequilibradas, el conjunto de escalado usa la directiva de reducción horizontal especificada para determinar qué máquina virtual se va a reducir horizontalmente. En este caso, dentro de una zona desequilibrada, el conjunto de escalado seleccionará la máquina virtual más antigua de esa zona para su eliminación.

En el caso de Virtual Machine Scale Sets no de zona, la directiva selecciona la máquina virtual más antigua del conjunto de escalado para su eliminación.

Se aplica el mismo proceso cuando se usa la directiva de reducción horizontal "NewestVM".

Modificación de directivas de reducción horizontal

La modificación de la directiva de reducción horizontal sigue el mismo proceso que la aplicación de la directiva de reducción horizontal. Por ejemplo, si desea cambiar la directiva de "OldestVM" a "NewestVM", puede hacerlo de la siguiente manera:

Azure portal

Puede modificar la directiva de reducción horizontal de un conjunto de escalado existente a través de Azure Portal.

  1. En una instancia de Virtual Machine Scale Sets existente, seleccione Escalado en el menú de la izquierda.
  2. Seleccione la pestaña Directiva de reducción horizontal.
  3. Seleccione una directiva de reducción horizontal en el menú desplegable.
  4. Cuando finalice, seleccione Guardar.

Uso de la API

Ejecute PUT en Virtual Machine Scale Sets mediante la API 2019-03-01:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01 

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["NewestVM"]  
        } 
    }    
}

Azure PowerShell

Actualice la directiva de reducción horizontal de un conjunto de escalado existente:

Update-AzVmss `
 -ResourceGroupName "myResourceGroup" `
 -VMScaleSetName "myScaleSet" `
 -ScaleInPolicy “OldestVM”

CLI de Azure

Lo siguiente es un ejemplo para actualizar la directiva de reducción horizontal de un conjunto de escalado existente:

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --scale-in-policy OldestVM

Uso de una plantilla

En la plantilla, en "properties", modifique la plantilla como se indica a continuación y vuelva a implementarla:

"scaleInPolicy": {  
      "rules": ["NewestVM"]  
} 

Se aplica el mismo proceso si decide cambiar "NewestVM" por "Default" u "OldestVM".

Protección de instancias y directiva de reducción horizontal

Virtual Machine Scale Sets proporciona dos tipos de protección de instancias:

  1. Protección contra la reducción horizontal
  2. Protección contra las acciones del conjunto de escalado

Una máquina virtual protegida no se elimina mediante una acción de reducción horizontal, sea cual sea la directiva de reducción horizontal aplicada. Por ejemplo, si VM_0 (la máquina virtual más antigua en el conjunto de escalado) está protegido contra la reducción horizontal y el conjunto de escalado tiene habilitada la directiva de reducción horizontal "OldestVM", VM_0 no se tendrá en cuenta para la reducción horizontal, aunque sea la máquina virtual más antigua del conjunto de escalado.

El usuario puede eliminar manualmente una máquina virtual protegida en cualquier momento, sea cual sea la directiva de reducción horizontal habilitada en el conjunto de escalado.

Ejemplos de uso

En los siguientes ejemplos se muestra cómo un conjunto de escalado de máquinas virtuales selecciona las máquinas virtuales que se van a eliminar cuando se desencadene un evento de reducción horizontal. Se supone que las máquinas virtuales con los identificadores de instancia más altos son las máquinas virtuales más recientes del conjunto de escalado y que las máquinas virtuales con los identificadores de instancia más bajos son las máquinas virtuales más antiguas del conjunto de escalado.

Directiva OldestVM de reducción horizontal

Evento Id. de instancia en Zona 1 Id. de instancia en Zona 2 Id. de instancia en Zona 3 Selección de reducción horizontal
Initial 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Reducción horizontal 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Elija entre Zona 1 y 2, aunque Zona 3 tenga la máquina virtual más antigua. Elimine VM2 de Zona 2, ya que es la máquina virtual más antigua de esa zona.
Reducción horizontal 3, 4, 5, 10 6, 9, 11 1, 7, 8 Elija Zona 1, aunque Zona 3 tenga la máquina virtual más antigua. Elimine VM3 de Zona 1, ya que es la máquina virtual más antigua de esa zona.
Reducción horizontal 4, 5, 10 6, 9, 11 1, 7, 8 Las zonas están equilibradas. Elimine VM1 en Zona 3, ya que es la máquina virtual más antigua del conjunto de escalado.
Reducción horizontal 4, 5, 10 6, 9, 11 7, 8 Elija entre Zona 1 y Zona 2. Elimine VM4 en Zona 1, ya que es la máquina virtual más antigua de las dos zonas.
Reducción horizontal 5, 10 6, 9, 11 7, 8 Elija Zona 2, aunque Zona 1 tenga la máquina virtual más antigua. Elimine VM6 en Zona 1, ya que es la máquina virtual más antigua de esa zona.
Reducción horizontal 5, 10 9, 11 7, 8 Las zonas están equilibradas. Elimine VM5 en Zona 1, ya que es la máquina virtual más antigua del conjunto de escalado.

En el caso de Virtual Machine Scale Sets no de zona, la directiva selecciona la máquina virtual más antigua del conjunto de escalado para su eliminación. Se omite la eliminación de cualquier máquina virtual "protegida".

Directiva NewestVM de reducción horizontal

Evento Id. de instancia en Zona 1 Id. de instancia en Zona 2 Id. de instancia en Zona 3 Selección de reducción horizontal
Initial 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Reducción horizontal 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Elija entre Zona 1 y 2. Elimine VM11 de Zona 2, ya que es la máquina virtual más reciente de las dos zonas.
Reducción horizontal 3, 4, 5, 10 2, 6, 9 1, 7, 8 Elija Zona 1, ya que tiene más máquinas virtuales que las otras dos zonas. Elimine VM10 de Zona 1, ya que es la máquina virtual más reciente de esa zona.
Reducción horizontal 3, 4, 5 2, 6, 9 1, 7, 8 Las zonas están equilibradas. Elimine VM9 en Zona 2, ya que es la máquina virtual más reciente del conjunto de escalado.
Reducción horizontal 3, 4, 5 2, 6 1, 7, 8 Elija entre Zona 1 y Zona 3. Elimine VM8 en Zona 3, ya que es la máquina virtual más reciente de esa zona.
Reducción horizontal 3, 4, 5 2, 6 1, 7 Elija Zona 1, aunque Zona 3 tenga la máquina virtual más reciente. Elimine VM5 en Zona 1, ya que es la máquina virtual más reciente de esa zona.
Reducción horizontal 3, 4 2, 6 1, 7 Las zonas están equilibradas. Elimine VM7 en Zona 3, ya que es la máquina virtual más reciente del conjunto de escalado.

En el caso de Virtual Machine Scale Sets no de zona, la directiva selecciona la máquina virtual más reciente del conjunto de escalado para su eliminación. Se omite la eliminación de cualquier máquina virtual "protegida".

Solución de problemas

  1. Error al habilitar scaleInPolicy: si recibe un error de "BadRequest" con un mensaje de error que indica que "no se pudo encontrar el miembro 'scaleInPolicy' en el objeto de tipo 'properties'", compruebe la versión de API usada para Virtual Machine Scale Sets. Se requiere la versión 2019-03-01 de la API o una posterior para esta característica.

  2. Selección incorrecta de las máquinas virtuales para la reducción horizontal: consulte los ejemplos de este documento. Si el conjunto de escalado de máquinas virtuales es una implementación de zona, la directiva de reducción horizontal se aplica primero a las zonas desequilibradas y, luego, al conjunto de escalado una vez que logre el equilibrio de zona. Si el orden de reducción horizontal no es coherente con los ejemplos que se documentan aquí, genere una consulta para el equipo de conjuntos de escalado de máquinas virtuales a fin de resolver el problema.

Pasos siguientes

Obtenga información sobre cómo implementar la aplicación en conjuntos de escalado de máquinas virtuales.