Red Hat Training

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

第 8 章 使用预置备节点配置基本 overcloud

本章介绍了使用预置备节点来配置 OpenStack 平台环境的基本步骤。这种配置情境与标准的 overcloud 创建场景之间存在多项差异:

  • 您可以使用外部工具配置节点,让 director 仅控制 overcloud 的配置。
  • 您无需依赖 director 的配置方法,可直接使用节点。在不实施电源管理控制的情况下创建 overcloud,或者使用具有 DHCP/PXE 引导限制的网络时,这一点非常有用。
  • director 不使用 OpenStack Compute (nova)、OpenStack Bare Metal (ironic) 或者 OpenStack Image (glance) 来管理节点。
  • 预置备的节点可以使用不依赖于 QCOW2 overcloud-full 镜像的自定义置备布局。

本场景提供的是基本配置,不包含任何自定义功能。但是,您可以按照 Advanced Overcloud Customization 指南中的说明,向这类基本 overcloud 添加高级配置选项,并按照您的具体规格进行自定义。

重要

不支持在 overcloud 中混用预置备节点和 director 配置节点。

要求

  • 第 4 章 安装 director中创建的 director 节点。
  • 一组作为节点的裸机。所需的节点数量由您需要创建的 overcloud 类型所决定。这些计算机还需要满足每种节点类型的相应要求。这些节点需要安装 Red Hat Enterprise Linux 7.5 或更新的版本,作为其主机操作系统。红帽建议使用最新的可用版本。
  • 用于管理预置备节点的一个网络连接。本情境需要具备对节点的不间断 SSH 访问权限以进行编配代理配置。
  • Control Plane 网络的一个网络连接。这种网络具备两种主要情境:

    • 将 Provisioning 网络用作 Control Plane,这种是默认情境。这种网络通常是预置备节点至 director 的 3 层 (L3) 可路由网络连接。本情境示例使用以下 IP 地址分配:

      表 8.1. Provisioning 网络 IP 分配信息

      节点名IP 地址

      Director

      192.168.24.1

      Controller

      192.168.24.2

      Compute

      192.168.24.3

    • 使用单独的网络。当 director 的 Provisioning 网络是一种专用的不可路由的网络时,您可以从任何子网定义节点的 IP 地址,通过公共 API 端点与 director 通讯。本情境有一些需要注意的地方,详情请参阅第 8.5 节 “使用单独的 overcloud 节点网络”章节。
  • 本示例中的所有其他网络类型使用 Control Plane 网络来提供 OpenStack 服务。不过,您可以为其他网络流量类型创建额外的网络。

8.1. 创建配置节点的用户

在本流程稍后的阶段,director 需要具备以 stack 用户的身份访问 overcloud 节点的 SSH 权限。

  1. 在每个 overcloud 节点上,创建名为 stack 的用户,并为每个节点设置密码。例如,在 Controller 节点上运行以下命令:

    [root@controller ~]# useradd stack
    [root@controller ~]# passwd stack  # specify a password
  2. 进行以下操作以使这个用户使用 sudo 时不需要输入密码:

    [root@controller ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@controller ~]# chmod 0440 /etc/sudoers.d/stack
  3. 在所有预置备节点上创建和配置 stack 用户之后,将 stack 用户的公共 SSH 密钥从 director 节点复制到每个 overcloud 节点。例如,将 director 的公共 SSH 密钥复制到 Controller 节点:

    [stack@director ~]$ ssh-copy-id stack@192.168.24.2

8.2. 为节点注册操作系统

每个节点需要具备访问红帽订阅的权限。以下步骤显示了如何将每个节点注册到红帽 Content Delivery Network。对每个节点执行以下操作:

  1. 运行注册命令,按照提示输入您的客户门户用户名和密码:

    [root@controller ~]# sudo subscription-manager register
  2. 找到 Red Hat OpenStack Platform 14 所在的权利池:

    [root@controller ~]# sudo subscription-manager list --available --all --matches="Red Hat OpenStack"
  3. 使用上一步中找到的池 ID 来添加 Red Hat OpenStack Platform 14 的权利:

    [root@controller ~]# sudo subscription-manager attach --pool=pool_id
  4. 禁用所有默认软件仓库:

    [root@controller ~]# sudo subscription-manager repos --disable=*
  5. 启用所需的红帽企业 Linux 软件仓库。

    1. 对于 x86_64 系统,请运行:

      [root@controller ~]# sudo subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms --enable=rhel-ha-for-rhel-7-server-rpms --enable=rhel-7-server-openstack-14-rpms --enable=rhel-7-server-rhceph-2-osd-rpms --enable=rhel-7-server-rhceph-2-mon-rpms --enable=rhel-7-server-rhceph-2-tools-rpms
    2. 对于 POWER 系统,请运行:

      [root@controller ~]# sudo subscription-manager repos --enable=rhel-7-for-power-le-rpms --enable=rhel-7-server-openstack-14-for-power-le-rpms
    重要

    仅启用列出的软件仓库。其他软件仓库都可能会造成软件包和软件冲突,请勿启用任何其他软件仓库。

  6. 更新您的系统,确保您具备最新的基础系统软件包:

    [root@controller ~]# sudo yum update -y
    [root@controller ~]# sudo reboot

