9.2. 使用 Ansible 配置 overcloud


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

尽管 director 会自动生成 Ansible playbook,您最好熟悉 Ansible 语法。有关使用 Ansible 的更多信息,请参见 https://docs.ansible.com/

注意

Ansible 还使用了角色这一概念,但这有别于 OpenStack Platform director 中的角色。Ansible 角色形成了 playbook 的可重复使用的组件,而 director 角色包含 OpenStack 服务到节点类型的映射。

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

config-download 功能是 director 用于配置 overcloud 的方法。director 将 config-download 与 OpenStack Orchestration (heat)一起使用来生成软件配置,并将配置应用到每个 overcloud 节点。尽管 heat 从 SoftwareDeployment 资源创建所有部署数据以执行 overcloud 安装和配置,但 heat 并不应用任何配置。Heat 仅通过 heat API 提供配置数据。

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

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

9.2.2. config-download 工作目录

ansible-playbook 命令创建 Ansible 项目目录,默认名称 ~/config-download/overcloud。此项目目录从 heat 存储下载的软件配置。它包括您需要运行 ansible-playbook 来配置 overcloud 的所有与 Ansible 相关的文件。

目录的内容包括:

  • tripleo-ansible-inventory.yaml - 包含所有 overcloud 节点的 hostsvars 的 Ansible 清单文件。
  • ansible.log - 最近运行的 ansible-playbook 中的日志文件。
  • ansible.cfg - 运行 ansible-playbook 时使用的配置文件。
  • ansible-playbook-command.sh - 用于重新运行 ansible-playbook 的可执行文件脚本。
  • SSH_PRIVATE_KEY - 用于访问 overcloud 节点的私有 ssh 密钥。

    1. 重现 ansible-playbook

创建项目目录后,运行 ansible-playbook-command.sh 命令以重现部署。

$ ./ansible-playbook-command.sh

您可以使用额外的参数运行脚本,如 check mode --check、限制 hosts --limit,以及覆盖变量 -e

$ ./ansible-playbook-command.sh --check

9.2.3. 检查 config-download 日志

config-download 过程中,Ansible 在 undercloud 上的 /home/stack 目录中创建一个名为 ansible.log 的日志文件。

流程

  1. 使用 less 命令查看日志:

    $ less ~/ansible.log

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

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

请注意工作目录的限制。例如,如果您使用 Git 恢复到早期版本的 config-download 工作目录,则此操作仅影响工作目录中的配置。不会影响以下配置:

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

完成以下步骤,比较 config-download 工作目录的不同提交项。

流程

  1. 更改到 overcloud 的 config-download 工作目录,通常称为 overcloud

    $ cd ~/config-download/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

9.2.5. 使用 config-download 的部署方法

在 overcloud 部署上下文中有四种使用 config-download 的主要方法:

标准部署
运行 openstack overcloud deploy 命令,以在置备阶段后自动运行配置阶段。这是运行 openstack overcloud deploy 命令时的默认方法。
分离置备和配置
使用特定选项运行 openstack overcloud deploy 命令,以分离置备和配置阶段。
部署后运行 ansible-playbook-command.sh 脚本
使用结合或分离的置备和配置阶段运行 openstack overcloud deploy 命令,然后运行 config-download 工作目录中提供的 ansible-playbook-command.sh 脚本,以重新应用配置阶段。
置备节点,手动创建 config-download,并运行 Ansible
使用特定选项运行 openstack overcloud deploy 命令,以置备节点,然后使用 deploy_steps_playbook.yaml playbook 运行 ansible-playbook 命令。

9.2.6. 在标准部署上运行 config-download

执行 config-download 的默认方法是运行 openstack overcloud deploy 命令。此方法适合大多数环境。

先决条件

  • 成功安装 undercloud。
  • overcloud 节点已准备好进行部署。
  • 与特定 overcloud 自定义相关的 heat 环境文件。

