11.4. 使用预置备节点配置基本 overcloud
本章包含基本配置流程,可用于使用预置备节点配置 Red Hat OpenStack Platform (RHOSP) 环境。这种情境与标准 overcloud 创建情境有所不同,具体体现在以下几个方面:
- 您可以使用外部工具置备节点,让 director 仅控制 overcloud 的配置。
- 您无需依赖 director 的置备方法,可直接使用节点。如果您想创建没有电源管理控制的 overcloud 或使用具有 DHCP/PXE 引导限制的网络,该方法很有用。
- director 不使用 OpenStack Compute (nova)、OpenStack Bare Metal (ironic) 或者 OpenStack Image (glance) 来管理节点。
- 预置备的节点可以使用不依赖于 QCOW2 overcloud-full 镜像的自定义分区布局。
这种情境仅包括没有自定义功能的基本配置。
您无法将预置备节点与 director 置备的节点合并。
11.4.1. 预置备节点要求 复制链接链接已复制到粘贴板!
在开始使用预置备节点部署 overcloud 前,请确保环境中存在以下配置:
- 您在 第 7 章 在 undercloud 上安装 director 中创建的 director 节点。
- 节点的一组裸机。所需的节点数量由您需要创建的 overcloud 类型所决定。这些机器必须符合为每个节点类型设定的要求。这些节点需要 Red Hat Enterprise Linux 9.0 作为主机操作系统安装。红帽建议使用最新的可用版本。
- 用于管理预置备节点的一个网络连接。本情境需要具备对节点的不间断 SSH 访问权限以进行编配代理配置。
Control Plane 网络的一个网络连接。这种网络具备两种主要情境:
将 Provisioning 网络用作 Control Plane,这种是默认情境。这个网络通常是从预置备节点到 director 的第 3 层 (L3) 可路由网络连接。本情境示例使用以下 IP 地址分配:
Expand 表 11.10. Provisioning 网络 IP 分配信息 节点名 IP 地址 Director
192.168.24.1
控制器 0
192.168.24.2
计算 0
192.168.24.3
- 使用单独的网络。如果 director 的 Provisioning 网络是私有非路由网络,则可从任何子网定义节点的 IP 地址,通过公共 API 端点与 director 通信。有关此情境要求的更多信息,请参阅 第 11.4.6 节 “为预置备节点使用单独网络”。
- 本示例中的所有其他网络类型使用 Control Plane 网络来提供 OpenStack 服务。不过,您可以为其他网络流量类型创建额外的网络。
-
如果有任何节点使用 Pacemaker 资源,服务用户
hacluster和服务组haclient必须具有 189 的 UID/GID。这是因为 CVE-2018-16877。如果与操作系统一起安装了 Pacemaker,则安装会自动创建这些 ID。如果错误设置 ID 值,请按照文章 OpenStack 小幅更新/快进升级可能在 controller 节点上在 pacemaker 步骤失败,显示消息“Could not evaluate: backup_cib” 中的步骤来更改 ID 值。 -
要防止某些服务绑定到不正确的 IP 地址并导致部署失败,请确保
/etc/hosts文件不包含node-name=127.0.0.1映射。
11.4.2. 在预置备节点上创建用户 复制链接链接已复制到粘贴板!
使用预置备节点配置 overcloud 时,director 需要对 overcloud 节点进行 SSH 访问。在预置备的节点上,您必须创建一个使用 SSH 密钥身份验证的用户,并为该用户配置免密码 sudo 访问。在预置备的节点上创建用户后,可以结合使用 --overcloud-ssh-user 和 --overcloud-ssh-key 选项及 openstack overcloud deploy 命令,创建具有预置备节点的 overcloud。
默认情况下,overcloud SSH 用户和 overcloud SSH 密钥的值是 stack 用户和 ~/.ssh/id_rsa。要创建 stack 用户,请完成以下步骤。
步骤
在每个 overcloud 节点上,创建
stack用户并设定密码。例如,在 Controller 节点上运行以下命令:useradd stack passwd stack # specify a password
[root@controller-0 ~]# useradd stack [root@controller-0 ~]# passwd stack # specify a passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进行以下操作以使这个用户使用
sudo时不需要输入密码:echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack chmod 0440 /etc/sudoers.d/stack
[root@controller-0 ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack [root@controller-0 ~]# chmod 0440 /etc/sudoers.d/stackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有预置备节点上创建并配置
stack用户后,将stack用户的公共 SSH 密钥从 director 节点复制到每个 overcloud 节点。例如,要将 director 的公共 SSH 密钥复制到 Controller 节点,请运行以下命令:ssh-copy-id stack@192.168.24.2
[stack@director ~]$ ssh-copy-id stack@192.168.24.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要复制 SSH 密钥,您可能必须在每个 overcloud 节点的 SSH 配置中临时设置 PasswordAuthentication Yes。复制 SSH 密钥后,设置 PasswordAuthentication No,并在以后使用 SSH 密钥进行身份验证。
11.4.3. 为预置备节点注册操作系统 复制链接链接已复制到粘贴板!
每个节点需要具备访问红帽订阅的权限。在每个节点上完成以下步骤,将节点注册到 Red Hat Content Delivery Network 中。以 root 用户身份或具有 sudo 特权的用户身份执行命令。
仅启用列出的软件仓库。其他软件仓库可能导致软件包和软件冲突。请勿启用任何其他软件仓库。
步骤
运行注册命令,按照提示输入您的客户门户用户名和密码:
sudo subscription-manager register
[root@controller-0 ~]# sudo subscription-manager registerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查找 Red Hat OpenStack Platform 17.0 的权利池:
sudo subscription-manager list --available --all --matches="Red Hat OpenStack"
[root@controller-0 ~]# sudo subscription-manager list --available --all --matches="Red Hat OpenStack"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一步中的池 ID 以附加 Red Hat OpenStack Platform 16 权利:
sudo subscription-manager attach --pool=pool_id
[root@controller-0 ~]# sudo subscription-manager attach --pool=pool_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用所有默认软件仓库:
sudo subscription-manager repos --disable=*
[root@controller-0 ~]# sudo subscription-manager repos --disable=*Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用所需的 Red Hat Enterprise Linux 软件仓库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 overcloud 使用 Ceph Storage 节点,请启用相关的 Ceph Storage 软件仓库:
sudo subscription-manager repos \ --enable=rhel-9-for-x86_64-baseos-rpms \ --enable=rhel-9-for-x86_64-appstream-rpms \ --enable=openstack-beta-deployment-tools-for-rhel-9-x86_64-rpms
[root@cephstorage-0 ~]# sudo subscription-manager repos \ --enable=rhel-9-for-x86_64-baseos-rpms \ --enable=rhel-9-for-x86_64-appstream-rpms \ --enable=openstack-beta-deployment-tools-for-rhel-9-x86_64-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 除 Red Hat Ceph Storage 节点外,锁定所有 overcloud 节点上的 RHEL 版本:
sudo subscription-manager release --set=9.0
[root@controller-0 ~]# sudo subscription-manager release --set=9.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新您的系统,确保您具备最新的基础系统软件包:
sudo dnf update -y sudo reboot
[root@controller-0 ~]# sudo dnf update -y [root@controller-0 ~]# sudo rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
节点现在可供您的 overcloud 使用。
11.4.4. 配置对 director 的 SSL/TLS 访问权限 复制链接链接已复制到粘贴板!
如果 director 使用 SSL/TLS,那么预置备节点需要用于签署 director 的 SSL/TLS 证书的证书授权机构文件。如果使用自己的证书颁发机构(CA),请在每个 overcloud 节点上执行以下操作。
步骤
-
将证书授权机构文件复制到各预置备节点上的
/etc/pki/ca-trust/source/anchors/目录中。 在每个 overcloud 节点上运行以下命令:
sudo update-ca-trust extract
[root@controller-0 ~]# sudo update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这些步骤将确保 overcloud 节点可以通过 SSL/TLS 访问 director 的公共 API。
11.4.5. 配置 control plane 网络 复制链接链接已复制到粘贴板!
预置备 overcloud 节点使用标准 HTTP 请求从 director 获取元数据。这表示所有 overcloud 节点都需要 L3 权限来访问以下之一:
-
director 的 Control Plane 网络,这是在
undercloud.conf文件中使用network_cidr参数定义的子网。overcloud 节点需要对该子网的直接访问权限或对该子网的可路由访问权限。 -
director 的公共 API 端点,使用
undercloud.conf文件中的undercloud_public_host参数指定。如果没有指向 Control Plane 的 L3 路由或希望使用 SSL/TLS 通信,则此选项可用。有关将 overcloud 节点配置为使用公共 API 端点的更多信息,请参阅 第 11.4.6 节 “为预置备节点使用单独网络”。
director 使用 Control Plane 网络管理和配置标准 overcloud。对于具有预置备节点的 overcloud,可能需要对您的网络配置进行修改以适应 director 和预置备节点之间的通信。
使用网络隔离
您可以使用网络隔离分组服务以使用特定网络,包括 Control Plane。您可以为 Control Plane 上的节点定义特定 IP 地址。有关隔离网络和创建可预测的节点放置策略的更多信息,请参阅 网络隔离。
如果使用网络隔离,请确保您的 NIC 模板不包括用于 undercloud 访问的 NIC。这些模板可能会重新配置 NIC,这会导致在部署过程中出现连接和配置问题。
分配 IP 地址
如果不使用网络隔离,则可使用一个 Control Plane 网络管理所有服务。这需要手动配置每个节点的 Control Plane NIC,以便使用 Control Plane 网络范围内的 IP 地址。如果将 director 的 Provisioning 网络用作 Control Plane,请确保所选的 overcloud IP 地址不在置备(dhcp_start 和 dhcp_end)和内省 (inspection_iprange) DHCP 范围之内。
在创建标准 overcloud 期间,director 将创建 OpenStack Networking (neutron) 端口并为 Provisioning/Control Plane 网络上的 overcloud 节点自动分配 IP 地址。但是,这可能导致 director 分配的地址与您为每个节点手动配置的 IP 地址不同。在这种情况下,使用可预测的 IP 地址策略来强制 director 使用 Control Plane 上的预置备 IP 分配。
如果您使用网络隔离,创建自定义环境文件 deployed-ports.yaml 来实现可预测的 IP 策略。以下示例自定义环境文件 deployed-ports.yaml 传递一组资源 registry 映射和参数到 director,并定义预置备节点的 IP 分配。NodePortMap、ControlPlaneVipData 和 VipPortMap 参数定义与每个 overcloud 节点对应的 IP 地址和子网 CIDR。
- 1
NodePortMap映射定义节点分配的名称。- 2
- 节点的短主机名,其格式为 <
node_hostname>。 - 3
- 节点的网络定义和 IP 分配。网络包括
ctlplane、外部、internal_api、管理、存储、storage_mgmt和租户。IP 分配包括ip_address、ip_address_uri和ip_subnet:-
IPv4:
ip_address和ip_address_uri应该设置为相同的值。 IPv6 :
-
ip_address:设置为没有方括号的 IPv6 地址。 -
ip_address_uri: 设置为方括号中的 IPv6 地址,例如[2001:0db8:85a3:0000:0000:8a2e:0370:7334]。
-
-
IPv4:
11.4.6. 为预置备节点使用单独网络 复制链接链接已复制到粘贴板!
默认情况下,director 使用 Provisioning 网络作为 overcloud Control Plane。但是,如果此网络被隔离且不可路由,则节点在配置期间不能与 director 的内部 API 通信。在这种情况下,您可能需要为节点指定一个单独的网络,并进行配置,以便通过公共 API 与 director 通信。
对于此情境,有几个需要满足的要求:
- overcloud 节点必须容纳来自 第 11.4.5 节 “配置 control plane 网络” 的基本网络配置。
- 您必须在 director 上启用 SSL/TLS,以便使用公共 API 端点。有关更多信息,请参阅在 overcloud 公共端点上启用 SSL/TLS。
-
您必须为 director 指定一个可访问的完全限定域名(FQDN)。此 FQDN 必须解析为 director 的可路由 IP 地址。使用
undercloud.conf文件中的undercloud_public_host参数来设置这个 FQDN。
本节中的示例使用了与主要情境不同的 IP 地址分配:
| 节点名 | IP 地址或 FQDN |
|---|---|
| Director(内部 API) | 192.168.24.1 (Provisioning 网络和 Control Plane) |
| Director(公共 API) | 10.1.1.1 / director.example.com |
| overcloud 虚拟 IP | 192.168.100.1 |
| 控制器 0 | 192.168.100.2 |
| 计算 0 | 192.168.100.3 |
以下章节为需要单独的 overcloud 节点网络的情境提供额外配置。
IP 地址分配
IP 分配方法类似于 第 11.4.5 节 “配置 control plane 网络”。但是,由于 Control Plane 无法从部署的服务器路由,因此您可以使用 NodePortMap、ControlPlaneVipData 和 VipPortMap 参数从所选 overcloud 节点子网分配 IP 地址,包括访问 Control Plane 的虚拟 IP 地址。以下示例是适用于此网络架构的 第 11.4.5 节 “配置 control plane 网络” 中的 deployed-ports.yaml 自定义环境文件的修改版本:
- 1
RedisVipPort资源被映射至network/ports/noop.yaml。由于默认 Redis VIP 地址来自 Control Plane,因此该映射是必要的。在这种情况下,使用noop来禁用这种 Control Plane 映射。
11.4.7. 映射预置备的节点主机名 复制链接链接已复制到粘贴板!
配置预置备节点时,必须将基于 heat 的主机名映射到实际主机名,以便 ansible-playbook 能够到达可解析主机。请使用 HostnameMap 来映射这些值。
步骤
创建环境文件,例如
hostname-map.yaml,并包括HostnameMap参数和主机名映射。请遵循以下语法:parameter_defaults: HostnameMap: [HEAT HOSTNAME]: [ACTUAL HOSTNAME] [HEAT HOSTNAME]: [ACTUAL HOSTNAME]parameter_defaults: HostnameMap: [HEAT HOSTNAME]: [ACTUAL HOSTNAME] [HEAT HOSTNAME]: [ACTUAL HOSTNAME]Copy to Clipboard Copied! Toggle word wrap Toggle overflow [HEAT HOSTNAME]通常符合以下惯例:[STACK NAME]-[ROLE]-[INDEX]:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
hostname-map.yaml文件。
11.4.8. 为预置备节点配置 Ceph Storage 复制链接链接已复制到粘贴板!
在 undercloud 主机上完成以下步骤,为已部署的节点配置 Ceph。
流程
在 undercloud 主机上,创建环境变量
OVERCLOUD_HOSTS,并将该变量设置为您要用作 Ceph 客户端的 overcloud 主机的 IP 地址列表(以空格分隔):export OVERCLOUD_HOSTS="192.168.1.8 192.168.1.42"
export OVERCLOUD_HOSTS="192.168.1.8 192.168.1.42"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认的 overcloud 计划名称是
overcloud。如果使用其他名称,请创建一个环境变量OVERCLOUD_PLAN来存储您的自定义名称:export OVERCLOUD_PLAN="<custom-stack-name>"
export OVERCLOUD_PLAN="<custom-stack-name>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<custom-stack-name>替换为堆栈的名称。
-
将
运行
enable-ssh-admin.sh脚本,以在 Ansible 可用于配置 Ceph 客户端的 overcloud 节点上配置用户:bash /usr/share/openstack-tripleo-heat-templates/deployed-server/scripts/enable-ssh-admin.sh
bash /usr/share/openstack-tripleo-heat-templates/deployed-server/scripts/enable-ssh-admin.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行 openstack overcloud deploy 命令时,Ansible 配置您在 OVERCLOUD_HOSTS 变量中定义为 Ceph 客户端的主机。
11.4.9. 利用预置备节点创建 overcloud 复制链接链接已复制到粘贴板!
overcloud 部署使用标准 CLI 方法。对于预置备的节点,该部署命令需要使用来自核心 heat 模板集的一些额外选项和环境文件:
-
--disable-validations- 使用此选项禁止对未用于预置备基础架构的服务执行基本的 CLI 验证功能。如果不禁止这些验证,部署将失败。 -
environments/deployed-server-environment.yaml- 包含此环境文件以创建和配置预置备基础架构。这种环境文件用OS::Heat::DeployedServer资源代替OS::Nova::Server资源。
以下命令是示例 overcloud 部署命令,且环境文件特定于预置备的架构:
--overcloud-ssh-user 和 --overcloud-ssh-key 选项用于在配置阶段通过 SSH 连接每个 overcloud 节点,创建初始 tripleo-admin 用户,以及将 SSH 密钥注入 /home/tripleo-admin/.ssh/authorized_keys。要注入 SSH 密钥,请为初始 SSH 连接指定包含 --overcloud-ssh-user 和 --overcloud-ssh-key(默认为 ~/.ssh/id_rsa)的凭证。为限制使用 --overcloud-ssh-key 选项指定的私钥的风险,director 不会将该密钥传递给任何 API 服务,如 heat,只有 director openstack overcloud deploy 命令使用此密钥为 tripleo-admin 用户启用访问权限。
11.4.10. 访问 overcloud 复制链接链接已复制到粘贴板!
director 生成凭据文件,其中包含从 undercloud 操作 overcloud 所需的凭据。director 将此文件保存为 stack 用户主目录的 overcloudrc 文件。
流程
获取
overcloudrc文件:source ~/overcloudrc
(undercloud)$ source ~/overcloudrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令提示符更改,以指示您正在访问 overcloud:
(overcloud)$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要返回与 undercloud 交互,可提供
stackrc文件:source ~/stackrc
(overcloud)$ source ~/stackrc (undercloud)$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令提示符更改,以指示您正在访问 undercloud:
(undercloud)$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4.11. 扩展预置备节点 复制链接链接已复制到粘贴板!
扩展预置备节点的过程与 第 19 章 扩展 overcloud 节点 中的标准扩展流程类似。但是,添加新预置备节点的流程却不相同,这是因为预置备节点不从 OpenStack Bare Metal (ironic) 和 OpenStack Compute (nova) 使用标准注册和管理流程。
扩展预置备节点
使用预置备节点扩展 overcloud 时,必须在每个节点上配置编配代理以对应 director 的节点计数。
执行以下操作以扩展 overcloud 节点:
- 根据 第 11.4.1 节 “预置备节点要求” 准备新的预置备节点。
- 扩展节点。更多信息请参阅 第 19 章 扩展 overcloud 节点。
- 在执行部署命令后,等待 director 创建新的节点资源并启动配置。
缩减预置备节点
使用预置备节点缩减 overcloud 时,请遵循 第 19 章 扩展 overcloud 节点 中的缩减说明。
在缩减操作中,您可以为 OSP 置备或预置备的节点使用主机名。您也可以将 UUID 用于 OSP 置备的节点。但是,预先部署的节点没有 UUID,因此您始终使用主机名。将 hostname 或 UUID 值传递给 openstack overcloud node delete 命令。
流程
确定您要删除的节点的名称。
openstack stack resource list overcloud -n5 --filter type=OS::TripleO::ComputeDeployedServerServer
$ openstack stack resource list overcloud -n5 --filter type=OS::TripleO::ComputeDeployedServerServerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
stack_name列中对应的节点名称传递给openstack overcloud node delete命令:openstack overcloud node delete --stack <overcloud> <stack>
$ openstack overcloud node delete --stack <overcloud> <stack>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<overcloud>替换为 overcloud 堆栈的名称或 UUID。 -
将 <
;stack_name> 替换为您要删除的节点的名称。您可以在openstack overcloud node delete命令中包含多个节点名称。
-
将
确保
openstack overcloud node delete命令已运行完:openstack stack list
$ openstack stack listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当删除操作完成后,
overcloud堆栈的状态会显示UPDATE_COMPLETE。
从堆栈中移除 overcloud 节点之后,关闭这些节点。在标准部署中,director 上的裸机服务控制此功能。但是,如果使用预置备节点,您必须手动关闭这些节点,或使用每个物理系统的电源管理控制。从堆栈中移除节点之后,如果您不关闭它们,它们可能保持运行,并作为 overcloud 环境的组成部分重新连接。
关闭移除的节点后,将其重新置备为基础操作系统配置,以免它们未来意外加入 overcloud。
在将之前已经从 overcloud 移除的节点重新部署到新的基础操作系统之前,不要尝试再次使用它们。缩减流程只从 overcloud 堆栈移除节点,不会卸载任何软件包。
移除预置备 overcloud
要移除使用预置备节点的整个 overcloud,请参阅 第 15.7 节 “移除 overcloud 堆栈” 了解标准 overcloud 移除流程。移除 overcloud 后,关闭所有节点并将其重新置备为基础操作系统配置。
在将之前已经从 overcloud 移除的节点重新部署到新的基础操作系统之前,不要尝试再次使用它们。移除流程只删除 overcloud 堆栈,不会卸载任何软件包。