Configuración del escalado automático con PowerShell
El escalado automático ayuda a garantizar que tiene la cantidad adecuada de recursos en ejecución para administrar las fluctuaciones de carga de la aplicación. Puede configurar el escalado automático mediante las plantillas de Azure Portal, la CLI de Azure, PowerShell, ARM o Bicep.
En este artículo, se muestra cómo configurar el escalado automático para un conjunto de escalado de máquinas virtuales con PowerShell. Las configuraciones usan los pasos siguientes:
- Creación de un conjunto de escalado que se pueda escalar automáticamente
- Creación de reglas para reducir horizontalmente y escalar horizontalmente
- Crear de un perfil que use sus reglas
- Aplicación de la configuración de escalado automático
- Actualización de la configuración de escalado automático con notificaciones
Prerrequisitos
Para configurar el escalado automático mediante PowerShell, necesita una cuenta de Azure con una suscripción activa. También puede crear una cuenta de forma gratuita.
Configurar el entorno
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Creación de un conjunto de escalado de máquinas virtuales
Cree un conjunto de escalado con los siguientes cmdlets. Establezca las variables $resourceGroupName
y $vmssName
para ajustarse a su entorno.
# create a new resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location "EastUS"
# Create login credentials for the VMSS
$Cred = Get-Credential
$vmCred = New-Object System.Management.Automation.PSCredential($Cred.UserName, $Cred.Password)
New-AzVmss `
-ResourceGroupName $resourceGroupName `
-Location "EastUS" `
-VMScaleSetName $vmssName `
-Credential $vmCred `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-PublicIpAddressName "myPublicIPAddress" `
-LoadBalancerName "myLoadBalancer" `
-OrchestrationMode "Flexible"
Crear configuración de escalabilidad automática
Para crear una configuración de escalado automático mediante PowerShell, siga la secuencia siguiente:
- Cree reglas mediante
New-AzAutoscaleScaleRuleObject
- Cree un perfil mediante
New-AzAutoscaleProfileObject
- Cree la configuración de escalado automático mediante
New-AzAutoscaleSetting
- Actualice la configuración usando
Update-AzAutoscaleSetting
Creación de reglas
Cree reglas de reducción horizontal y escalado horizontal y, después, asócielas a un perfil.
Las reglas se crean mediante el New-AzAutoscaleScaleRuleObject
.
En el siguiente script de PowerShell se crean dos reglas.
- Escalar horizontalmente cuando el porcentaje de CPU supere el 70 %
- Reducir horizontalmente cuando el porcentaje de CPU sea inferior al 30 %
$rule1=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "GreaterThan" `
-MetricTriggerThreshold 70 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Increase" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
$rule2=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "LessThan" `
-MetricTriggerThreshold 30 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Decrease" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
En la tabla siguiente, se describen los parámetros usados en el cmdlet New-AzAutoscaleScaleRuleObject
.
Parámetro | Descripción |
---|---|
MetricTriggerMetricName |
Establece la métrica del desencadenador de escalado automático |
MetricTriggerMetricResourceUri |
Especifica el recurso al que pertenece la métrica MetricTriggerMetricName . MetricTriggerMetricResourceUri puede ser cualquier recurso y no solo el recurso que se está escalando. Por ejemplo, puede escalar Virtual Machine Scale Sets en función de las métricas creadas por un equilibrador de carga, una base de datos o el propio conjunto de escalado. El MetricTriggerMetricName debe existir para el MetricTriggerMetricResourceUri especificado. |
MetricTriggerTimeGrain |
Frecuencia de muestreo de la métrica que supervisa la regla. MetricTriggerTimeGrain debe ser uno de los valores predefinidos para la métrica especificada y deberá estar entre 12 horas y 1 minuto. Por ejemplo, MetricTriggerTimeGrain = PT1M"* significa que las métricas se muestrean cada 1 minuto y que se agregan mediante el método de agregación especificado en MetricTriggerStatistic . |
MetricTriggerTimeAggregation |
El método de agregación del período timeGrain. Por ejemplo, statistic = "Average" y timeGrain = "PT1M" significa que las métricas se agregan cada minuto tomando la media. |
MetricTriggerStatistic |
Método de agregación que se usa para agregar métricas muestreadas. Por ejemplo, TimeAggregation = "Average" agregará las métricas muestreadas teniendo en cuenta la media. |
MetricTriggerTimeWindow |
Cantidad de tiempo que el motor de escalado automático vuelve a considerar para agregar la métrica. Este valor debe ser mayor que el retraso en la colección de métricas, que varía por recurso. Debe estar comprendido entre 5 minutos y 12 horas. Por ejemplo, 10 minutos significa que, cada vez que se ejecute la escalabilidad automática, se consultarán las métricas de los últimos 10 minutos. Esta característica permite que las métricas se estabilicen e impide que reaccionen a picos transitorios. |
MetricTriggerThreshold |
Define el valor de la métrica que desencadena un evento de escala. |
MetricTriggerOperator |
Especifica el funcionamiento comparativo lógico que se vaya a usar al evaluar el valor de la métrica. |
MetricTriggerDividePerInstance |
Cuando se establece para true dividirá la métrica del desencadenador por el número total de instancias. Por ejemplo, si el recuento de mensajes fuera 300 y hubiera cinco instancias en ejecución, el valor de la métrica calculada será de 60 mensajes por instancia. Esta propiedad no es aplicable a todas las métricas. |
ScaleActionDirection |
Especifique el escalado y reducción horizontal. Los valores válidos son Increase y Decrease . |
ScaleActionType |
Escale por un número específico de instancias, escale a un recuento de instancias específico o escale por porcentaje del recuento de instancias actual. Los valores válidos son ChangeCount , ExactCount y PercentChangeCount . |
ScaleActionCooldown |
Cantidad mínima de tiempo de espera entre las operaciones de escalado. Esto es para permitir que las métricas se estabilicen y eviten la marcación. Por ejemplo, si ScaleActionCooldown fuera de 10 minutos y se acabase de realizar una operación de escalado, el escalado automático no intentará volver a escalar durante 10 minutos. |
Creación de un perfil de escalado automático predeterminado y asociación de las reglas
Después de definir las reglas de escalado, cree un perfil. El perfil especificará los límites predeterminados, superiores e inferiores de recuento de instancias, y las horas en que se podrán aplicar las reglas asociadas. Utilice el cmdlet New-AzAutoscaleProfileObject
para crear un nuevo perfil de escalabilidad automática. Como se trata de un perfil predeterminado, no tiene ningún parámetro de programación. El perfil predeterminado estará activo en las ocasiones en las que ningún otro perfil esté activo
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
En la tabla siguiente, se describen los parámetros usados en el cmdlet New-AzAutoscaleProfileObject
.
Parámetro | Descripción |
---|---|
CapacityDefault |
El número de instancias que serán si las métricas no estuvieran disponibles para la evaluación. El valor predeterminado solo se utiliza si el número de instancias actual es menor que el predeterminado. |
CapacityMaximum |
Número máximo de instancias para el recurso. El número máximo de instancias está limitado por el número de núcleos disponibles en la suscripción. |
CapacityMinimum |
Número mínimo de instancias del recurso. |
FixedDateEnd |
Hora de finalización del perfil en formato ISO 8601. |
FixedDateStart |
Hora de inicio del perfil en formato ISO 8601. |
Rule |
Una colección de reglas que proporcionan los desencadenadores y los parámetros de la acción de escalado cuando el perfil esté activo. Se pueden especificar un máximo de 10 reglas separadas por comas. |
RecurrenceFrequency |
Con qué frecuencia surte efecto el perfil programado. Este valor puede ser week . |
ScheduleDay |
Colección de días en los que el perfil surte efecto al especificar una programación periódica. Los valores posibles son Domingo a Sábado. Para obtener más información sobre programaciones recurrentes, consulte Agregar un perfil recurrente usando la CLI |
ScheduleHour |
Una colección de horas en las que se aplica el perfil. Los valores admitidos son de 0 a 23. |
ScheduleMinute |
Una colección de minutos en los que se aplica el perfil. |
ScheduleTimeZone |
Zona horaria de las horas del perfil. |
Aplicación de la configuración de escalado automático
Después de aplicar las reglas y el perfil, aplique la configuración de escalado automático mediante New-AzAutoscaleSetting
. Para actualizar la configuración de escalado automático existente, use Update-AzAutoscaleSetting
New-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Location eastus `
-Profile $defaultProfile `
-Enabled `
-PropertiesName "vmss-autoscalesetting1" `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Adición de notificaciones a la configuración de escalado automático
Agregue notificaciones a la configuración de venta para desencadenar un webhook o enviar notificaciones por correo electrónico cuando se produzca un evento de escalado.
Para obtener más información sobre las notificaciones de webhook, consulte New-AzAutoscaleWebhookNotificationObject
Establezca un webhook mediante el siguiente cmdlet;
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
Configure la notificación mediante el webhook y configure la notificación por correo electrónico mediante el cmdlet New-AzAutoscaleNotificationObject
:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Actualización de la configuración de escalado automático para aplicar la notificación
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Revise la configuración de la escalabilidad automática
Para revisar la configuración de escalabilidad automática, cargue la configuración en una variable mediante Get-AzAutoscaleSetting
y, a continuación, envíe la variable tal y como se indica a continuación:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Obtención del historial de escalabilidad automática mediante AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Perfiles programados y periódicos
Agregar un perfil programado para un evento especial
Configure perfiles de escalado automático para escalar de forma diferente para eventos específicos. Por ejemplo, durante un día, cuando la demanda sea mayor de lo habitual, cree un perfil con un aumento máximo y mínimo de los límites de instancia.
En el ejemplo siguiente, se usan las mismas reglas que el perfil predeterminado definido anteriormente, pero se establecen nuevos límites de instancia para una fecha específica. También es posible configurar reglas diferentes para usarlas con el nuevo perfil.
$highDemandDay=New-AzAutoscaleProfileObject `
-Name "High-demand-day" `
-CapacityDefault 7 `
-CapacityMaximum 30 `
-CapacityMinimum 5 `
-FixedDateEnd ([System.DateTime]::Parse("2023-12-31T14:00:00Z")) `
-FixedDateStart ([System.DateTime]::Parse("2023-12-31T13:00:00Z")) `
-FixedDateTimeZone "UTC" `
-Rule $rule1, $rule2
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile, $highDemandDay `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Agregar perfil de programación periódica
Los perfiles periódicos permiten programar perfiles de escalado que se repetirán cada semana. Por ejemplo, escale a una sola instancia los fines de semana de viernes por la noche a lunes por la mañana.
Mientras que los perfiles programados tienen fecha de inicio y de finalización, los perfiles periódicos no tienen hora de finalización. Un perfil permanecerá activo hasta la hora de inicio del perfil siguiente. Por lo tanto, al crear perfiles periódicos, deberá crear un perfil predeterminado periódico que se inicie cuando desee que finalice el perfil periódico anterior.
Por ejemplo, para configurar un perfil de fin de semana que comience los viernes por la noche y termine los lunes por la mañana, cree un perfil que comience el viernes por la noche y, a continuación, cree un perfil periódico con la configuración predeterminada que comience el lunes por la mañana.
El siguiente script crea un perfil de fin de semana y un perfil predeterminado adicional para finalizar el perfil de fin de semana.
$fridayProfile=New-AzAutoscaleProfileObject `
-Name "Weekend" `
-CapacityDefault 1 `
-CapacityMaximum 1 `
-CapacityMinimum 1 `
-RecurrenceFrequency week `
-ScheduleDay "Friday" `
-ScheduleHour 22 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $rule1, $rule2
$defaultRecurringProfile=New-AzAutoscaleProfileObject `
-Name "default recurring profile" `
-CapacityDefault 2 `
-CapacityMaximum 10 `
-CapacityMinimum 2 `
-RecurrenceFrequency week `
-ScheduleDay "Monday" `
-ScheduleHour 00 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $rule1, $rule2
New-AzAutoscaleSetting `
-Location eastus `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultRecurringProfile, $fridayProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Para obtener más información sobre los perfiles programados, consulte Escalabilidad automática con varios perfiles
Otros comandos de escalabilidad automática
Para obtener una lista completa de los cmdlets de PowerShell para escalabilidad automática, consulte el explorador de módulos de PowerShell
Limpieza de recursos
Para borrar los recursos que haya creado en este tutorial, elimine el grupo de recursos que creó. El siguiente cmdlet elimina el grupo de recursos y todos sus recursos.
Remove-AzResourceGroup -Name $resourceGroupName