6.3. 控制节点的位置
默认情况下,director 为每个角色随机选择节点,通常基于它们的配置集标签(tag)。但是,director 也提供了指定特定节点的功能。它可以实现:
- 分配特定节点 ID,如
controller-0
、controller-1
等 - 设置自定义的主机名
- 设置特定的 IP 地址
6.3.1. 分配特定的节点 ID
这个过程把节点 ID 分配 给特定节点。节点 ID 的示例包括
controller-0
、controller-1
、novacompute-0
、novacompute-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(如 compute
、control
等)。
6.3.2. 自定义主机名
通过使用 第 6.3.1 节 “分配特定的节点 ID” 中介绍的节点 ID 配置,director 可以为每个节点分配一个特定的自定义主机名。如把系统的主机名设置为
rack2-row12
来表示它所在的位置。
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
命令中包括这个环境文件。