控制平面服务部署

注意

这是一个高级主题,只有在熟悉 kayobe 和 OpenStack 的情况下才能尝试。

kayobe 中的默认配置将所有控制平面服务放置在描述为“controllers”的单个服务器集上。在某些情况下,可能需要引入多个服务器角色到控制平面,并控制哪些服务放置到不同的服务器角色上。

配置

Overcloud 库存发现

如果使用 seed host 来启用控制平面服务的发现,则需要配置发现的主机如何映射到 kayobe 组。这使用 overcloud_group_hosts_map 变量完成,该变量将 kayobe 组的名称映射到要添加到该组的主机列表。

此变量将在 kayobe overcloud inventory discover 命令期间使用。将在 ${KAYOBE_CONFIG_PATH}/inventory/overcloud 中生成一个库存文件,其中根据 overcloud_group_hosts_map 将发现的主机添加到适当的 kayobe 组。

Kolla-ansible 库存映射

一旦主机被发现并注册到 kayobe 库存中,就必须将它们添加到 kolla-ansible 库存中。这是通过使用 kolla_overcloud_inventory_top_level_group_map 变量从顶层 kayobe 组映射到顶层 kolla-ansible 组。此变量从 kolla-ansible 组映射到 kayobe 组列表,以及要在 kolla-ansible 库存中为这些组定义的变量。

自定义服务器角色的变量

必须为 overcloud 组中的主机定义某些变量。对于 controllers 组中的主机,许多变量被映射到带有 controller_ 前缀的其他变量,这些变量位于 ansible/inventory/group_vars/controllers/ 下的文件中。这是为了能够在全局额外变量文件中(通常是 controllers.yml)设置它们,并在 ansible/inventory/group_vars/all/controllers 中设置默认值。类似方案用于 monitoring 组中的主机。

Overcloud 主机变量

变量

目的

ansible_user

通过 SSH 访问主机的用户名。

bootstrap_user

在配置 ansible_user 之前访问主机的用户名。

lvm_groups

要配置的 LVM 卷组列表。请参阅 mrlesmithjr.manage_lvm 角色 以获取格式。

mdadm_arrays

软件 RAID 阵列列表。请参阅 mrlesmithjr.mdadm 角色 以获取格式。

network_interfaces

主机连接的网络名称列表。

sysctl_parameters

要设置的 sysctl 参数字典。

users

要创建的用户列表。请参阅 singleplatform-eng.users 角色

如果通过 kayobe overcloud bios raid configure 配置 BIOS 和 RAID,则还应定义以下变量

Overcloud BIOS & RAID 主机变量

变量

目的

bios_config

将 BIOS 配置选项映射到其所需值的字典。请参阅 stackhpc.drac 角色 以获取格式。

raid_config

要配置的 RAID 虚拟磁盘列表。请参阅 stackhpc.drac 角色 以获取格式。

这些变量可以在库存主机或组变量文件中定义,位于 ${KAYOBE_CONFIG_PATH}/inventory/host_vars/<host>${KAYOBE_CONFIG_PATH}/inventory/group_vars/<group> 下。

自定义 Kolla-ansible 库存

作为高级选项,可以完全自定义 kolla-ansible 库存的内容,在各个级别。为了便于操作,kayobe 将 kolla-ansible 库存分解为三个单独的部分。

顶层 组定义主机的角色,例如 controllercompute,主机直接映射到这些组。

组件 定义服务组,例如 novaironic,这些服务组映射到顶层组。

服务 定义单个容器,例如 nova-computeironic-api,这些容器映射到组件。

默认顶层库存由 kolla_overcloud_inventory_top_level_group_map 生成。Kayobe 的 kolla-ansible 组件和服务的库存是静态的,并取自 kolla-ansible 示例 multinode 库存。通过连接这些库存生成完整的库存。

可以通过设置以下变量来单独覆盖每个级别

自定义 kolla-ansible 库存变量

变量

目的

kolla_overcloud_inventory_custom_top_level

包含从顶层组到主机的映射的 Overcloud 库存。

kolla_overcloud_inventory_custom_components