节点现在可供您的 overcloud 使用。

8.3. 为 director 配置 SSL/TLS 访问权限

如果 director 使用 SSL/TLS,那么预置备节点需要用于签署 director 的 SSL/TLS 证书的证书授权机构文件。如果使用您自己的证书授权机构,则在各 overcloud 节点上执行以下操作:

  1. 将证书授权机构文件复制到各预置备节点上的 /etc/pki/ca-trust/source/anchors/ 目录中。
  2. 在每个 overcloud 节点上运行以下命令:

    [root@controller ~]#  sudo update-ca-trust extract

这可以确保 overcloud 节点能够通过 SSL/TLS 访问 director 的 Public API。

8.4. 为 Control Plane 配置网络

预置备 overcloud 节点使用标准 HTTP 请求从 director 获取元数据。这表示所有 overcloud 节点都需要 L3 权限来访问以下之一:

  • director 的 Control Plane 网络,这是使用 undercloud.conf 文件中的 network_cidr 参数定义的子网。该节点需要直接访问此子网,或者需要通过路由访问此子网。
  • director 的 Public API 端点,由 undercloud.conf 文件中的 undercloud_public_host 参数指定。当您无法通过 L3 路由至 Control Plane 时,或者计划使用 SSL/TLS 通信时,此选项可用。请参阅 第 8.5 节 “使用单独的 overcloud 节点网络”了解配置 overcloud 节点以使用 Public API 端点的更多步骤。

director 使用 Control Plane 网络来管理和配置标准 overcloud。对于具备预置备节点的 overcloud,您可能需要对网络配置做一些修改,以适应 director 与预置备节点通讯的方式。

使用网络隔离

网络隔离允许您对服务进行分组,以使用特定的网络,包括 Control Plane。请参阅 Advanced Overcloud Customization 指南,以了解多种网络隔离策略。此外,您也可以为 Control Plane 上的节点指定特定的 IP 地址。有关隔离网络和创建可预测节点放置策略的更多信息,请参阅 Advanced Overcloud Customization 指南中的以下章节:

注意

使用网络隔离时,确保您的 NIC 模板不包含用于访问 undercloud 的 NIC。这些模板可能会重新配置 NIC,从而导致部署期间出现连接和配置问题。

分配 IP 地址

如果不使用网络隔离,您可以使用单个 Control Plane 网络来管理所有服务。这需要手动配置每个节点的 Control Plane NIC,以便使用 Control Plane 网络范围内的 IP 地址。如果将 director 的 Provisioning 网络用作 Control Plane,确保选定的 overcloud IP 地址不在 DHCP 所提供的置备范围(dhcp_startdhcp_end)和内省范围(inspection_iprange)之内。

创建标准 overcloud 期间,director 创建 OpenStack Networking (neutron) 端口,用于自动为 Provisioning / Control Plane 网络池上的 overcloud 节点分配 IP 地址。但是,这可能导致 director 为手动配置的节点分配不同的 IP 地址。在这种情况下,使用可预测的 IP 地址策略来强制 director 使用 Control Plane 上的预置备 IP 分配。

可预测 IP 策略的一个示例是使用 IP 地址分配如下的环境文件 (ctlplane-assignments.yaml):

resource_registry:
  OS::TripleO::DeployedServer::ControlPlanePort: /usr/share/openstack-tripleo-heat-templates/deployed-server/deployed-neutron-port.yaml

parameter_defaults:
  DeployedServerPortMap:
    controller-ctlplane:
      fixed_ips:
        - ip_address: 192.168.24.2
      subnets:
        - cidr: 24
    compute-ctlplane:
      fixed_ips:
        - ip_address: 192.168.24.3
      subnets:
        - cidr: 24

