Quick Start

Installation

pip install RAX-AutoScaler

Configuration

Edit config.json adding the following: - API username - API key - Region name - Autoscaling group section should contain:

  • AutoScale Group UUID
  • Scale Up Policy UUID
  • Scale Down Policy UUID
  • Check Type (agent.cpu, agent.load_average...)
  • Metric Name (depends on the check type)
  • Scale Up Threshold
  • Scale Down Threshold
  • Webhooks Url (Pre & Post commit url(s) for scale up/down)

Usage

Once configured you can invoke the autoscaler.py script.

–cluster option should be used when this script actually runs on auto-scale group members. Otherwise if it is running on a dedicated management instance you do not require this option.

–as-group option should be used when you have multiple groups listed in the config.json file.

–config-file option should be used if config.json file does not exists in current directory or in ‘/etc/rax-autoscaler’ path.

Once tested you should configure this script to run as a cron job either on a management instance or on all cluster members

Cloud Init

You can use the cloud-config file to auto-install RAX-Autoscaler on new servers. For example to do so on Rackspace cloud using supernova

supernova <region> boot –user-data ./cloud-config –image <image id/name> –flavor <flavor id/name> –config-drive=true <server name>

To use this with autoscale you would want to set the userdata of your launch configuration to the base64 encoded string of the file:

"launchConfiguration": {
      "args": {
          "server": {
              "config_drive" : true,
              "flavorRef": "general1-1",
              "imageRef": "CentOS 6.5 (PVHVM)",
              "key_name" : "MY_SSH_KEY",
              "user_data" : "I2Nsb3VkLWNvbmZpZwoKcGFja2FnZXM6CiAgLSBweXRob24tcGlwCgpydW5jbWQ6CiAgLSBbIHBpcCwgaW5zdGFsbCwgUkFYLUF1dG9TY2FsZXIgXQo=",
              "name": "test-autoscale"
          }
      },
      "type": "launch_server"
  }

This has been tested on these images:

  • Ubuntu 14.04 LTS (PVHVM)
  • CentOS 6.5 (PVHVM)

In the example the value of user_data contains the base64 encoded version of the following script:

echo -n "I2Nsb3VkLWNvbmZpZwoKcGFja2FnZXM6CiAgLSBweXRob24tcGlwCgpydW5jbWQ6CiAgLSBbIHBpcCwgaW5zdGFsbCwgUkFYLUF1dG9TY2FsZXIgXQo=" | base64 -D

To base64 encode a script

cat /path/to/USER_DATA | base64

Size of USER_DATA can be reduced with gzip:

cat /path/to/USER_DATA | gzip | base64

Note

RAX-AutoScaler depends on Rackspace Monitoring Agent to get the data from nodes in scaling group.

If the agent is not installed please read: Install the Cloud Monitoring Agent: http://www.rackspace.com/knowledge_center/article/install-the-cloud-monitoring-agent

Contributing

  • Fork it
  • Create your feature branch (git checkout -b my-new-feature)
  • Commit your changes (git commit -am ‘Add some feature’)
  • Push to the branch (git push origin my-new-feature)
  • Create new Pull Request