步骤

  1. stack 用户身份登录 undercloud 主机。
  2. Source stackrc 文件:

    $ source ~/stackrc
  3. 运行部署命令。包括 overcloud 所需的任何环境文件:

    $ openstack overcloud deploy \
      --templates \
      -e environment-file1.yaml \
      -e environment-file2.yaml \
      ...
  4. 等待部署过程完成。

在部署过程中,director 在 ~/config-download/overcloud 工作目录中生成 config-download 文件。在部署过程完成后,查看工作目录中的 Ansible playbook,以查看为配置 overcloud 而执行的任务 director。

9.2.7. 使用分离的置备和配置运行 config-download

openstack overcloud deploy 命令运行基于 heat 的置备过程,然后运行 config-download 配置过程。您还可以运行该部署命令来单独执行每个过程。使用此方法将 overcloud 节点置备为不同的过程,以便您可以在运行 overcloud 配置过程之前在节点上执行任何手动预配置任务。

先决条件

  • 成功安装 undercloud。
  • overcloud 节点已准备好进行部署。
  • 与特定 overcloud 自定义相关的 heat 环境文件。

步骤

  1. stack 用户身份登录 undercloud 主机。
  2. Source stackrc 文件:

    $ source ~/stackrc
  3. 使用 --stack-only 选项运行部署命令。包括 overcloud 所需的任何环境文件:

    $ openstack overcloud deploy \
      --templates \
      -e environment-file1.yaml \
      -e environment-file2.yaml \
      ...
      --stack-only
  4. 等待置备过程完成。
  5. tripleo-admin 用户启用从 undercloud 到 overcloud 的 SSH 访问。config-download 进程使用 tripleo-admin 用户来执行基于 Ansible 的配置:

    $ openstack overcloud admin authorize
  6. 在节点上执行任何手动预配置任务。如果使用 Ansible 进行配置,请使用 tripleo-admin 用户来访问节点。
  7. 使用 --config-download-only 选项运行部署命令。包括 overcloud 所需的环境文件:

    $ openstack overcloud deploy \
      --templates \
      -e environment-file1.yaml \
      -e environment-file2.yaml \
      ...
      --config-download-only
  8. 等待配置过程完成。

在配置阶段,director 在 ~/config-download/overcloud 工作目录中生成 config-download 文件。在部署过程完成后,查看工作目录中的 Ansible playbook,以查看为配置 overcloud 而执行的任务 director。

9.2.8. 使用 ansible-playbook-command.sh 脚本运行 config-download

当您使用标准方法或单独的置备和配置过程部署 overcloud 时,director 在 ~/config-download/overcloud 中生成工作目录。此目录包含再次运行配置过程所需的 playbook 和脚本。

先决条件

  • 使用以下方法之一部署的 overcloud:

    • 结合置备和配置过程的标准方法。
    • 分隔置备和配置过程。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 运行 ansible-playbook-command.sh 脚本。

    可以将额外的 Ansible 参数传递给该脚本,再将其原封不动地传递给 ansible-playbook 命令。这样便可利用 Ansible 功能,如检查模式(--check)、限制主机(--limit)或覆盖变量(-e)。例如:

    $ ./ansible-playbook-command.sh --limit Controller
    警告

    --limit 用于大规模部署时,只有执行中包含的主机才会添加到节点的 SSH known_hosts 文件中。因此,一些操作(如实时迁移)可能无法在 known_hosts 文件中没有工作。

    注意

    要确保 /etc/hosts 文件在所有节点上是最新的,请以 stack 用户身份运行以下命令:

    (undercloud)$ cd /home/stack/overcloud-deploy/overcloud/config-download/overcloud
    (undercloud)$ ANSIBLE_REMOTE_USER="tripleo-admin" ansible allovercloud \
      -i /home/stack/overcloud-deploy/overcloud/tripleo-ansible-inventory.yaml \
      -m include_role \
      -a name=tripleo_hosts_entries \
      -e @global_vars.yaml
  3. 等待配置过程完成。

    其他信息

    • 这个工作目录中包含一个名为 deploy_steps_playbook.yaml 的 playbook,用于管理 overcloud 配置任务。要查看此 playbook,请运行以下命令:

      $ less deploy_steps_playbook.yaml

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

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

      $ ls Controller/

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

      $ ls Controller/overcloud-controller-0
    • deploy_steps_playbook.yaml 中的 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
  4. 对 overcloud 运行 config-download playbook 时,可能会收到有关每个主机的 SSH 指纹的消息。要避免这些消息,请在运行 ansible-playbook-command.sh 脚本时包含 --ssh-common-args="-o StrictHostKeyChecking=no"

    $ ./ansible-playbook-command.sh --tags overcloud --ssh-common-args="-o StrictHostKeyChecking=no"

