Fix issues in py files in the directories valet/valet/api/common valet/api valet/cli valet/engine/optimizer/ valet/tests/ valet/tests/tempest valet_plugins
7.6 KiB
valet-openstack
Valet gives OpenStack the ability to optimize cloud resources while simultaneously meeting a cloud application's QoS requirements. Valet provides an api service, an optimizer (Ostro), and a set of OpenStack plugins.
This document covers installation of valet-openstack, a set of OpenStack plugins used to interact with Valet.
IMPORTANT: Overall Installation of Valet is covered in a separate document. These instructions are a component of the overall instructions.
Prerequisites
Prior to installation:
- Ubuntu 14.04 LTS
- Python 2.7.6 with pip
- An OpenStack Kilo cloud
- Access to a valet-api endpoint
Throughout this document, the following installation-specific items are required. Have values for these prepared and ready before continuing. Suggestions for values are provided in this document where applicable.
Name | Description | Example |
---|---|---|
USER |
User id | user1234 |
$VENV |
Python virtual environment path (if any) | /etc/valet/venv |
$VALET_OS_PATH |
Local git repository's valet_os directory |
/home/user1234/git/valet/valet_os |
$VALET_HOST |
valet-api hostname | localhost |
$VALET_USERNAME |
OpenStack placement service username | valet |
$VALET_PASSWORD |
OpenStack placement service password | |
$VALET_TENANT_NAME |
OpenStack placement service default tenant | service |
$VALET_FAILURE_MODE |
Desired failure mode for Nova ValetFilter | reject |
$KEYSTONE_AUTH_API |
Keystone Auth API publicurl endpoint | http://controller:5000/ |
$KEYSTONE_REGION |
Keystone Region | RegionOne |
Root or sufficient sudo privileges are required for some steps.
A Note About Python Virtual Environments
As valet-openstack works in concert with OpenStack services, if heat and nova have been installed in a python virtual environment (venv), valet-openstack must be installed and configured in the same environment. (A venv helps avoid instabilities and conflicts within the default python environment.)
Installation
Install valet-openstack on the OpenStack controller node containing heat-engine and nova-scheduler. If these services are distributed across multiple nodes, install and configure valet-openstack as appropriate on each node.
valet-openstack is located in valet_os
.
$ cd $VALET_OS_PATH
$ sudo pip install .
OpenStack Configuration
valet-openstack requires edits to the heat and nova configuration files, and a stop/start of the heat-engine and nova-scheduler services.
Prerequisites
The following keystone commands must be performed by an OpenStack cloud administrator.
Add a user ($VALET_USERNAME
), giving it an admin
role in one tenant ($VALET_TENANT_NAME
, usually service
):
$ keystone user-create --name $VALET_USERNAME --pass $VALET_PASSWORD
$ keystone user-role-add --user $VALET_USERNAME --tenant $VALET_TENANT_NAME --role admin
Create the service entity and API endpoints. While this is not used by Valet 1.0, it is being reserved for future use.
$ keystone service-create --type placement --name valet --description "OpenStack Placement"
$ keystone endpoint-create --region $KEYSTONE_REGION --service valet --publicurl 'http://$VALET_HOST:8090/v1' --adminurl 'http://$VALET_HOST:8090/v1' --internalurl 'http://$VALET_HOST:8090/v1'
Note: In OpenStack parlance, Valet is canonically referred to as a placement service.
The administrator may choose to use differing hostnames/IPs for public vs. admin vs. internal URLs, depending on local architecture and requirements.
Heat
The following changes are made in /etc/heat/heat.conf
.
Set plugin_dirs
in the [DEFAULT]
section such that Heat can locate and use the Valet Stack Lifecycle Plugin.
[DEFAULT]
plugin_dirs = /usr/local/etc/valet_os/heat
Note: If a virtual environment is in use, change the path to be relative to the virtual environment's location, e.g. $VENV/etc/valet_os/heat
.
If plugin_dirs
is already present, separate entries by commas. The order of entries does not matter. See the OpenStack heat.conf documentation for more information.
Enable stack lifecycle scheduler hints in the [DEFAULT]
section:
[DEFAULT]
stack_scheduler_hints = True
Add a [valet]
section. This will be used by the Valet Stack Lifecycle Plugin:
[valet]
url = http://$VALET_HOST:8090/v1
Restart heat-engine using separate stop and start directives:
$ sudo service heat-engine stop
$ sudo service heat-engine start
Examine the heat-engine log (usually in /var/log/heat/heat-engine.log
). The ATT::Valet
plugin should be found and registered:
INFO heat.engine.environment [-] Registered: [Plugin](User:False) ATT::Valet::GroupAssignment -> <class 'heat.engine.plugins.GroupAssignment.GroupAssignment'>
The heat command line interface (python-heatclient) can also be used to verify plugin registration:
$ heat resource-type-list | grep ATT
| ATT::Valet::GroupAssignment |
Nova
The following changes are made in /etc/nova/nova.conf
.
The nova-scheduler
service requires manual configuration so that Nova can locate and use Valet's Scheduler Filter.
Edit the [DEFAULT]
section so that scheduler_available_filters
and scheduler_default_filters
reference Valet, for example:
[DEFAULT]
scheduler_available_filters = nova.scheduler.filters.all_filters
scheduler_available_filters = valet_os.nova.valet_filter.ValetFilter
scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, ValetFilter
When referring to additional filter plugins, multiple scheduler_available_filters
lines are required. The first line explicitly makes all of nova's default filters available. The second line makes Valet's filter available. Additional lines may be required for additional plugins.
When setting scheduler_default_filters
, ensure that ValetFilter
is placed last so that Valet has the final say in scheduling decisions.
Note: scheduler_available_filters
denotes filters that are available for use. scheduler_default_filters
denotes filters that are enabled by default.
Add a [valet]
section. This will be used by the Valet Scheduler Filter:
[valet]
url = http://$VALET_HOST:8090/v1
failure_mode = $VALET_FAILURE_MODE
admin_tenant_name = $VALET_TENANT_NAME
admin_username = $VALET_USERNAME
admin_password = $VALET_PASSWORD
admin_auth_url = $KEYSTONE_AUTH_API
$VALET_FAILURE_MODE
refers to the action ValetFilter
takes in the effect of a scheduling failure. It can be set to yield
(defer to the other filter choices) or reject
(block all other filter choices). The default action is reject
so as to protect the integrity of Valet exclusivity groups. If exclusivity groups will never be used, or maintaining exclusivity group integrity is not required/practical, it may be desirable to set this to yield
.
Restart nova-scheduler using separate stop and start directives:
$ sudo service nova-scheduler stop
$ sudo service nova-scheduler start
Uninstallation
Activate a virtual environment (venv) first if necessary, then uninstall with:
$ sudo pip uninstall valet-openstack
Remove previously made configuration file changes, OpenStack user accounts, and other settings as needed.