blob: 4370fec3875c50a23a349cab382421cbd8304289 [file] [log] [blame]
.. Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information#
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
Configuring AutoScale with the CloudStack Virtual Router
=============================================
What is AutoScaling?
--------------------
AutoScaling allows you to scale your back-end services or application Instances up
or down seamlessly and automatically according to the conditions you define.
With AutoScaling enabled, you can ensure that the number of Instances you are using
seamlessly scale up when demand increases, and automatically decreases when
demand subsides. Thus it helps you save compute costs by terminating underused
Instances automatically and launching new ones when you need them, without the need
for manual intervention.
Hypervisor support
------------------
At that time, AutoScaling with virtual router supports KVM, VMware and Xenserver.
Prerequisites
-------------
Before you configure an AutoScale rule, consider the following:
- Ensure that the necessary Template is prepared before configuring AutoScale.
Firstly you must install the PV-driver or virtio driver, which helps CloudStack
collects performance parameters (CPU and memory) into Instances. Besides, when an Instance is
deployed by using a Template and when it comes up, the application should be
up and running.
- Create an Isolated Network using a Network offering which supports Instance AutoScaling,
acquire a new IP address (it will be used as Source NAT of the Network) and create
a load balancer rule without any Instance.
For more information, see `“Configure Guest Traffic in an Advanced Zone”
<networking_and_traffic.html#configure-guest-traffic-in-an-advanced-zone>`_ ,
`“Acquiring a New IP Address” <networking_and_traffic.html#acquiring-a-new-ip-address>`_
and `“Adding a Load Balancer Rule” <networking_and_traffic.html#adding-a-load-balancer-rule>`_.
.. note::
There is a known issue when CloudStack collects memory statistics from Instances on
KVM hosts, see https://github.com/apache/cloudstack/pull/6358 .
To get memory statistics on KVM hosts, please add the following line to
/etc/cloudstack/agent/agent.properties and restart cloudstack-agent (5/10/60 are tested ok):
vm.memballoon.stats.period = <Interval in seconds to get Instance stats on KVM host>
.. note::
There is a known issue when CloudStack collects average load balancer connections
from CloudStack Virtual Routers, see https://github.com/apache/cloudstack/issues/6849
.. note::
The Load Balancer configurations can be found at `“Load Balancer Configurations”
<networking_and_traffic.html#load-balancer-configurations>`_.
.. note::
VmAutoScaling capability is enabled by default for Network offerings which support
load balancer. To disable it, please create a Network offering without VmAutoScaling support.
For more information, see `“Creating a New Network Offering”
<networking.html#creating-a-new-network-offering>`_.
Adding an AutoScale Instance Group
-------------
#. Log in to the CloudStack UI as an administrator or end user.
#. In the left navigation, choose Compute -> AutoScale Instance Groups.
#. Click the New AutoScale Instance Group button.
Specify the following:
- Zone: A zone where the Instances will be deployed to.
- Template: A Template consists of a base OS image and application. A
Template is used to provision the new Instance of an application on a
scaleup action. When an Instance is deployed from a Template, it can start
taking the traffic from the load balancer without any admin intervention.
For example, if the Instance is deployed for a Web service, it should have the
Web server running, the database connected, and so on.
- Compute offering: A predefined set of virtual hardware attributes,
including CPU speed, number of CPUs, and RAM size, that the user can select
when creating a new Instance. Choose one of the compute offerings to be used
while provisioning an Instance as part of the scaleup action.
- Data disk: An extra disk attached to each Instance in the Instance group.
- Networks: The Networks of the Instances. If there are multiple networks
checked, the network of the load balancer rule will be the default Network
of the Instances.
- Load balancing rule: When an Instance is created, it will be automatically
assigned to the load balancing rule. When an Instance is expunged, it
will be removed from the load balancing rule.
- ScaleUp policies: The policies for ScaleUp action. When all of the conditions
in one of the ScaleUp policies are met, CloudStack will create an Instance
if the number of Instances do not exceed Max Instance.
For more information, see `“AutoScale policies”
<autoscale_with_virtual_router.html#autoscale-policies>`_.
- ScaleDown policies: The policies for ScaleDown action. When all of the
conditions in one of the ScaleDown policies are met, CloudStack will expunge
an Instance in the group if the number of Instances is larger than Min Instance.
For more information, see `“AutoScale policies”
<autoscale_with_virtual_router.html#autoscale-policies>`_.
- Name: The name of the Instance group. The name of the new Instances will use the
name of the Instance group as prefix.
- Min Instance: The minimum number of active Instances that is assigned to
a load balancing rule. The active Instances are the application
Instances that are up and serving the traffic, and are being load balanced.
This parameter ensures that a load balancing rule has at least the
configured number of active Instances are available to serve the traffic.
- Max Instance: Maximum number of active Instances that should be assigned
to a load balancing rule. This parameter defines the upper limit of active
Instances that can be assigned to a load balancing rule.
Specifying a large value for the Maximum Instance parameter might result in
provisioning large number of Instances, which in turn leads to a single
load balancing rule exhausting the Instances limit specified at the
account or domain level.
- Polling interval: Frequency in which the conditions, combination of counter,
operator and threshold, are to be evaluated before taking a scale up or
down action. The default polling interval is 30 seconds.
- Expunge Instance Grace Period: The duration in seconds, after a scaledown action
is initiated, to wait before the Instance is expunged as part of scaledown
action. This is to ensure graceful close of any pending sessions or
transactions being served by the Instance marked for expunge. The default is 120
seconds.
- Create: Click Create to create the AutoScale Instance group.
Additionally, if you want to configure the advanced settings, click Show
advanced settings, and specify the following:
- SSH key pairs: The SSH Keys of the Instances.
For more information, see `“Using SSH Keys for Authentication”
<virtual_machines.html#using-ssh-keys-for-authentication>`_.
- Affinity groups: The affinity groups of the Instances.
For more information, see `“Affinity Groups”
<virtual_machines.html#affinity-groups>`_.
- User Data: The User Data of the Instances.
For more information, see `“User Data and Metadata”
<virtual_machines.html#user-data-and-metadata>`_.
AutoScale Policies
-------------------------------------------------
An AutoScale Instance Group must have one or more scale-up policies, and one or more
scale-down policies.
Each AutoScale Policy has the following parameters:
- Duration: The duration, in seconds, for which the conditions you specify
must be true to trigger a scale action. The conditions defined should
hold true for the entire duration you specify for an AutoScale action to be
invoked.
- Quiet Time: This is the cool down period after an AutoScale action is
initiated. The time includes the time taken to complete provisioning an
Instance from its Template and the time taken by an application to be ready
to serve traffic. This quiet time allows the fleet to come up to a stable
state before any action can take place. The default is 300 seconds.
- Action: The scale action. The options are ScaleUp and ScaleDown.
- Conditions: A policy must contain at least one condition.
Each condition in AutoScale policies has the following parameters:
- Counter: The performance counters expose the state of the monitored
Instances. We added five new counters to work with that feature:
- Instance CPU - average percentage
- Instance Memory - average percentage
- Public Network - mbps received per Instance
- Public Network - mbps transmit per Instance
- Load Balancer - average connections per Instance
Remember to choose one of them. If you choose anything else, the
autoscaling will not work.
- Operator: The following five relational operators are supported in
AutoScale feature: Greater than, Less than, Less than or equal to, Greater
than or equal to, and Equal to.
- Threshold: Threshold value to be used for the counter. Once the counter
defined above breaches the threshold value, the AutoScale feature initiates
a scaleup or scaledown action.
.. note::
The counter "Instance Memory - average percentage" calculates the average memory usage
of available Instances (in Starting, Stopping, Running, Migrating states) in the
AutoScale Instance Group. On KVM/XenServer, the Instance memory usage is calculated by
Instance memory usage percentage = (total memory - free memory) * 100 / total memory
.. note::
The counters "Public Network - mbps received per Instance" and
"Public Network - mbps transmit per Instance" consider all public
traffic through the VR public interface, including the traffic from/to other
Instances which are not in the AutoScale Instance group.
.. note::
Each network has a network rate which are configured by global configuration
network.throttling.rate and "Network rate (Mb/s)" in network offering.
Disabling and Enabling an AutoScale Instance Group
-------------------------------------------------
You can view the detail of the AutoScale Instance Group.
#. Log in to the CloudStack UI as an administrator or end user.
#. In the left navigation, choose Compute -> AutoScale Instance Groups.
#. Select the AutoScale Instance Group you want to work with.
|autoscale-vmgroup-details.png|
If you want to perform any maintenance operation on the AutoScale Instances,
disable the AutoScale Instance Group. When the AutoScale Instance Group is
disabled, no scaleup or scaledown action is performed. You can use this
downtime for the maintenance activities. To disable the AutoScale Instance Group,
click the Disable AutoScale Instance Group button.
The button toggles between enable and disable, depending on whether AutoScale
is currently enabled or not. After the maintenance operations are done, you
can enable the AutoScale Instance Group back. To enable the AutoScale Instance Group, click
the Enable AutoScale Instance Group button.
Updating an AutoScale Instance Group
-----------------------------------
You can update the various parameters of Instance profile, and add or delete the
conditions in a scaleup or scaledown policy. Before you update an AutoScale Instance
Group, ensure that you disable it first by clicking the Disable AutoScale button.
To update the AutoScale Instance Group, click the Update AutoScale Instance Group button.
|autoscale-vmgroup-update.png|
Updating AutoScale Instance Profile
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To update the Instance Profile of the AutoScale Instance Group, click the AutoScale Instance Profile
tab, You will see the details of AutoScale Instance Profile.
|autoscale-vmgroup-profile.png|
then click Edit AutoScale Instance Profile button.
|autoscale-vmgroup-profile-update.png|
You are able to reset User Data of the Instance, by clicking Reset User Data on AutoScale Instance Group button.
|autoscale-vmgroup-profile-reset-userdata.png|
You are also able to update the deploy parameters of the Instances.
|autoscale-vmgroup-deploy-parameters.png|
The following parameters are supported.
- affinitygroupids: The UUID of the affinity groups, separated by a single
comma character (,).
- diskofferingid: The UUID of the data disk.
- disksize: The size of data disk. This is valid only if the disk offering
is dynamic.
- keypairs: The name of the SSH Key pairs, separated by a single comma
character (,).
- networkids: The UUID of the Instance networks, separated by a single comma
character (,).
- overridediskofferingid: The UUID of override disk offering for ROOT disk.
- rootdisksize: The size of the ROOT disk. This overrides the size of the Instance Template.
- securitygroupids: The UUID of security groups, separated by a single comma
character (,). This is valid only if the network provider is Netscaler.
Adding an AutoScale policy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To add a new Scale policy to the AutoScale Instance Group, click the ScaleUp policy
or ScaleDown policy tab, then click "Add policy".
|autoscale-vmgroup-policy-new.png|
For more information, see `“AutoScale policies”
<autoscale_with_virtual_router.html#autoscale-policies>`_.
Updating AutoScale policies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To update the AutoScale policies of the AutoScale Instance Group, click the ScaleUp policy
or ScaleDown policy tab.
|autoscale-vmgroup-policy.png|
To update an existing AutoScale policies, select a policy, input the new value
of Duration or Quiet time, then click Edit button.
To add a new condition to the policy, choose Counter and Operator and input the value,
click Add condition.
To remove an existing condition from the policy, click Delete button of the condition.
To update a condition in the policy, click Edit button, choose Operator and input the
value, click OK button.
Removing an AutoScale policy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To remove an existing AutoScale policies, select a policy, click "Remove policy" button.
.. note::
To apply the new AutoScale Instance Profile and AutoScale policies, open the AutoScale Instance
Group details, then click the Enable AutoScale Instance Group button.
Deleting an AutoScale Instance Group
------------------------------------
To remove an AutoScale Instance Group, click "Delete AutoScale Instance Group" button.
|autoscale-vmgroup-delete.png|
AutoScale Instance Group can be removed only if there are no Instances in the group.
To force-delete the AutoScale Instance Group, check the cleanup checkbox, then click OK button.
All the Instances in the group will be expunged.
Runtime Considerations
----------------------
An administrator should not assign an Instance to a load balancing rule which is
configured for AutoScale.
Making API calls outside the context of AutoScale, such as destroyVM, on an
autoscaled Instance leaves the load balancing configuration in an inconsistent state.
Even though the Instance is destroyed from the load balancer rule, it continues to be shown as
a service assigned to a rule inside the context of AutoScale.
.. |autoscale-vmgroup-delete.png| image:: /_static/images/autoscale-vmgroup-delete.png
:alt: Delete AutoScale Instance Group.
.. |autoscale-vmgroup-deploy-parameters.png| image:: /_static/images/autoscale-vmgroup-deploy-parameters.png
:alt: AutoScale Instance deploy parameters.
.. |autoscale-vmgroup-details.png| image:: /_static/images/autoscale-vmgroup-details.png
:alt: AutoScale Instance Group details.
.. |autoscale-vmgroup-policy-new.png| image:: /_static/images/autoscale-vmgroup-policy-new.png
:alt: Add new AutoScale Policy.
.. |autoscale-vmgroup-policy.png| image:: /_static/images/autoscale-vmgroup-policy.png
:alt: AutoScale Policies.
.. |autoscale-vmgroup-profile.png| image:: /_static/images/autoscale-vmgroup-profile.png
:alt: AutoScale Instance Profile.
.. |autoscale-vmgroup-update.png| image:: /_static/images/autoscale-vmgroup-update.png
:alt: Update AutoScale Instance Group.
.. |autoscale-vmgroup-profile-update.png| image:: /_static/images/autoscale-vmgroup-profile-update.png
:alt: Update AutoScale Instance Profile.
.. |autoscale-vmgroup-profile-reset-userdata.png| image:: /_static/images/autoscale-vmgroup-profile-reset-userdata.png
:alt: Reset User Data in AutoScale Instance Profile.