9.2.9. 使用手动创建的 playbook 运行 config-download

您可以在标准工作流之外创建自己的 config-download 文件。例如,您可以使用 --stack-only 选项运行 openstack overcloud deploy 命令以置备节点,然后单独手动应用 Ansible 配置。

先决条件

  • 成功安装 undercloud。
  • overcloud 节点已准备好进行部署。
  • 与特定 overcloud 自定义相关的 heat 环境文件。

步骤

  1. stack 用户身份登录 undercloud 主机。
  2. Source stackrc 文件:

    $ source ~/stackrc
  3. 使用 --stack-only 选项运行部署命令。包括 overcloud 所需的环境文件:

    $ openstack overcloud deploy \
      --templates \
      -e environment-file1.yaml \
      -e environment-file2.yaml \
      ...
      --stack-only
  4. 等待置备过程完成。
  5. tripleo-admin 用户启用从 undercloud 到 overcloud 的 SSH 访问。config-download 进程使用 tripleo-admin 用户来执行基于 Ansible 的配置:

    $ openstack overcloud admin authorize
  6. 生成 config-download 文件:

    $ openstack overcloud deploy \
      --stack overcloud --stack-only \
      --config-dir  ~/overcloud-deploy/overcloud/config-download/overcloud/
    • --stack 指定 overcloud 的名称。
    • --stack-only 确保命令仅部署 heat 堆栈并跳过任何软件配置。
    • --config-dir 指定 config-download 文件的位置。
  7. 切换到包含 config-download 文件的目录:

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

    $ tripleo-ansible-inventory \
      --stack <overcloud> \
      --ansible_ssh_user tripleo-admin \
      --static-yaml-inventory inventory.yaml
    • 用您的 overcloud 的名称替换 <overcloud>
  9. 使用 ~/overcloud-deploy/overcloud/config-download/overcloud 文件和静态清单文件来执行配置。要执行部署 playbook,请运行 ansible-playbook 命令:

    $ ansible-playbook \
      -i inventory.yaml \
      -e gather_facts=true \
      -e @global_vars.yaml \
      --private-key ~/.ssh/id_rsa \
      --become \
      ~/overcloud-deploy/overcloud/config-download/overcloud/deploy_steps_playbook.yaml
    注意

    针对 overcloud 运行 config-download/overcloud playbook 时,您可能会收到有关每个主机的 SSH 指纹的消息。要避免这些消息,请在 ansible-playbook 命令中包含 --ssh-common-args="-o StrictHostKeyChecking=no"

    $ ansible-playbook \
      -i inventory.yaml \
      -e gather_facts=true \
      -e @global_vars.yaml \
      --private-key ~/.ssh/id_rsa \
      --ssh-common-args="-o StrictHostKeyChecking=no" \
      --become \
      --tags overcloud \
      ~/overcloud-deploy/overcloud/config-download/overcloud/deploy_steps_playbook.yaml
  10. 等待配置过程完成。
  11. 从基于 ansible 的配置手动生成 overcloudrc 文件:

    $ openstack action execution run \
      --save-result \
      --run-sync \
      tripleo.deployment.overcloudrc \
      '{"container":"overcloud"}' \
      | jq -r '.["result"]["overcloudrc.v3"]' > overcloudrc.v3
  12. 手动将部署状态设置为成功:

    $ openstack workflow execution create tripleo.deployment.v1.set_deployment_status_success '{"plan": "<overcloud>"}'
    • 用您的 overcloud 的名称替换 <overcloud>
