Chapter 6. Creating and managing host aggregates
As a cloud administrator, you can partition a Compute deployment into logical groups for performance or administrative purposes. Red Hat OpenStack Platform (RHOSP) provides the following mechanisms for partitioning logical groups:
- Host aggregate
A host aggregate is a grouping of Compute nodes into a logical unit based on attributes such as the hardware or performance characteristics. You can assign a Compute node to one or more host aggregates.
You can map flavors and images to host aggregates by setting metadata on the host aggregate, and then matching flavor extra specs or image metadata properties to the host aggregate metadata. The Compute scheduler can use this metadata to schedule instances when the required filters are enabled. Metadata that you specify in a host aggregate limits the use of that host to any instance that has the same metadata specified in its flavor or image.
You can configure weight multipliers for each host aggregate by setting the
xxx_weight_multiplier
configuration option in the host aggregate metadata.You can use host aggregates to handle load balancing, enforce physical isolation or redundancy, group servers with common attributes, or separate classes of hardware.
When you create a host aggregate, you can specify a zone name. This name is presented to cloud users as an availability zone that they can select.
- Availability zones
An availability zone is the cloud user view of a host aggregate. A cloud user cannot view the Compute nodes in the availability zone, or view the metadata of the availability zone. The cloud user can only see the name of the availability zone.
You can assign each Compute node to only one availability zone. You can configure a default availability zone where instances will be scheduled when the cloud user does not specify a zone. You can direct cloud users to use availability zones that have specific capabilities.
6.1. Enabling scheduling on host aggregates
To schedule instances on host aggregates that have specific attributes, update the configuration of the Compute scheduler to enable filtering based on the host aggregate metadata.
Procedure
- Open your Compute environment file.
Add the following values to the
NovaSchedulerDefaultFilters
parameter, if they are not already present:AggregateInstanceExtraSpecsFilter
: Add this value to filter Compute nodes by host aggregate metadata that match flavor extra specs.NoteFor this filter to perform as expected, you must scope the flavor extra specs by prefixing the
extra_specs
key with theaggregate_instance_extra_specs:
namespace.AggregateImagePropertiesIsolation
: Add this value to filter Compute nodes by host aggregate metadata that match image metadata properties.NoteTo filter host aggregate metadata by using image metadata properties, the host aggregate metadata key must match a valid image metadata property. For information about valid image metadata properties, see Image metadata in the Creating and Managing Images guide.
AvailabilityZoneFilter
: Add this value to filter by availability zone when launching an instance.NoteInstead of using the
AvailabilityZoneFilter
Compute scheduler service filter, you can use the Placement service to process availability zone requests. For more information, see Filtering by availability zone using the Placement service.
- Save the updates to your Compute environment file.
Add your Compute environment file to the stack with your other environment files and deploy the overcloud:
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yaml
6.2. Creating a host aggregate
As a cloud administrator, you can create as many host aggregates as you require.
Procedure
To create a host aggregate, enter the following command:
(overcloud)# openstack aggregate create <aggregate_name>
Replace
<aggregate_name>
with the name you want to assign to the host aggregate.Add metadata to the host aggregate:
(overcloud)# openstack aggregate set \ --property <key=value> \ --property <key=value> \ <aggregate_name>
-
Replace
<key=value>
with the metadata key-value pair. If you are using theAggregateInstanceExtraSpecsFilter
filter, the key can be any arbitrary string, for example,ssd=true
. If you are using theAggregateImagePropertiesIsolation
filter, the key must match a valid image metadata property. For more information about valid image metadata properties, see Image metadata. -
Replace
<aggregate_name>
with the name of the host aggregate.
-
Replace
Add the Compute nodes to the host aggregate:
(overcloud)# openstack aggregate add host \ <aggregate_name> \ <host_name>
-
Replace
<aggregate_name>
with the name of the host aggregate to add the Compute node to. -
Replace
<host_name>
with the name of the Compute node to add to the host aggregate.
-
Replace
Create a flavor or image for the host aggregate:
Create a flavor:
(overcloud)$ openstack flavor create \ --ram <size_mb> \ --disk <size_gb> \ --vcpus <no_reserved_vcpus> \ host-agg-flavor
Create an image:
(overcloud)$ openstack image create host-agg-image
Set one or more key-value pairs on the flavor or image that match the key-value pairs on the host aggregate.
To set the key-value pairs on a flavor, use the scope
aggregate_instance_extra_specs
:(overcloud)# openstack flavor set \ --property aggregate_instance_extra_specs:ssd=true \ host-agg-flavor
To set the key-value pairs on an image, use valid image metadata properties as the key:
(overcloud)# openstack image set \ --property os_type=linux \ host-agg-image
6.3. Creating an availability zone
As a cloud administrator, you can create an availability zone that cloud users can select when they create an instance.
Procedure
To create an availability zone, you can create a new availability zone host aggregate, or make an existing host aggregate an availability zone:
To create a new availability zone host aggregate, enter the following command:
(overcloud)# openstack aggregate create \ --zone <availability_zone> \ <aggregate_name>
-
Replace
<availability_zone>
with the name you want to assign to the availability zone. -
Replace
<aggregate_name>
with the name you want to assign to the host aggregate.
-
Replace
To make an existing host aggregate an availability zone, enter the following command:
(overcloud)# openstack aggregate set --zone <availability_zone> \ <aggregate_name>
-
Replace
<availability_zone>
with the name you want to assign to the availability zone. -
Replace
<aggregate_name>
with the name of the host aggregate.
-
Replace
Optional: Add metadata to the availability zone:
(overcloud)# openstack aggregate set --property <key=value> \ <aggregate_name>
-
Replace
<key=value>
with your metadata key-value pair. You can add as many key-value properties as required. -
Replace
<aggregate_name>
with the name of the availability zone host aggregate.
-
Replace
Add Compute nodes to the availability zone host aggregate:
(overcloud)# openstack aggregate add host <aggregate_name> \ <host_name>
-
Replace
<aggregate_name>
with the name of the availability zone host aggregate to add the Compute node to. -
Replace
<host_name>
with the name of the Compute node to add to the availability zone.
-
Replace
6.4. Deleting a host aggregate
To delete a host aggregate, you first remove all the Compute nodes from the host aggregate.
Procedure
To view a list of all the Compute nodes assigned to the host aggregate, enter the following command:
(overcloud)# openstack aggregate show <aggregate_name>
To remove all assigned Compute nodes from the host aggregate, enter the following command for each Compute node:
(overcloud)# openstack aggregate remove host <aggregate_name> \ <host_name>
-
Replace
<aggregate_name>
with the name of the host aggregate to remove the Compute node from. -
Replace
<host_name>
with the name of the Compute node to remove from the host aggregate.
-
Replace
After you remove all the Compute nodes from the host aggregate, enter the following command to delete the host aggregate:
(overcloud)# openstack aggregate delete <aggregate_name>
6.5. Creating a project-isolated host aggregate
You can create a host aggregate that is available only to specific projects. Only the projects that you assign to the host aggregate can launch instances on the host aggregate.
Project isolation uses the Placement service to filter host aggregates for each project. This process supersedes the functionality of the AggregateMultiTenancyIsolation
filter. You therefore do not need to use the AggregateMultiTenancyIsolation
filter.
Procedure
- Open your Compute environment file.
-
To schedule project instances on the project-isolated host aggregate, set the
NovaSchedulerLimitTenantsToPlacementAggregate
parameter toTrue
in the Compute environment file. Optional: To ensure that only the projects that you assign to a host aggregate can create instances on your cloud, set the
NovaSchedulerPlacementAggregateRequiredForTenants
parameter toTrue
.NoteNovaSchedulerPlacementAggregateRequiredForTenants
isFalse
by default. When this parameter isFalse
, projects that are not assigned to a host aggregate can create instances on any host aggregate.- Save the updates to your Compute environment file.
Add your Compute environment file to the stack with your other environment files and deploy the overcloud:
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/<compute_environment_file>.yaml \
- Create the host aggregate.
Retrieve the list of project IDs:
(overcloud)# openstack project list
Use the
filter_tenant_id<suffix>
metadata key to assign projects to the host aggregate:(overcloud)# openstack aggregate set \ --property filter_tenant_id<ID0>=<project_id0> \ --property filter_tenant_id<ID1>=<project_id1> \ ... --property filter_tenant_id<IDn>=<project_idn> \ <aggregate_name>
-
Replace
<ID0>
,<ID1>
, and all IDs up to<IDn>
with unique values for each project filter that you want to create. -
Replace
<project_id0>
,<project_id1>
, and all project IDs up to<project_idn>
with the ID of each project that you want to assign to the host aggregate. Replace
<aggregate_name>
with the name of the project-isolated host aggregate.For example, use the following syntax to assign projects
78f1
,9d3t
, andaa29
to the host aggregateproject-isolated-aggregate
:(overcloud)# openstack aggregate set \ --property filter_tenant_id0=78f1 \ --property filter_tenant_id1=9d3t \ --property filter_tenant_id2=aa29 \ project-isolated-aggregate
TipYou can create a host aggregate that is available only to a single specific project by omitting the suffix from the
filter_tenant_id
metadata key:(overcloud)# openstack aggregate set \ --property filter_tenant_id=78f1 \ single-project-isolated-aggregate
-
Replace
Additional resources
- For more information on creating a host aggregate, see Creating and managing host aggregates.