Chapter 3. Prepare Overcloud Role for Hyper-Converged Nodes

The Overcloud usually consists of nodes in predefined roles such as Controller nodes, Compute nodes, and different storage node types. Each of these default roles contains a set of services defined in the core Heat template collection on the director node. However, the architecture of the core Heat templates provides a method to:

  • Create custom roles
  • Add and remove services from each role

This allows us to define a new role with both Compute and Ceph object storage daemon (OSD) services. This effectively colocates both services, allowing you to deploy them together on the same hyper-converged node.

Roles used for the overcloud are defined in the roles_data.yaml file. You can use the director to generate a customized version of this file, containing all the roles you intend to use for your overcloud. You can then invoke the custom version during Chapter 6, Deployment.

Red Hat OpenStack Platform provides a predefined custom role specifically for hyper-converged nodes, named ComputeHCI. To use this role, you need to generate a custom roles_data.yaml file that includes ComputeHCI along with other roles you intend to use for the overcloud:

$ openstack overcloud roles generate -o /home/stack/roles_data.yaml Controller ComputeHCI Compute CephStorage

This command will generate a custom roles_data.yaml file in /home/stack/ This custom file contains the ComputeHCI role, along with the Controller, Compute, and CephStorage roles. Add any other roles you intend to use in your overcloud to the command.


3.1. Configuring Port Assignments for the ComputeHCI Role

The default Heat templates in /usr/share/openstack-tripleo-heat-templates/ provide the necessary network settings for the default roles. These settings include how IP addresses and ports should be assigned for each service on each node.

Custom roles like ComputeHCI do not have the required port assignment Heat templates, so you need to define these yourself. To do so, create a new Heat template named ports.yaml in ~/templates containing the following:

  OS::TripleO::ComputeHCI::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml   1
  OS::TripleO::ComputeHCI::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api.yaml
  OS::TripleO::ComputeHCI::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage.yaml
  OS::TripleO::ComputeHCI::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant.yaml
  OS::TripleO::ComputeHCI::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt.yaml  2
If you are using DVR, replace this line with:
  OS::TripleO::ComputeHCI::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external.yaml

See Configure Distributed Virtual Routing (DVR) from the Networking Guide for more details.

If you want the ComputeHCI role to select from a pool of IPs, replace this line with:
  OS::TripleO::ComputeHCI::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt_from_pool.yaml

If your environment uses IPv6 addresses, replace this line with:

  OS::TripleO::ComputeHCI::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt_v6.yaml

If you want the ComputeHCI role to select from a pool of IPv6 addresses, use:

  OS::TripleO::ComputeHCI::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt_from_pool_v6.yaml

For any other storage IP and port settings, review the other templates in /usr/share/openstack-tripleo-heat-templates/network/ports/ for hints on customization.

See Basic Network Isolation (from Advanced Overcloud Customization) for related information.

3.2. Creating and Assigning a New Flavor

As mentioned in Section 1.1, “Assumptions”, you should have already registered and tagged each node with a corresponding flavor. However, since deploying mixed HCI involves defining a new ComputeHCI role, you also need to create a new flavor for it:

  1. To create a new flavor named osdcompute, run:

    $ openstack flavor create --id auto --ram 6144 --disk 40 --vcpus 4 osdcompute

    For more details about this command, run openstack flavor create --help.

  2. Map this flavor to a new profile, also named osdcompute:

    $ openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="osdcompute" osdcompute

    For more details about this command, run openstack flavor set --help.

  3. Tag nodes into the new osdcompute profile:

    $ ironic node-update UUID add properties/capabilities='profile:osdcompute,boot_option:local'

See Manually Tagging the Nodes and Assigning Nodes and Flavors to Roles (from Deploying an Overcloud with Containerized Red Hat Ceph) for related details.