控制平面服务部署¶
注意
这是一个高级主题,只有在熟悉 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 组中的主机。
变量 |
目的 |
|---|---|
|
通过 SSH 访问主机的用户名。 |
|
在配置 |
|
要配置的 LVM 卷组列表。请参阅 mrlesmithjr.manage_lvm 角色 以获取格式。 |
|
软件 RAID 阵列列表。请参阅 mrlesmithjr.mdadm 角色 以获取格式。 |
|
主机连接的网络名称列表。 |
|
要设置的 sysctl 参数字典。 |
|
要创建的用户列表。请参阅 singleplatform-eng.users 角色 |
如果通过 kayobe overcloud bios raid configure 配置 BIOS 和 RAID,则还应定义以下变量
变量 |
目的 |
|---|---|
|
将 BIOS 配置选项映射到其所需值的字典。请参阅 stackhpc.drac 角色 以获取格式。 |
|
要配置的 RAID 虚拟磁盘列表。请参阅 stackhpc.drac 角色 以获取格式。 |
这些变量可以在库存主机或组变量文件中定义,位于 ${KAYOBE_CONFIG_PATH}/inventory/host_vars/<host> 或 ${KAYOBE_CONFIG_PATH}/inventory/group_vars/<group> 下。
自定义 Kolla-ansible 库存¶
作为高级选项,可以完全自定义 kolla-ansible 库存的内容,在各个级别。为了便于操作,kayobe 将 kolla-ansible 库存分解为三个单独的部分。
顶层 组定义主机的角色,例如 controller 或 compute,主机直接映射到这些组。
组件 定义服务组,例如 nova 或 ironic,这些服务组映射到顶层组。
服务 定义单个容器,例如 nova-compute 或 ironic-api,这些容器映射到组件。
默认顶层库存由 kolla_overcloud_inventory_top_level_group_map 生成。Kayobe 的 kolla-ansible 组件和服务的库存是静态的,并取自 kolla-ansible 示例 multinode 库存。通过连接这些库存生成完整的库存。
可以通过设置以下变量来单独覆盖每个级别
变量 |
目的 |
|---|---|
|
包含从顶层组到主机的映射的 Overcloud 库存。 |
|
包含从组件到顶层组的映射的 Overcloud 库存。 |
|
包含从服务到组件的映射的 Overcloud 库存。 |
|
完整的 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 具有相当粗粒度的默认组 - controller、compute 等,这些在大多数情况下都能很好地工作。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。