在本示例中,OS::TripleO::DeployedServer::ControlPlanePort 资源将一组参数传递至 director,并为预置备的节点定义 IP 分配。DeployedServerPortMap 参数定义与每个 overcloud 节点对应的 IP 地址和子网 CIDR。映射定义:

  1. 分配的名称,其格式为 <node_hostname>-<network>。例如:controller-ctlplanecompute-ctlplane
  2. IP 分配,它采用以下参数形式:

    • fixed_ips/ip_address - 为 control plane 指定固定的 IP 地址。使用 ip_address 列表中的多个参数来定义多个 IP 地址。
    • subnets/cidr - 定义子网的 CIDR 值。

本章之后的步骤将生成的环境文件 (ctlplane-assignments.yaml) 用作 openstack overcloud deploy 命令的组成部分。

8.5. 使用单独的 overcloud 节点网络

默认情况下,director 使用 Provisioning 网络作为 overcloud Control Plane。但是,如果此网络被隔离且不可路由,则节点在配置期间不能与 director 的内部 API 通讯。在这种情况下,您可能需要为节点指定一个单独的网络,并进行配置,以便通过公共 API 与 director 通讯。

对于此情境,有几个需要满足的要求:

本节中的示例使用了与主要情境不同的 IP 地址分配:

表 8.2. Provisioning 网络 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

Controller

192.168.100.2

Compute

192.168.100.3

以下章节为需要单独的 overcloud 节点网络的情境提供额外配置。

IP 地址分配

IP 分配方法与第 8.4 节 “为 Control Plane 配置网络”类似。但是,由于 Control Plane 无法从部署的服务器路由,您将使用 DeployedServerPortMap 参数从您选定的 overcloud 节点子网分配 IP 地址,包括用于访问 Control Plane 的虚拟 IP 地址。以下是从 第 8.4 节 “为 Control Plane 配置网络” 修改的 ctlplane-assignments.yaml 环境文件版本,融合了这种网络架构:

resource_registry:
  OS::TripleO::DeployedServer::ControlPlanePort: /usr/share/openstack-tripleo-heat-templates/deployed-server/deployed-neutron-port.yaml
  OS::TripleO::Network::Ports::ControlPlaneVipPort: /usr/share/openstack-tripleo-heat-templates/deployed-server/deployed-neutron-port.yaml
  OS::TripleO::Network::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml 1

parameter_defaults:
  NeutronPublicInterface: eth1
  EC2MetadataIp: 192.168.100.1 2
  ControlPlaneDefaultRoute: 192.168.100.1
  DeployedServerPortMap:
    control_virtual_ip:
      fixed_ips:
        - ip_address: 192.168.100.1
      subnets:
        - cidr: 24
    controller0-ctlplane:
      fixed_ips:
        - ip_address: 192.168.100.2
      subnets:
        - cidr: 24
    compute0-ctlplane:
      fixed_ips:
        - ip_address: 192.168.100.3
      subnets:
        - cidr: 24
1
RedisVipPort 资源被映射至 network/ports/noop.yaml。出现这种映射的原因是默认的 Redis VIP 地址来自 Control Plane。在这种情况下,我们使用 noop 来禁用这种 Control Plane 映射。
2
EC2MetadataIpControlPlaneDefaultRoute 参数被设置为 Control Plane 虚拟 IP 地址的值。默认的 NIC 配置模板需要这些参数,且您必须将它们设置为可 ping 通的 IP 地址,以便通过部署期间执行的验证。或者,自定义 NIC 配置,使它们无需使用这些参数。

8.6. 映射预置备的节点主机名

在配置预置备的节点时,您需要将基于 Heat 的主机名映射到它们的实际主机名,以便 ansible-playbook 可以访问可解析的主机。请使用 HostnameMap 来映射这些值。

步骤

  1. 创建环境文件(如 hostname-map.yaml),并纳入 HostnameMap 参数和主机名映射。请遵循以下语法:

    parameter_defaults:
      HostnameMap:
        [HEAT HOSTNAME]: [ACTUAL HOSTNAME]
        [HEAT HOSTNAME]: [ACTUAL HOSTNAME]

    [HEAT 主机名] 通常遵循以下命名规范:[栈名称]-[角色]-[索引]。例如:

    parameter_defaults:
      HostnameMap:
        overcloud-controller-0: controller-00-rack01
        overcloud-controller-1: controller-01-rack02
        overcloud-controller-2: controller-02-rack03
        overcloud-compute-0: compute-00-rack01
        overcloud-compute-1: compute-01-rack01
        overcloud-compute-2: compute-02-rack01
  2. 保存 hostname-map.yaml 的内容。

