Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.3. 控制节点的位置

默认情况下,director 为每个角色随机选择节点,通常基于它们的配置集标签(tag)。但是,director 也提供了指定特定节点的功能。它可以实现:
  • 分配特定节点 ID,如 controller-0controller-1
  • 设置自定义的主机名
  • 设置特定的 IP 地址

6.3.1. 分配特定的节点 ID

这个过程把节点 ID 分配 给特定节点。节点 ID 的示例包括 controller-0controller-1novacompute-0novacompute-1 等等。
第一步是,分配 ID 作为每个节点的能力,从而使 Nova 调度程序可以在部署时进行匹配。例如:
ironic node-update <id> replace properties/capabilities='node:controller-0,boot_option:local'
这会把能力 node:controller-0 分配给节点。使用连续的索引值来为所有节点进行分配(以 0 开始)。确定对于一个特定角色(Controller、Compute 以及每个存储角色)的所有节点都以同样形式进行标记(tag),否则 Nova 调度程序将无法正确匹配能力。
下一步是,创建一个 Heat 环境文件(例如,scheduler_hints_env.yaml),它使用调度程序的 hint 来为每个节点匹配能力。例如:
parameter_defaults:
  ControllerSchedulerHints:
    'capabilities:node': 'controller-%index%'
要使用这些调度程序 hint,在进行 Overcloud 创建时在 overcloud deploy command 中包括 scheduler_hints_env.yaml 环境文件。
按照同样的方法,使用以下参数设置每个节点:
  • ControllerSchedulerHints 用于 Controller 节点。
  • NovaComputeSchedulerHints 用于 Compute 节点。
  • BlockStorageSchedulerHints 用于 Block Storage 节点。
  • ObjectStorageSchedulerHints 用于 Object Storage 节点。
  • CephStorageSchedulerHints 用于 Ceph Storage 节点。

注意

节点位置的设置会比配置集匹配有更高优先级。为了避免调度失败,在部署时使用 baremetal flavor,而不要使用针对于配置集匹配的 flavor(如 computecontrol 等)。

6.3.2. 自定义主机名

通过使用 第 6.3.1 节 “分配特定的节点 ID” 中介绍的节点 ID 配置,director 可以为每个节点分配一个特定的自定义主机名。如把系统的主机名设置为 rack2-row12 来表示它所在的位置。
为了自定义节点主机名,在环境文件中(如 第 6.3.1 节 “分配特定的节点 ID” 中的 scheduler_hints_env.yaml 文件)使用 HostnameMap 参数。例如:
parameter_defaults:
  ControllerSchedulerHints:
    'capabilities:node': 'controller-%index%'
  NovaComputeSchedulerHints:
    'capabilities:node': 'novacompute-%index%'
  HostnameMap:
    overcloud-controller-0: overcloud-controller-prod-123-0
    overcloud-controller-1: overcloud-controller-prod-456-0
    overcloud-controller-2: overcloud-controller-prod-789-0
    overcloud-novacompute-0: overcloud-novacompute-prod-abc-0
parameter_defaults 的部分中定义 HostnameMap,使用 HostnameFormat 参数设置 head 定义的原始主机名的映射信息(如 overcloud-controller-0),第二个值是那个节点的自定义主机名(如 overcloud-controller-prod-123-0)。
通过使用这个方法以及节点 ID 的放置功能,每个节点将会有一个自定义主机名。

6.3.3. 分配可预测的 IP

为了可以对环境进行更好的控制,director 可以在每个网络中为 Overcloud 节点分配特定的 IP。使用核心 Heat 模板集合中的 environments/ips-from-pool-all.yaml 环境文件,把这个文件复制到 stack 用户的 templates 目录中。
$ cp /usr/share/openstack-tripleo-heat-templates/environments/ips-from-pool-all.yaml ~/templates/.
ips-from-pool-all.yaml 文件包括两个主要部分。
第一部分是一组 resource_registry 用来覆盖默认设置。它们用来通知 director 在一个节点类型的指定端口上使用一个特定的 IP。修改每个资源来使用到代表它们的模板的绝对 URL。例如:
  OS::TripleO::Controller::Ports::ExternalPort: /usr/share/openstack-tripleo-heat-templates/network/ports/external_from_pool.yaml
  OS::TripleO::Controller::Ports::InternalApiPort: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api_from_pool.yaml
  OS::TripleO::Controller::Ports::StoragePort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_from_pool.yaml
  OS::TripleO::Controller::Ports::StorageMgmtPort: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt_from_pool.yaml
  OS::TripleO::Controller::Ports::TenantPort: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant_from_pool.yaml
默认的设置是,所有节点类型上的所有网络都使用预先配置的 IP。如果需要设置特定的网络或节点类型使用默认的 IP 分配设置,在环境文件中把与那个节点类型或网络相关的 resource_registry 项删除。
第二个部分是 parameter_defaults,它代表了实际分配的 IP 地址。每个节点类型都有一个相关的参数:
  • ControllerIPs 代表 Controller 节点。
  • NovaComputeIPs 代表 Compute 节点。
  • CephStorageIPs 代表 Ceph Storage 节点。
  • BlockStorageIPs 代表 Block Storage 节点。
  • SwiftStorageIPs 代表 Object Storage 节点。
每个参数就是一个网络名称到地址列表的映射信息。每个网络类型需要最少有它们在网络中的节点数量相同的数量。director 会顺序分配地址。每个类型的第一个节点会被分配相关列表中的第一个地址,第二个节点被分配相关列表中的第二个地址,以此类推。
例如,如果一个 Overcloud 将要包括三个 Ceph Storage 节点,CephStorageIPs 参数的设置会和以下类似:
CephStorageIPs:
  storage:
  - 172.16.1.100
  - 172.16.1.101
  - 172.16.1.102
  storage_mgmt:
  - 172.16.3.100
  - 172.16.3.101
  - 172.16.3.102
第一个 Ceph Storage 节点会接收两个地址:172.16.1.100 和 172.16.3.100。第二个节点接收 172.16.1.101 和 172.16.3.101,第三个节点接收 172.16.1.102 和 172.16.3.102。相同原则适用于其它节点类型。
确定所选的 IP 地址位于环境文件中定义的每个网络的地址分配池之外(请参阅 第 6.2.2 节 “创建一个网络环境文件”)。例如,确定 internal_api 分配的地址位于 InternalApiAllocationPools 的范围之外,这会避免与每个网络所选 VIP 的冲突。同样,确定分配的 IP 地址与为外部负载平衡环境定义的 VIP 配置没有冲突(请参阅 第 6.5 节 “配置外部负载平衡”)。
要在部署的过程中应用这个配置,在 openstack overcloud deploy 命令中包括这个环境文件。