El escalado de los recursos para un día determinado de la semana o una fecha y hora específicas pueden reducir los costos, a la vez que proporcionan la capacidad que necesita cuando la necesite.
Puede usar varios perfiles en el escalado automático para escalar de diferentes maneras en momentos diferentes. Si, por ejemplo, su empresa no está activa el fin de semana, cree un perfil periódico para escalar sus recursos los sábados y domingos. Si Black Friday es un día ocupado, cree un perfil para escalar horizontalmente automáticamente los recursos el Black Friday.
En este artículo se explican los distintos perfiles de escalado automático y cómo usarlos.
Puede tener uno o varios perfiles en la configuración de escalado automático.
Cada vez que se ejecuta el servicio de escalado automático, los perfiles se evalúan en el orden siguiente:
Si la configuración de fecha y hora de un perfil coincide con la hora actual, la escalabilidad automática aplicará las reglas y los límites de capacidad de ese perfil. Solo se usa el primer perfil aplicable.
En el ejemplo siguiente se muestra una configuración de escalado automático con un perfil predeterminado y un perfil periódico.
En el ejemplo anterior, el lunes después de las 3:00 a. m., se dejará de usar el perfil periódico. Si el recuento de instancias es menor que 3, el escalado automático se escala al nuevo mínimo de tres. La escalabilidad automática sigue usando este perfil y la escala se modifica en función del porcentaje de CPU hasta el lunes a las 8:00 p. m. En el resto de veces, el escalado se realizará según el perfil predeterminado, en función del número de solicitudes. Después de las 8:00 p. m. del lunes, la escalabilidad automática cambia al perfil predeterminado. Si, por ejemplo, el número de instancias en ese momento es 12, escalará automáticamente a 10, que es el máximo permitido en el perfil predeterminado.
El escalado automático realiza transiciones entre perfiles en función de sus horas de inicio. La hora de finalización de un perfil concreto lo determina la hora de inicio del perfil siguiente.
En el portal, el campo hora de finalización se convierte en la siguiente hora de inicio del perfil predeterminado. No se puede especificar la misma hora para el final de un perfil y el inicio del siguiente. El portal forzará que la hora de finalización sea un minuto antes de la hora de inicio del perfil siguiente. Durante este minuto, el perfil predeterminado se activa. Si no quiere que el perfil predeterminado esté activo entre los perfiles periódicos, deje vacío el campo de hora de finalización.
Al crear varios perfiles mediante plantillas, la CLI y PowerShell, siga las instrucciones siguientes.
Consulte la sección escalado automático de la definición de recursos de plantilla de ARM para obtener una referencia de plantilla completa.
En la plantilla no hay ninguna especificación para la hora de finalización. Un perfil permanecerá activo hasta la hora de inicio del perfil siguiente.
Adición de un perfil periódico mediante plantillas ARM
En el ejemplo siguiente se muestra cómo crear dos perfiles periódicos. Un perfil para los fines de semana a partir de las 00:01 del sábado por la mañana y un segundo perfil de día laborable a partir de los lunes a las 04:00. Esto significa que el perfil de fin de semana comenzará el sábado por la mañana, un minuto después de la medianoche, y finalizará el lunes por la mañana a las 04:00. El perfil de día laborable comenzará a las 4:00 del lunes y finalizará pasada la medianoche que divide el viernes del sábado.
Use el siguiente comando para implementar la plantilla: az deployment group create --name VMSS1-Autoscale-607 --resource-group rg-vmss1 --template-file VMSS1-autoscale.json
donde VMSS1-autoscale.json es el archivo que contiene el objeto JSON siguiente.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Insights/autoscaleSettings",
"apiVersion": "2015-04-01",
"name": "VMSS1-Autoscale-607",
"location": "eastus",
"properties": {
"name": "VMSS1-Autoscale-607",
"enabled": true,
"targetResourceUri": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"profiles": [
{
"name": "Weekday profile",
"capacity": {
"minimum": "3",
"maximum": "20",
"default": "3"
},
"rules": [
{
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
},
"metricTrigger": {
"metricName": "Inbound Flows",
"metricNamespace": "microsoft.compute/virtualmachinescalesets",
"metricResourceUri": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"operator": "GreaterThan",
"statistic": "Average",
"threshold": 100,
"timeAggregation": "Average",
"timeGrain": "PT1M",
"timeWindow": "PT10M",
"Dimensions": [],
"dividePerInstance": true
}
},
{
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
},
"metricTrigger": {
"metricName": "Inbound Flows",
"metricNamespace": "microsoft.compute/virtualmachinescalesets",
"metricResourceUri": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"operator": "LessThan",
"statistic": "Average",
"threshold": 60,
"timeAggregation": "Average",
"timeGrain": "PT1M",
"timeWindow": "PT10M",
"Dimensions": [],
"dividePerInstance": true
}
}
],
"recurrence": {
"frequency": "Week",
"schedule": {
"timeZone": "E. Europe Standard Time",
"days": [
"Monday"
],
"hours": [
4
],
"minutes": [
0
]
}
}
},
{
"name": "Weekend profile",
"capacity": {
"minimum": "1",
"maximum": "3",
"default": "1"
},
"rules": [],
"recurrence": {
"frequency": "Week",
"schedule": {
"timeZone": "E. Europe Standard Time",
"days": [
"Saturday"
],
"hours": [
0
],
"minutes": [
1
]
}
}
}
],
"notifications": [],
"targetResourceLocation": "eastus"
}
}
]
}
La CLI se puede usar para crear varios perfiles en la configuración de escalabilidad automática.
Consulte la referencia de la CLI de escalabilidad automática para obtener el conjunto completo de comandos de la CLI de escalabilidad automática.
En los pasos siguientes se muestra cómo crear un perfil de escalado automático periódico mediante la CLI.
- Cree el perfil periódico mediante
az monitor autoscale profile create
. Especifique la hora --start
y --end
, y la --recurrence
- Creación de una regla de escalado horizontal usando
az monitor autoscale rule create
y --scale out
- Creación de una regla de reducción horizontal usando
az monitor autoscale rule create
y --scale in
Adición de un perfil periódico mediante la CLI
En el ejemplo siguiente se muestra cómo agregar un perfil de escalado automático periódico, periódico los jueves entre las 06:00 y las 22:50.
az account set --subscription 0000aaaa-11bb-cccc-dd22-eeeeee333333
export autoscaleName=vmss-autoscalesetting-002
export resourceGroupName=rg-vmss-001
az monitor autoscale profile create \
--autoscale-name $autoscaleName \
--count 2 \
--name Thursdays \
--resource-group $resourceGroupName \
--max-count 10 \
--min-count 1 \
--recurrence week thu \
--start 06:00 \
--end 22:50 \
--timezone "Pacific Standard Time"
az monitor autoscale rule create \
--autoscale-name $autoscaleName \
-g $resourceGroupName \
--scale in 1 \
--condition "Percentage CPU < 25 avg 5m" \
--profile-name Thursdays
az monitor autoscale rule create \
--autoscale-name $autoscaleName \
-g $resourceGroupName \
--scale out 2 \
--condition "Percentage CPU > 50 avg 5m" \
--profile-name Thursdays
az monitor autoscale profile list \
--autoscale-name $autoscaleName \
--resource-group $resourceGroupName
Nota
- El JSON del perfil predeterminado de escalabilidad automática se modifica agregando un perfil periódico.
El elemento name
del perfil predeterminado se cambia a un objeto con el formato : "name": "{\"name\":\"Auto created default scale condition\",\"for\":\"recurring profile name\"}"
donde perfil periódico es el nombre de perfil del perfil periódico.
El perfil predeterminado también tiene una cláusula de periodicidad agregada que comienza a la hora de finalización especificada para el nuevo perfil periódico.
- Se crea un nuevo perfil predeterminado para cada perfil periódico.
- Si no se especifica la hora de finalización en el comando de CLI, la hora de finalización tendrá como valor predeterminado 23:59.
Actualización del perfil predeterminado cuando tiene perfiles periódicos
Después de agregar perfiles periódicos, se cambia el nombre del perfil predeterminado. Si tiene varios perfiles periódicos y desea actualizar el perfil predeterminado, la actualización debe realizarse en cada perfil predeterminado correspondiente a un perfil periódico.
Por ejemplo, si tiene dos perfiles periódicos denominados miércoles y jueves, necesita dos comandos para agregar una regla al perfil predeterminado.
az monitor autoscale rule create -g rg-vmss1--autoscale-name VMSS1-Autoscale-607 --scale out 8 --condition "Percentage CPU > 52 avg 5m" --profile-name "{\"name\": \"Auto created default scale condition\", \"for\": \"Wednesdays\"}"
az monitor autoscale rule create -g rg-vmss1--autoscale-name VMSS1-Autoscale-607 --scale out 8 --condition "Percentage CPU > 52 avg 5m" --profile-name "{\"name\": \"Auto created default scale condition\", \"for\": \"Thursdays\"}"
PowerShell se puede usar para crear varios perfiles en la configuración de escalabilidad automática.
Consulte la referencia de PowerShell module.Monitor para obtener el conjunto completo de comandos de PowerShell de escalabilidad automática.
En los pasos siguientes se muestra cómo crear un perfil de escalado automático mediante PowerShell.
- Cree reglas mediante
New-AzAutoscaleRule
.
- Cree perfiles mediante
New-AzAutoscaleProfile
y las reglas del paso anterior.
- Use
Add-AzAutoscaleSetting
para aplicar los perfiles a la configuración de escalado automático.
Adición de un perfil periódico mediante PowerShell
En el ejemplo siguiente se muestra cómo crear un perfil predeterminado y un perfil de escalado automático periódico, periódico los miércoles y los viernes entre las 09:00 y las 23:00.
El perfil predeterminado usa las reglas CpuIn
y CpuOut
. El perfil periódico usa las reglas BandwidthIn
y BandwidthOut
.
Set-AzureSubscription -SubscriptionId "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$ResourceGroupName="rg-vmss-001"
$TargetResourceId="/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vmss-001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-001"
$ScaleSettingName="vmss-autoscalesetting=001"
$CpuOut=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "$TargetResourceId" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "GreaterThan" `
-MetricTriggerThreshold 50 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Increase" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
$CpuIn=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "Percentage CPU" `
-MetricTriggerMetricResourceUri "$TargetResourceId" `
-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))
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "Default" `
-CapacityDefault 1 `
-CapacityMaximum 5 `
-CapacityMinimum 1 `
-Rule $CpuOut, $CpuIn
$BandwidthIn=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "VM Cached Bandwidth Consumed Percentage" `
-MetricTriggerMetricResourceUri "$TargetResourceId" `
-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))
$BandwidthOut=New-AzAutoscaleScaleRuleObject `
-MetricTriggerMetricName "VM Cached Bandwidth Consumed Percentage" `
-MetricTriggerMetricResourceUri "$TargetResourceId" `
-MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
-MetricTriggerStatistic "Average" `
-MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
-MetricTriggerTimeAggregation "Average" `
-MetricTriggerOperator "GreaterThan" `
-MetricTriggerThreshold 60 `
-MetricTriggerDividePerInstance $false `
-ScaleActionDirection "Increase" `
-ScaleActionType "ChangeCount" `
-ScaleActionValue 1 `
-ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))
$RecurringProfile=New-AzAutoscaleProfileObject `
-Name "Wednesdays and Fridays" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-RecurrenceFrequency week `
-ScheduleDay "Wednesday","Friday" `
-ScheduleHour 09 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $BandwidthIn, $BandwidthOut
$DefaultProfile2=New-AzAutoscaleProfileObject `
-Name "Back to default after Wednesday and Friday" `
-CapacityDefault 1 `
-CapacityMaximum 5 `
-CapacityMinimum 1 `
-RecurrenceFrequency week `
-ScheduleDay "Wednesday","Friday" `
-ScheduleHour 23 `
-ScheduleMinute 00 `
-ScheduleTimeZone "Pacific Standard Time" `
-Rule $CpuOut, $CpuIn
Update-AzAutoscaleSetting `
-name $ScaleSettingName `
-ResourceGroup $ResourceGroupName `
-Enabled $true `
-TargetResourceUri $TargetResourceId `
-Profile $DefaultProfile, $RecurringProfile, $DefaultProfile2
Nota
No se puede especificar una fecha de finalización para perfiles periódicos en PowerShell. Para finalizar un perfil periódico, cree una copia del perfil predeterminado con los mismos parámetros de periodicidad que el perfil periódico. Establezca la hora de inicio para que sea la hora a la que desea que finalice el perfil periódico. Cada perfil periódico requiere su propia copia del perfil predeterminado para especificar una hora de finalización.
Actualización del perfil predeterminado cuando tiene perfiles periódicos
Si tiene varios perfiles periódicos y desea cambiar el perfil predeterminado, el cambio debe realizarse en cada perfil predeterminado correspondiente a un perfil periódico.
Por ejemplo, si tiene dos perfiles periódicos denominados SundayProfile y ThursdayProfile, necesita dos New-AzAutoscaleProfile
comandos para cambiar al perfil predeterminado.
$DefaultProfileSundayProfile = New-AzAutoscaleProfile -DefaultCapacity "1" -MaximumCapacity "10" -MinimumCapacity "1" -Rule $CpuOut,$CpuIn -Name "Defalut for Sunday" -RecurrenceFrequency week -ScheduleDay "Sunday" -ScheduleHour 19 -ScheduleMinute 00 -ScheduleTimeZone "Pacific Standard Time"`
$DefaultProfileThursdayProfile = New-AzAutoscaleProfile -DefaultCapacity "1" -MaximumCapacity "10" -MinimumCapacity "1" -Rule $CpuOut,$CpuIn -Name "Default for Thursday" -RecurrenceFrequency week -ScheduleDay "Thursday" -ScheduleHour 19 -ScheduleMinute 00 -ScheduleTimeZone "Pacific Standard Time"`