注意

~/overcloud-deploy/overcloud/config-download/overcloud/ 目录包含一个名为 deploy_steps_playbook.yaml 的 playbook。这个 playbook 会使用工作目录中所含的各种任务文件。有些任务文件适用于所有 Red Hat OpenStack Platform (RHOSP)角色,有些任务文件特定于特定的 RHOSP 角色和服务器。

~/overcloud-deploy/overcloud/config-download/overcloud/ 目录还包含与您在 overcloud roles_data 文件中定义的各个角色对应的子目录。每个 RHOSP 角色目录还包含该角色类型的单个服务器的子目录。这些目录使用可组合角色主机名格式,如 Controller/overcloud-controller-0

deploy_steps_playbook.yaml 中的 Ansible 任务已标记。要查看完整的标记列表,在 ansible-playbook 中使用 CLI 选项 --list-tags

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

您可以使用 --tags--skip-tags--start-at-taskansible-playbook-command.sh 脚本应用标记的配置:

$ ansible-playbook \
  -i inventory.yaml \
  -e gather_facts=true \
  -e @global_vars.yaml \
  --private-key ~/.ssh/id_rsa \
  --become \
  --tags overcloud \
  ~/overcloud-deploy/overcloud/config-download/overcloud/deploy_steps_playbook.yaml

9.2.10. config-download 的限制

config-download 功能有一些限制:

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

    - name: Run puppet host configuration for step {{ step }}
  • 如果您的 overcloud 部署包含 director 部署的 Ceph Storage 集群,则在使用 --check 选项时您无法跳过 step1 任务,除非您也跳过 external_deploy_steps 任务。
  • 您可以使用 --forks 选项设置并行 Ansible 任务的数量。但是,在 25 个并行任务后 config-download 操作的性能会下降。因此,--forks 选项请勿超过 25。

9.2.11. 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
快进升级任务。仅在要从一个长生命版本的 Red Hat OpenStack Platform 升级到下一个版本时使用此 playbook。

9.2.12. config-download 标签

playbook 使用标记的任务控制其应用到 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 中运行的外部部署任务。

9.2.13. config-download 部署步骤

deploy_steps_playbook.yaml playbook 配置 overcloud。此 playbook 应用所有必需的软件配置,以基于 overcloud 部署计划部署完整的 overcloud。

本节包含此 playbook 内使用的不同 Ansible play 的总结。本节中的 play 名称是 playbook 中使用的相同名称,也显示在 ansible-playbook 输出中。本节还包含有关在每个 play 上设置的 Ansible 标签的信息。

从 undercloud 收集事实

为 undercloud 节点收集的 fact。

标签: facts

从 overcloud 收集 fact

为 overcloud 节点收集的 fact。

标签: facts

加载全局变量

global_vars.yaml 加载所有变量。

标签: always

TripleO 服务器的通用角色

将常见 Ansible 角色应用于所有 overcloud 节点,包括用于安装 bootstrap 软件包的 tripleo-bootstrap 和用于配置 ssh 已知主机的 tripleo-ssh-known-hosts。

标签: 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 模板接口的任务。Ansible 仅针对 undercloud 节点运行这些任务。

标签: externalexternal_deploy_steps

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

从 deploy_steps_tasks 模板接口应用任务。

标签: overclouddeploy_steps

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

应用每个步骤执行的常见任务,包括 puppet 主机配置 container-puppet.pytripleo-container-manage (容器配置和管理)。

标签: overclouddeploy_steps

部署后服务器

5 步部署过程后执行的配置应用特定于服务器的 heat 部署。

标签: overcloudpost_deploy_steps

部署之后的外部部署任务

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

标签: externalexternal_deploy_steps

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.