8.7. 利用预置备节点创建 overcloud

overcloud 部署使用来自 第 6.10 节 “部署命令” 的标准 CLI 方法。对于预置备的节点,该部署命令需要使用来自核心 Heat 模板集的一些额外选项和环境文件:

  • --disable-validations - 禁止对未用于预置备基础架构的服务执行基本的 CLI 验证功能,否则,部署将失败。
  • environments/deployed-server-environment.yaml - 用于创建和配置预置备基础架构的主要环境文件。这种环境文件用 OS::Heat::DeployedServer 资源代替 OS::Nova::Server 资源。
  • environments/deployed-server-bootstrap-environment-rhel.yaml -用于在预置备服务器上执行启动引导脚本的环境文件。此脚本安装额外的软件包,并为 overcloud 节点提供基本配置。
  • environments/deployed-server-pacemaker-environment.yaml - 用于在预置备 Controller 节点上进行 Pacemaker 配置的环境文件。 此文件的注册资源的命名空间使用来自 deployed-server/deployed-server-roles-data.yaml 的 Controller 角色名称,默认为 ControllerDeployedServer
  • deployed-server/deployed-server-roles-data.yaml - 一个示例自定义角色文件。此文件复制了默认的 roles_data.yaml,也包括各角色的 disable_constraints: True 参数。此参数会禁用生成的角色模板中的编配限制。这些限制适用于未搭配使用预置备基础架构的服务。

    使用您自己的自定义角色文件时,确保将各角色的 disable_constraints: True 参数包含在内。例如:

    - name: ControllerDeployedServer
      disable_constraints: True
      CountDefault: 1
      ServicesDefault:
        - OS::TripleO::Services::CACerts
        - OS::TripleO::Services::CephMon
        - OS::TripleO::Services::CephExternal
        - OS::TripleO::Services::CephRgw
        ...

以下是一个 overcloud 部署命令命令,采用了针对预置备架构的特定环境文件:

$ source ~/stackrc
(undercloud) $ openstack overcloud deploy \
  [other arguments] \
  --disable-validations \
  -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-bootstrap-environment-rhel.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-pacemaker-environment.yaml \
  -e /home/stack/templates/hostname-map.yaml /
  -r /usr/share/openstack-tripleo-heat-templates/deployed-server/deployed-server-roles-data.yaml
  --overcloud-ssh-user stack \
  --overcloud-ssh-key ~/.ssh/id_rsa \
  [OTHER OPTIONS]

--overcloud-ssh-user--overcloud-ssh-key 选项用于在配置阶段通过 SSH 连接每个 overcloud 节点,创建初始 tripleo-admin 用户,以及将 SSH 密钥注入 /home/tripleo-admin/.ssh/authorized_keys。要注入 SSH 密钥,用户可以使用 --overcloud-ssh-user--overcloud-ssh-key(默认值为 ~/.ssh/id_rsa)为初始 SSH 连接指定凭证。为免泄露使用 --overcloud-ssh-key 指定的私钥,director 不会向任何 API 服务(如 Heat 或 MIstral)传递这个密钥,而且只有 director 的 openstack overcloud deploy 命令会用这个密钥为 tripleo-admin 用户启用访问权限。

8.8. Overcloud 部署输出

一旦 overcloud 创建完毕,director 会提供为配置 overcloud 而执行的 Ansible play 的总结:

PLAY RECAP *************************************************************
overcloud-compute-0     : ok=160  changed=67   unreachable=0    failed=0
overcloud-controller-0  : ok=210  changed=93   unreachable=0    failed=0
undercloud              : ok=10   changed=7    unreachable=0    failed=0

Tuesday 15 October 2018  18:30:57 +1000 (0:00:00.107) 1:06:37.514 ******
========================================================================

director 还会提供用于访问 overcloud 的详细信息。

Ansible passed.
Overcloud configuration completed.
Overcloud Endpoint: http://192.168.24.113:5000
Overcloud Horizon Dashboard URL: http://192.168.24.113:80/dashboard
Overcloud rc file: /home/stack/overcloudrc
Overcloud Deployed

8.9. 访问 overcloud

director 会生成脚本来配置和帮助认证 director 主机与 overcloud 的交互。director 将此文件保存为 stack 用户主目录的 overcloudrc 文件。运行以下命令来使用此文件:

(undercloud) $ source ~/overcloudrc

这会加载所需的环境变量,以便通过 director 主机的 CLI 与 overcloud 进行交互。命令提示符的变化会显示当前状态:

(overcloud) $

要返回与 director 主机进行交互的状态,运行以下命令:

(overcloud) $ source ~/stackrc
(undercloud) $

8.10. 扩展预置备节点

扩展预置备的节点的流程与第 11 章 扩展 overcloud 节点中的标准扩展流程类似。但是,添加新预置备节点的流程却不相同,这是因为预置备节点不从 OpenStack Bare Metal (ironic) 和 OpenStack Compute (nova) 使用标准注册和管理流程。

扩展预置备节点

利用预置备节点扩展 overcloud 时,您需要配置各节点上的编配代理,以匹配 director 的节点数量。

扩展预置备节点的一般流程包括下列步骤:

  1. 按照 要求所述,准备新的预置备节点。
  2. 扩展节点。请参阅 第 11 章 扩展 overcloud 节点了解相关的说明。
  3. 在执行部署命令后,等待 director 创建新的节点资源并启动配置。

缩减预置备节点

缩减具有预置备节点的 overcloud 时,请遵循第 11 章 扩展 overcloud 节点中所示的常规缩减说明。

在大多数缩放操作中,您必须获取节点的 UUID 值,以传递给 openstack overcloud node delete。要获取此 UUID,请列出供特定角色使用的资源:

$ openstack stack resource list overcloud -c physical_resource_id -c stack_name -n5 --filter type=OS::TripleO::<RoleName>Server

将上述命令中的 <RoleName> 替换为您要缩减的角色的实际名称。例如,对于 ComputeDeployedServer 角色:

$ openstack stack resource list overcloud -c physical_resource_id -c stack_name -n5 --filter type=OS::TripleO::ComputeDeployedServerServer

使用命令输出中的 stack_name 列来识别与各个节点相关的 UUID。stack_name 包含节点在 Heat 资源组中的索引的整数值。例如,在以下示例输出中:

+------------------------------------+----------------------------------+
| physical_resource_id               | stack_name                       |
+------------------------------------+----------------------------------+
| 294d4e4d-66a6-4e4e-9a8b-           | overcloud-ComputeDeployedServer- |
| 03ec80beda41                       | no7yfgnh3z7e-1-ytfqdeclwvcg      |
| d8de016d-                          | overcloud-ComputeDeployedServer- |
| 8ff9-4f29-bc63-21884619abe5        | no7yfgnh3z7e-0-p4vb3meacxwn      |
| 8c59f7b1-2675-42a9-ae2c-           | overcloud-ComputeDeployedServer- |
| 2de4a066f2a9                       | no7yfgnh3z7e-2-mmmaayxqnf3o      |
+------------------------------------+----------------------------------+

stack_name 列中的索引 0、1 或 2 对应于 Heat 资源组中的节点次序。将 physical_resource_id 列中的对应 UUID 值传递到 openstack overcloud node delete 命令。

从堆栈中移除 overcloud 节点之后,关闭这些节点。在标准部署中,此功能由 director 的裸机服务管控。但是,使用预置备节点时,您应当手动关闭这些节点,或者使用各物理系统的电源管理控制功能。从堆栈中移除节点之后,如果您不关闭它们,它们可能保持运行,并作为 overcloud 环境的组成部分重新连接。

关闭已移除的节点之后,重新将它们部署到基础操作系统配置中,避免它们将来意外加入到 overcloud 中

注意

在将之前已经从 overcloud 移除的节点重新部署到新的基础操作系统之前,不要尝试再次使用它们。缩减流程只从 overcloud 堆栈移除节点,不会卸载任何软件包。

8.11. 移除预置备 overcloud

使用与标准 overcloud 相同的流程,移除使用预置备节点的整个 overcloud。请参阅 第 9.14 节 “删除 overcloud”了解更多详细信息。

移除 overcloud 之后,关闭所有节点,并将它们重新部署到基础操作系统配置中。

注意

在将之前已经从 overcloud 移除的节点重新部署到新的基础操作系统之前,不要尝试再次使用它们。移除流程只删除 overcloud 堆栈,不会卸载任何软件包。

8.12. 完成 overcloud 的创建

通过预置备节点创建 overcloud 的流程到此结束。如需了解创建之后的功能,请参阅 第 9 章 创建 overcloud 后执行的任务