第 10 章 使用 Ansible 配置 overcloud


Ansible 是应用 overcloud 配置的主要方法。本章介绍了如何与 overcloud 的 Ansible 配置进行交互的步骤。

虽然 director 会自动生成 Ansible playbook,但您最好了解一下 Ansible 的语法。如需了解有关使用 Ansible 的更多信息,请参阅 https://docs.ansible.com/

注意

Ansible 还使用了角色这一概念,但这有别于 OpenStack 平台 director 中的角色。

10.1. 基于 Ansible 的 overcloud 配置 (config-download)

config-download 功能是 director 用于配置 overcloud 的方法。director 将 config-download 与 OpenStack Orchestration (heat) 和 OpenStack Workflow Service (mistral) 结合,来生成软件配置并将它应用到各个 overcloud 节点。虽然 Heat 会从 SoftwareDeployment 资源创建用来执行 overcloud 安装和配置的所有部署数据,但它不应用任何配置。Heat 仅通过其 API 提供配置数据。一旦 director 创建了堆栈,Mistral 工作流会通过查询 Heat API 来获取配置数据,生成一系列 Ansible playbook,然后将这些 Ansible playbook 应用到 overcloud。

作为结果,在运行 openstack overcloud deploy 命令时后会发生以下操作:

  • director 根据 openstack-tripleo-heat-templates 创建新的部署计划,并通过包含环境文件和参数来自定义该计划。
  • director 使用 Heat 来解释部署计划,并创建 overcloud 堆栈和所有下级资源。这包括通过 OpenStack Bare Metal (ironic) 置备节点。
  • Heat 也会从部署计划创建软件配置。director 从这一软件配置中编译 Ansible playbook。
  • director 在 overcloud 节点上生成一个临时用户 (`tripleo-admin1),专门用于进行 Ansible SSH 访问。
  • director 下载 Heat 软件配置,并使用 Heat 输出生成一系列 Ansible playbook。
  • director 通过 ansible-playbook 将 Ansible playbook 应用到 overcloud 节点。

10.2. config-download 工作目录

director 生成一组 Ansible playbook 以用于 config-download 过程。这些 playbook 存储在 /var/lib/mistral/ 下的工作目录中。此目录依据 overcloud 的名称来命名,默认为 overcloud

工作目录中包含一组按照各个 overcloud 角色命名的子目录。这些子目录包含与 overcloud 角色中节点配置相关的所有任务。此外,也包含按照各个具体节点命名的其他子目录。这些子目录包含可应用到 overcloud 角色任务的节点相关变量。因此,工作目录中的 overcloud 角色采用下列结构:

─ /var/lib/mistral/overcloud
  |
  ├── Controller
  │   ├── overcloud-controller-0
  |   ├── overcloud-controller-1
  │   └── overcloud-controller-2
  ├── Compute
  │   ├── overcloud-compute-0
  |   ├── overcloud-compute-1
  │   └── overcloud-compute-2
  ...

每个工作目录也充当本地 Git 软件仓库,记录各个部署操作后的更改。这可帮助您跟踪各部署之间的配置更改。

OpenStack Workflow Service (mistral) 容器中的 mistral 用户拥有 /var/lib/mistral/ 工作目录中的所有文件。您可以向 undercloud 上的 stack 用户授予访问这个目录中所有文件的权限。这有助于在该目录中执行特定的操作。

步骤

  1. 使用 setfacl 命令,为 undercloud 上的 stack 用户授予这些文件的访问权限:

    $ sudo setfacl -R -m u:stack:rwx /var/lib/mistral

    这也会保留 mistral 用户对该目录的访问权限。

10.4. 检查 config-download 日志

config-download 过程中,Ansible 会在 undercloud 上的 config-download 工作目录中创建一个日志文件。

步骤

  1. 通过在 config-download 工作目录中执行 less 命令来查看日志。下例使用了 overcloud 工作目录:

    $ less /var/lib/mistral/overcloud/ansible.log

10.5. 手动运行 config-download

/var/lib/mistral/overcloud 中的工作目录包含所需的 playbook 和脚本,可直接与 ansible-playbook 交互。以下操作过程介绍了如何与这些文件交互。

步骤

  1. 更改为 Ansible playbook 的目录:

    $ cd /var/lib/mistral/overcloud/
  2. 进入工作目录后,运行 ansible-playbook-command.sh 以重现部署:

    $ ./ansible-playbook-command.sh
  3. 您可以向该脚本传递其他 Ansible 参数,然后由该脚本将这些参数原样传递至 ansible-playbook 命令。这样便可更加充分地利用各种 Ansible 功能,如检查模式 (--check)、限制主机 (--limit) 或覆盖变量 (-e)。例如:

    $ ./ansible-playbook-command.sh --limit Controller
  4. 这个工作目录中包含一个名为 deploy_steps_playbook.yaml 的 playbook,用于运行 overcloud 配置。要查看这个 playbook,请使用以下命令:

    $ less deploy_steps_playbook.yaml

    这个 playbook 会使用工作目录中所含的各种任务文件。某些任务文件是所有 OpenStack 平台角色通用的,某些任务文件则特定于某些 OpenStack 平台角色和服务器。

  5. 这个工作目录中还包含与 overcloud 的 roles_data 文件中定义的各个角色相对应的子目录。例如:

    $ ls Controller/

    每个 OpenStack 平台角色目录中还包含相应角色类型的各个服务器的子目录。这些目录采用可组合角色主机名格式。例如:

    $ ls Controller/overcloud-controller-0
  6. Ansible 任务都带有相应的标记。要查看完整的标记列表,请为 ansible-playbook 使用 CLI 参数 --list-tags

    $ ansible-playbook -i tripleo-ansible-inventory.yaml --list-tags deploy_steps_playbook.yaml

    然后,在 ansible-playbook-command.sh 脚本中通过 --tags--skip-tags--start-at-task 来应用已标记的配置。例如:

    $ ./ansible-playbook-command.sh --tags overcloud
警告

在使用 ansible-playbook CLI 参数(如 --tags--skip-tags--start-at-task)时,请勿随意更改部署配置的运行或应用顺序。利用这些 CLI 参数,可以轻松地重新运行先前失败的任务或在初始部署的基础上进行迭代。但是,为了保证部署的一致性,您必须通过 deploy_steps_playbook.yaml 依序运行所有任务。

10.6. 对工作目录执行 Git 操作

config-download 工作目录充当本地 Git 软件仓库。每次运行部署操作时,director 会向工作目录添加一个包含相关更改的 Git 提交。这样,您可以通过执行 Git 操作来查看不同阶段的部署配置,并将配置与其他部署进行比较。

请注意工作目录的限制。例如,使用 Git 恢复到上一版本的 config-download 工作目录仅影响这个工作目录中的配置,而不会影响以下所列:

  • overcloud 数据架构: 应用上一版本的工作目录软件配置不会撤消数据迁移和架构更改。
  • overcloud 的硬件布局:恢复到之前的软件配置不会撤消与 overcloud 硬件相关的更改,如扩展或缩减。
  • Heat 堆栈:恢复到以前版本的工作目录不会影响 Heat 堆栈中存储的配置。Heat 堆栈创建软件配置的新版本,并应用到 overcloud。这意味着,永久更改 overcloud 需要先修改应用到 overcloud 堆栈的环境文件,然后再重新运行 openstack overcloud deploy

以下操作过程演示了如何使用 Git 来比较 config-download 工作目录的提交。

步骤

  1. 更改为您的 overcloud 的 config-download 工作目录。在本例中,overcloud 的工作目录的名称是 overcloud

    $ cd /var/lib/mistral/overcloud
  2. 运行 git log 命令,以列出工作目录中的提交。您也可以通过格式化日志输出来显示日期:

    $ git log --format=format:"%h%x09%cd%x09"
    a7e9063 Mon Oct 8 21:17:52 2018 +1000
    dfb9d12 Fri Oct 5 20:23:44 2018 +1000
    d0a910b Wed Oct 3 19:30:16 2018 +1000
    ...

    默认情况下,最近的提交显示在前面。

  3. 针对两个提交哈希运行 git diff,以查看部署之间的所有变化:

    $ git diff a7e9063 dfb9d12

10.7. 手动创建 config-download 文件

在某些情形中,您可能要在标准工作流之外生成自己的 config-download 文件。例如,您可能希望结合使用 --stack-only 选项和 openstack overcloud deploy 命令来生成 overcloud Heat 堆栈,从而能单独应用配置。以下操作过程演示了如何手动创建自己的 config-download 文件。

步骤

  1. 生成 config-download 文件:

    $ openstack overcloud config download \
      --name overcloud \
      --config-dir ~/config-download
    • --name 是要用于 Ansible 文件导出的 overcloud。
    • --config-dirconfig-download 文件的保存位置。
  2. 更改为含有您的 config-download 文件的目录:

    $ cd ~/config-download
  3. 生成静态清单文件:

    $ tripleo-ansible-inventory \
      --ansible_ssh_user heat-admin \
      --static-yaml-inventory inventory.yaml

这为您提供必要的文件,以使用手动生成的 config-download 文件来执行配置。要执行部署 playbook,请运行 ansible-playbook 命令:

$ ansible-playbook \
  -i inventory.yaml \
  --private-key ~/.ssh/id_rsa \
  --become \
  ~/config-download/deploy_steps_playbook.yaml

要从此配置中手动生成 overcloudrc 文件,请运行以下命令:

$ openstack action execution run \
  --save-result \
  --run-sync \
  tripleo.deployment.overcloudrc \
  '{"container":"overcloud"}' \
  | jq -r '.["result"]["overcloudrc.v3"]' > overcloudrc.v3

10.8. config-download 顶层文件

以下是 config-download 工作目录中的重要顶层文件。

Ansible 配置和执行。

以下文件专用于在 config-download 工作目录中配置和执行 Ansible。

ansible.cfg
运行 ansible-playbook 时所使用的配置文件。
ansible.log
来自最近一次 ansible-playbook 运行的日志文件。
ansible-errors.json
含有部署错误的 JSON 格式文件
ansible-playbook-command.sh
可以执行的脚本,可用于重新运行上次部署操作中的 ansible-playbook 命令。
ssh_private_key
Ansible 用于访问 overcloud 节点的 SSH 私钥。
tripleo-ansible-inventory.yaml
包含所有 overcloud 节点的主机和变量的 Ansible 清单文件。
overcloud-config.tar.gz
工作目录的存档。

Playbook

下列文件是 config-download 工作目录中的 playbook。

deploy_steps_playbook.yaml
主要的部署步骤。此 playbook 为您的 overcloud 执行主要的配置操作。
pre_upgrade_rolling_steps_playbook.yaml
重大升级的升级前步骤
upgrade_steps_playbook.yaml
重大升级步骤。
post_upgrade_steps_playbook.yaml
重大升级的升级后步骤。
update_steps_playbook.yaml
次要更新步骤。
fast_forward_upgrade_playbook.yaml
快进升级任务。仅在从 OpenStack 平台的一个长期版本升级到下一版本时使用。请勿将这个 playbook 用于此 OpenStack 平台发行版本。

10.9. config-download 标签

playbooks 使用标签任务来控制应用到 overcloud 的任务。将标签与 ansible-playbook CLI 参数 --tags--skip-tags 结合使用,以控制要执行的任务。启用的标签有:

facts
fact 收集操作。
common_roles
适用于所有节点的 Ansible 角色。
overcloud
用于 overcloud 部署的所有 play。
pre_deploy_steps
deploy_steps 操作之前发生的部署。
host_prep_steps
主机准备步骤。
deploy_steps
部署步骤。
post_deploy_steps
deploy_steps 操作之后发生的部署。
external
所有外部部署任务。
external_deploy_steps
仅对 undercloud 运行的外部部署任务。

10.10. config-download 部署步骤

deploy_steps_playbook.yaml playbook 用于配置 overcloud。它将应用所有需要的软件配置,以根据 overcloud 部署计划部署完整的 overcloud。

本节总结这个 playbook 中使用的不同 Ansible play。本节中的 play 名称是 playbook 中使用的相同名称,也显示在 ansible-playbook 输出中。下方还显示了每个 play 中设置的 Ansible 标签。

从 undercloud 收集事实

为 undercloud 节点收集事实

标签: facts

从 overcloud 收集事实

为 overcloud 节点收集事实

标签: facts

加载全局变量

从 global_vars.yaml 加载所有变量

标签: always

TripleO 服务器的通用角色

将通用的 ansible 角色应用到所有 overcloud 节点。包括 tripleo-bootstrap(用于安装 bootstrap)和 tripleo-ssh-known-hosts(用于配置 ssh 已知主机)。

标签: common_roles

Overcloud 部署步骤任务 - 步骤 0

应用来自 deploy_steps_tasks 模板接口的任务

标签: overclouddeploy_steps

服务器部署

应用服务器相关的 Heat 部署,以进行网络和基础架构数据等配置。包括 NetworkDeployment、<Role>Deployment、<Role>AllNodesDeployment,等等。

标签: overcloudpre_deploy_steps

主机准备步骤

应用来自 host_prep_steps 模板接口的任务

标签: overcloudhost_prep_steps

外部部署步骤 [1,2,3,4,5]

应用来自 external_deploy_steps_tasks 接口模板的任务。这些任务仅针对 undercloud 节点运行。

标签: externalexternal_deploy_steps

Overcloud 部署步骤任务 [1,2,3,4,5]

应用来自 deploy_steps_tasks 模板接口的任务

标签: overclouddeploy_steps

Overcloud 通用部署步骤任务 [1,2,3,4,5]

应用每一步骤完成的通用任务,以包含 puppet 主机配置、docker-puppet.py 和 paunch(容器配置)。

标签: overclouddeploy_steps

部署后服务器

应用服务器相关的 Heat 部署,以进行 5 步骤部署后完成的配置

标签: overcloudpost_deploy_steps

部署之后的外部部署任务

应用来自 external_post_deploy_steps_tasks 接口模板的任务。这些任务仅针对 undercloud 节点运行。

标签: externalexternal_deploy_steps

10.11. 后续步骤

现在,您可以继续执行常规的 overcloud 操作。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部