包含从组件到顶层组的映射的 Overcloud 库存。

kolla_overcloud_inventory_custom_services

包含从服务到组件的映射的 Overcloud 库存。

kolla_overcloud_inventory_custom

完整的 Overcloud 库存内容。

示例

示例 1:添加网络主机

本示例介绍了可应用于启用单独主机用于 neutron 网络服务和负载平衡的配置。控制平面由三个控制器 controller-[0-2] 和两个网络主机 network-[0-1] 组成。所有文件路径都相对于 ${KAYOBE_CONFIG_PATH}

首先,我们必须使网络组与控制器分离

inventory/groups
 [controllers]
 # Empty group to provide declaration of controllers group.

 [network]
 # Empty group to provide declaration of network group.

然后,我们必须将主机映射到 kayobe 组。

overcloud.yml
overcloud_group_hosts_map:
  controllers:
    - controller-0
    - controller-1
    - controller-2
  network:
    - network-0
    - network-1

接下来,我们必须将这些组映射到 kolla-ansible 组。

kolla.yml
kolla_overcloud_inventory_top_level_group_map:
  control:
    groups:
      - controllers
  network:
    groups:
      - network

最后,我们为网络组中的主机创建一个组变量文件,提供控制平面主机所需的变量。

inventory/group_vars/network
ansible_user: "{{ kayobe_ansible_user }}"
bootstrap_user: "{{ controller_bootstrap_user }}"
lvm_groups: "{{ controller_lvm_groups }}"
mdadm_arrays: "{{ controller_mdadm_arrays }}"
network_interfaces: "{{ controller_network_host_network_interfaces }}"
sysctl_parameters: "{{ controller_sysctl_parameters }}"
users: "{{ controller_users }}"

在这里,我们正在为其中一些变量使用控制器特定的值,但它们也可以不同。

示例 2:覆盖 Kolla-ansible 库存

本示例演示如何覆盖 kolla-ansible 库存的一个或多个部分。所有文件路径都相对于 ${KAYOBE_CONFIG_PATH}

通常最好从 Kayobe 源代码中获取库存模板开始,然后进行自定义。模板可以在 ansible/roles/kolla-ansible/templates 中找到,例如组件模板是 overcloud-components.j2

首先,创建一个包含自定义库存部分的文件。在本例中,我们将使用 组件 部分。

kolla/inventory/overcloud-components.j2
[nova]
control

[ironic]
{% if kolla_enable_ironic | bool %}
control
{% endif %}

...

接下来,我们必须配置 kayobe 以使用此库存模板。

kolla.yml
kolla_overcloud_inventory_custom_components: "{{ lookup('template', kayobe_env_config_path ~ '/kolla/inventory/overcloud-components.j2') }}"

在这里,我们使用 template 查找插件来渲染 Jinja2 格式的库存模板。

细粒度部署

Kayobe 具有相当粗粒度的默认组 - controllercompute 等,这些在大多数情况下都能很好地工作。Kolla Ansible 允许基于每个服务的更细粒度的部署,例如 ironic-conductor。如果操作员利用了这种细粒度部署,那么 Kayobe 的某些假设可能不正确。这是 Kayobe 和 Kolla Ansible 之间分离的一个缺点。

例如,Ironic conductor 服务可能已移动到顶层 controllers 组的一个子集。在这种情况下,我们不希望 Ironic 网络映射到 controllers 组中的所有主机 - 仅运行 Ironic conductor 服务的那些主机。如果负载均衡器服务(HAProxy 和 keepalived)或 Neutron 数据平面服务(例如 L3 和 DHCP 代理)与顶层 network 组分离,则可以提出相同的论点。

在这些情况下,可以使用以下变量来调整部署

controller_ironic_conductor_group

部署 Ironic conductor 服务的 Ansible 库存组。默认值为 controllers

controller_ironic_inspector_group

部署 Ironic inspector 服务的 Ansible 库存组。默认值为 controllers

controller_loadbalancer_group

部署控制平面负载均衡器服务的 Ansible 库存组。默认值为 network

controller_network_group

部署网络数据平面服务的 Ansible 库存组。默认值为 network