You can configure scheduled limit changes in App Autoscaler for apps in your TAS for VMs deployment.
When you create scaling limits for an app, you define the minimum and maximum number of instances that Autoscaler can create for an app. When you configure scheduled limit changes for an app, Autoscaler can change these scaling limits according to a schedule that you define.
VMware recommends that you configure scheduled limit changes when you can reasonably predict how many instances your apps require during any given period of time. The following list describes common use cases for scheduled limit changes:
You can pre-emptively scale for an expected period of high traffic by increasing the upper scaling limit to a higher value than what Autoscaler might select based on the configured scaling metrics.
You can reduce redundant resource usage during expected periods of low traffic by reducing the lower scaling limit during those periods.
You can control resource usage during periods in which users can tolerate the effects of an overloaded app by reducing the upper scaling limit during those periods.
If you want to ensure that Autoscaler creates enough instances of an app to handle the amount of traffic that it receives at any given time, but the amount of traffic that the app receives is less predictable, you can change the scaling factors for the app. Setting a higher scale-up factor can help ensure that Autoscaler scales up quickly enough to sufficiently handle a high amount of traffic. For more information, see Update scaling factors in Using the App Autoscaler CLI.
VMware recommends that you load-test your app to verify that the scheduled limit changes you configured are effective. For more information, see Load-Testing Your App in Using Autoscaler in production.
To configure or review scheduled limit changes in Autoscaler, see the following sections.
The procedures in this section describe how to configure scheduled limit changes for Autoscaler through the Cloud Foundry Command-Line Interface (cf CLI).
You can configure scheduled limit changes in the following ways:
Using a manifest file. For more information, see Configure scheduled limit changes using a manifest file.
Using CLI commands. For more information, see Configure scheduled limit changes using CLI commands.
For the procedures in this section, you must use the App Autoscaler CLI plug-in. To download and install the App Autoscaler CLI plug in, see Install the App Autoscaler CLI plug-in in Using the App Autoscaler CLI.
You can configure scheduled limit changes declaratively through a manifest file. This manifest file only configures Autoscaler, and does not interfere with any other existing app manifest files in your TAS for VMs deployment.
To configure scheduled limit changes using a manifest file:
In a terminal window, target the space in which the app you want to scale is deployed by running:
cf target -o ORG-NAME -s SPACE-NAME
Where:
ORG-NAME
is the name of the org containing the space in which the app you want to scale is deployed.SPACE-NAME
is the name of the space in which the app you want to scale is deployed.If the space in which the app you want to scale is deployed does not already have a service instance of Autoscaler deployed in it, create an Autoscaler service instance by running:
cf create-service app-autoscaler PLAN-NAME SERVICE-NAME
Where:
PLAN-NAME
is the name of the service plan you want to use for the Autoscaler service instance.SERVICE-INSTANCE-NAME
is the name you want to give the Autoscaler service instance. For example, autoscaler
.Bind the Autoscaler service instance to the app you want to scale by running:
cf bind-service APP-NAME SERVICE-INSTANCE-NAME
Where:
APP-NAME
is the name of the app you want to scale.SERVICE-INSTANCE-NAME
is the name of the Autoscaler service instance.To create a manifest file for Autoscaler that configures a scheduled limit change, create a YAML file that includes the following configuration parameters:
instance_limits:
min: LOWER-SCALING-LIMIT
max: UPPER-SCALING-LIMIT
rules: []
scheduled_limit_changes:
- recurrence: RECURRENCE
executes_at: "TIME"
instance_limits:
min: SCHEDULED-LOWER-SCALING-LIMIT
max: SCHEDULED-UPPER-SCALING-LIMIT
Where:
LOWER-SCALING-LIMIT
is the minimum number of instances that you configured Autoscaler to create for the app by default.UPPER-SCALING-LIMIT
is the maximum number of instances that you configured Autoscaler to create for the app by default.RECURRENCE
is the calculated value of the bitmasked days of the week on which you want Autoscaler to re-apply the scheduled limit change. For more information, see Calculating a Recurrence Schedule Value below.TIME
is the time, in UTC timestamp format, at which you want Autoscaler to apply the scheduled limit change. For example, 2032-01-01T20:00:00Z
. If the value that you configure for TIME
is your local time converted to UTC time, and Daylight Saving Time is observed in your time zone, the UTC offset for your time zone might change during the year. SCHEDULED-LOWER-SCALING-LIMIT
is the minimum number of instances you want Autoscaler to create for the app during the scheduled limit change. If the current number of app instances is fewer than this number at the time of the scheduled limit change, Autoscaler scales the number of app instances up to this number.SCHEDULED-UPPER-SCALING-LIMIT
is the maximum number of instances you want Autoscaler to create for the app during the scheduled limit change. If the current number of app instances is greater than this number at the time of the scheduled limit change, Autoscaler scales the number of app instances down to this number.Apply the manifest file you configured in the previous step to the app for which you want to configure scheduled limit changes by running:
cf configure-autoscaling APP-NAME MANIFEST-FILENAME
Where:
APP-NAME
is the name of the app.MANIFEST-FILENAME
is the filename of the manifest file you created in the previous step. For example, autoscaler.yml
.For example, running the following applies the autoscaler.yml
manifest file to example-app
:
cf configure-autoscaling example-app autoscaler-manifest.yml
The earlier command returns output similar to the following example:
Setting autoscaler settings for app example-app for org example-org / space example-space as user OK
When you configure a recurring scheduled limit change for Autoscaler using a manifest file, Autoscaler uses the recurrence
value and executes at
value to set the date and time of the first occurrence of a scheduled limit change. Autoscaler then uses the time
value to set the time of day for all subsequent scheduled limit changes.
Because Autoscaler bitmasks the days of the week in its recurrence schedule, you must calculate the correct value to enter for the recurrence
property in your Autoscaler manifest file.
To calculate a recurrence
value:
Day | Su | Mo | Tu | We | Th | Fr | Sa |
---|---|---|---|---|---|---|---|
Value | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
32+16+8+4+2=62
. In your Autoscaler manifest, the value of recurrence
must be 62
.64+1=65
. In your Autoscaler manifest, the value of recurrence
must be 65
.64+32+16+8+4+2+1=127
. In your Autoscaler manifest, the value of recurrence
must be 127
.32+8+2=42
. In your Autoscaler manifest, the value of recurrence
must be 42
.The following example manifest configures Autoscaler to scale the number of app instances down every Friday at 8 PM UTC, then scale them back up every Monday at 4 AM UTC:
---
...
scheduled_limit_changes:
- recurrence: 32
executes_at: "2032-01-01T20:00:00Z"
instance_limits:
min: 1
max: 3
- recurrence: 2
executes_at: "2032-01-01T04:00:00Z"
instance_limits:
min: 6
max: 12
To configure scheduled limit changes using CLI commands:
In a terminal window, target the space in which the app you want to scale is deployed by running:
cf target -o ORG-NAME -s SPACE-NAME
Where:
ORG-NAME
is the name of the org containing the space in which the app you want to scale is deployed.SPACE-NAME
is the name of the space in which the app you want to scale is deployed.If the space in which the app you want to scale is deployed does not already have a service instance of Autoscaler deployed in it, create an Autoscaler service instance by running:
cf create-service app-autoscaler PLAN-NAME SERVICE-INSTANCE-NAME
Where:
PLAN-NAME
is the name of the service plan you want to use for the Autoscaler service instance.SERVICE-INSTANCE-NAME
is the name you want to give the Autoscaler service instance. For example, autoscaler
.If there is already an Autoscaler service instance in the space in which the app you want to scale is deployed, skip this step.
Bind the Autoscaler service instance to the app you want to scale by running:
cf bind-service APP-NAME SERVICE-INSTANCE-NAME
Where:
APP-NAME
is the name of the app you want to scale.SERVICE-INSTANCE-NAME
is the name of the Autoscaler service instance.Configure upper and lower scaling limits for the app by running:
cf update-autoscaling-limits APP-NAME LOWER-SCALING-LIMIT UPPER-SCALING-LIMIT
Where:
APP-NAME
is the name of the app.LOWER-SCALING-LIMIT
is the minimum number of instances you want Autoscaler to create for the app.UPPER-SCALING-LIMIT
is the maximum number of instances you want Autoscaler to create for the app.Allow Autoscaler to begin making scaling decisions for the app by running:
cf enable-autoscaling APP-NAME
Where APP-NAME
is the name of the app.
Create a scheduled limit change by running:
cf create-autoscaling-slc APP-NAME TIME LOWER-SCALING-LIMIT UPPER-SCALING-LIMIT --recurrence DAY-1,DAY-2,DAY-3
Where:
APP-NAME
is the name of the app.TIME
is the time, in UTC timestamp format, at which you want Autoscaler to apply the scheduled limit change. For example, 2032-01-01T20:00:00Z
. If the value that you configure for TIME
is your local time converted to UTC time, and Daylight Saving Time is observed in your time zone, the UTC offset for your time zone might change during the year. LOWER-SCALING-LIMIT
is the minimum number of instances you want Autoscaler to create for the app during the scheduled limit change. If the current number of app instances is fewer than this number at the time of the scheduled limit change, Autoscaler scales the number of app instances up to this number.UPPER-SCALING-LIMIT
is the maximum number of instances you want Autoscaler to create for the app during the scheduled limit change. If the current number of app instances is greater than this number at the time of the scheduled limit change, Autoscaler scales the number of app instances down to this number.--recurrence
parameter to specify the days of the week on which you want Autoscaler to re-apply the scheduled limit change, where DAY-1
, DAY-2
, DAY-3
, and so on are the days you want to specify. Valid values are Mo
, Tu
, We
, Th
, Fr
, Sa
, or Su
. For example, if you want Autoscaler to re-apply the scheduled limit change on Monday, Wednesday, Friday, and Saturday, include --recurrence Mo,We,Fr,Sa
in the above command.To configure scheduled limit changes through Apps Manager, see Create or modify scheduled limit changes in Scaling an App using App Autoscaler.
When Autoscaler applies a scheduled limit change, it records an autoscaling event. If the current number of app instances is under the lower scaling limit of the scheduled limit change, Autoscaler scales the number of app instances up to the lower scaling limit and records a separate autoscaling event.
You can review the autoscaling events that Autoscaler records for scheduled limit changes in the following ways:
Through the cf CLI. For more information, see Review Autoscaling events for scheduled limit changes through the cf CLI.
Through Apps Manager. For more information, see Review Autoscaling events for scheduled limit changes through Apps Manager.
To review the autoscaling events that Autoscaler records for scheduled limit changes through the cf CLI:
In a terminal window, run:
cf autoscaling-events APP-NAME
Where APP-NAME
is the name of the app for which you want to review autoscaling events.
If Autoscaler has recorded autoscaling events for scheduled limit changes, the above command returns output that contains autoscaling events similar to the following example:
Time Description 2022-05-26T21:32:17Z Scaling from 10 to 20 instances: app below minimum instance limit 2022-05-26T21:31:50Z Rule Applied: Scaling Limits set to 20 to 100 instances
To review the autoscaling events that Autoscaler records for scheduled limit changes through Apps Manager:
Log in to Apps Manager. For more information, see Logging in to Apps Manager.
Select the org that contains the space in which the app you want to scale is deployed.
Select the space in which the app you want to scale is deployed.
Under Processes and Instances, click Manage Autoscaling.
Under Event History, click View More. A list of autoscaling events appears. If Autoscaler has recorded autoscaling events for scheduled limit changes, the list of autoscaling events includes events similar to the following example:
Scaling from 10 to 20 instances: app below minimum instance limit
Rule Applied: Scaling Limits set to 20 to 100 instances