| .. 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 using CloudStack Virtual Router |
| ============================================= |
| |
| |
| What is AutoScaling? |
| -------------------- |
| |
| AutoScaling allows you to scale your back-end services or application VMs up |
| or down seamlessly and automatically according to the conditions you define. |
| With AutoScaling enabled, you can ensure that the number of VMs 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 |
| VMs automatically and launching new VMs 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 VMs. Beside, When a VM 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 VM AutoScaling, |
| acquire a new IP address (it will be used as Source NAT of the network) and create |
| a load balancer rule without any VM. |
| 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 VMs 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 VM 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 balanacer. 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 VM Group |
| ------------- |
| |
| #. Log in to the CloudStack UI as an administrator or end user. |
| |
| #. In the left navigation, choose Compute -> AutoScale VM Groups. |
| |
| #. Click the New AutoScale VM Group button. |
| |
| Specify the following: |
| |
| - Zone: A zone where the VMs 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 a VM is deployed from a template, the VM can start |
| taking the traffic from the load balancer without any admin intervention. |
| For example, if the VM 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 virtual machine instance. Choose one of the compute |
| offerings to be used while provisioning a VM instance as part of scaleup |
| action. |
| |
| - Data disk: An extra disk attached to each VM instance in the VM group. |
| |
| - Networks: The networks of the VM instances. If there are multiple networks |
| checked, the network of the load balancer rule will be the default network |
| of VM instances. |
| |
| - Load balancing rule: When a VM instance is created, it will be automatically |
| assigned to the load balancing rule. When a VM 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 a VM instance |
| if the number of VMs 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 |
| a VM instance in the group if the number of VMs is larger than Min Instance. |
| |
| For more information, see `“AutoScale policies” |
| <autoscale_with_virtual_router.html#autoscale-policies>`_. |
| |
| - Name: The name of the VM group. The name of new VM instances will use the |
| name of the VM group as prefix. |
| |
| - Min Instance: The minimum number of active VM instances that is assigned to |
| a load balancing rule. The active VM 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 VM instances are available to serve the traffic. |
| |
| - Max Instance: Maximum number of active VM instances that should be assigned |
| to a load balancing rule. This parameter defines the upper limit of active |
| VM 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 VM instances, which in turn leads to a single |
| load balancing rule exhausting the VM 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 VM Grace Period: The duration in seconds, after a scaledown action |
| is initiated, to wait before the VM is expunged as part of scaledown |
| action. This is to ensure graceful close of any pending sessions or |
| transactions being served by the VM marked for expunge. The default is 120 |
| seconds. |
| |
| - Create: Click Create to create the AutoScale VM 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 VM 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 VM instances. |
| |
| For more information, see `“Affinity Groups” |
| <virtual_machines.html#affinity-groups>`_. |
| |
| - Userdata: The userdata of the VM instances. |
| |
| For more information, see `“User-Data and Meta-Data” |
| <virtual_machines.html#user-data-and-meta-data>`_. |
| |
| |
| AutoScale Policies |
| ------------------------------------------------- |
| |
| An AutoScale Vm 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 a VM |
| 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: |
| |
| - VM CPU - average percentage |
| - VM Memory - average percentage |
| - Public Network - mbps received per vm |
| - Public Network - mbps transmit per vm |
| - Load Balancer - average connections per vm |
| |
| 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 "VM Memory - average percentage" calculates the average memory usage |
| of available VMs (in Starting, Stopping, Running, Migrating states) in the |
| AutoScale VM Group. On KVM/XenServer, the VM memory usage is calculated by |
| |
| VM memory usage percentage = (total memory - free memory) * 100 / total memory |
| |
| .. note:: |
| The counters "Public Network - mbps received per vm" and |
| "Public Network - mbps transmit per vm" consider all public |
| traffic through the VR public interface, including the traffic from/to other |
| VMs which are not in the AutoScale VM 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 VM Group |
| ------------------------------------------------- |
| |
| You can view the detail of the AutoScale VM Group. |
| |
| #. Log in to the CloudStack UI as an administrator or end user. |
| |
| #. In the left navigation, choose Compute -> AutoScale VM Groups. |
| |
| #. Select the AutoScale VM Group you want to work with. |
| |
| |autoscale-vmgroup-details.png| |
| |
| If you want to perform any maintenance operation on the AutoScale VM instances, |
| disable the AutoScale VM Group. When the AutoScale VM Group is |
| disabled, no scaleup or scaledown action is performed. You can use this |
| downtime for the maintenance activities. To disable the AutoScale VM Group, |
| click the Disable AutoScale VM 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 VM Group back. To enable the AutoScale VM Group, click |
| the Enable AutoScale VM Group button. |
| |
| |
| Updating an AutoScale VM Group |
| ----------------------------------- |
| |
| You can update the various parameters of VM profile, and add or delete the |
| conditions in a scaleup or scaledown policy. Before you update an AutoScale VM |
| Group, ensure that you disable the AutoScale VM Group by clicking the |
| Disable AutoScale button. |
| |
| To update the AutoScale VM Group, click the Update AutoScale VM Group button. |
| |
| |autoscale-vmgroup-update.png| |
| |
| Updating AutoScale VM Profile |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| To update the VM Profile of the AutoScale VM Group, click the AutoScale VM Profile |
| tab, then click Edit AutoScale VM Profile button. |
| |
| |autoscale-vmgroup-profile.png| |
| |
| You are also able to update the deploy parameters of the VM 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 VM 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 VM 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 VM 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 VM 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 VM Profile and AutoScale policies, open the AutoScale VM |
| Group details, then click the Enable AutoScale VM Group button. |
| |
| Deleting an AutoScale VM Group |
| ---------------------- |
| |
| To remove an AutoScale VM Group, click "Delete AutoScale VM Group" button. |
| |
| |autoscale-vmgroup-delete.png| |
| |
| AutoScale VM Group can be removed only if there is no VM in the group. |
| |
| To force-delete the AutoScale VM Group, check the cleanup checkbox, then click OK button. |
| All the VMs in the group will be expunged. |
| |
| Runtime Considerations |
| ---------------------- |
| |
| An administrator should not assign a VM to a load balancing rule which is |
| configured for AutoScale. |
| |
| Making API calls outside the context of AutoScale, such as destroyVM, on an |
| autoscaled VM leaves the load balancing configuration in an inconsistent state. |
| Though VM is destroyed from the load balancer rule, it continues be showed 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 VM Group. |
| .. |autoscale-vmgroup-deploy-parameters.png| image:: /_static/images/autoscale-vmgroup-deploy-parameters.png |
| :alt: AutoScale VM deploy parameters. |
| .. |autoscale-vmgroup-details.png| image:: /_static/images/autoscale-vmgroup-details.png |
| :alt: AutoScale VM 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 VM Profile. |
| .. |autoscale-vmgroup-update.png| image:: /_static/images/autoscale-vmgroup-update.png |
| :alt: Update AutoScale VM Group. |
| |