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 节点的
hosts
和vars
的 Ansible 清单文件。 -
ansible.log - 最近运行的
ansible-playbook
中的日志文件。 -
ansible.cfg - 运行
ansible-playbook
时使用的配置文件。 -
ansible-playbook-command.sh - 用于重新运行
ansible-playbook
的可执行文件脚本。 SSH_PRIVATE_KEY - 用于访问 overcloud 节点的私有 ssh 密钥。
- 重现 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
的日志文件。
流程
使用
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
工作目录的不同提交项。
流程
更改到 overcloud 的
config-download
工作目录,通常称为overcloud
:$ cd ~/config-download/overcloud
运行
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 ...
默认情况下,最近的提交显示在前面。
针对两个提交哈希运行
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 环境文件。
步骤
-
以
stack
用户身份登录 undercloud 主机。 Source
stackrc
文件:$ source ~/stackrc
运行部署命令。包括 overcloud 所需的任何环境文件:
$ openstack overcloud deploy \ --templates \ -e environment-file1.yaml \ -e environment-file2.yaml \ ...
- 等待部署过程完成。
在部署过程中,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 环境文件。
步骤
-
以
stack
用户身份登录 undercloud 主机。 Source
stackrc
文件:$ source ~/stackrc
使用
--stack-only
选项运行部署命令。包括 overcloud 所需的任何环境文件:$ openstack overcloud deploy \ --templates \ -e environment-file1.yaml \ -e environment-file2.yaml \ ... --stack-only
- 等待置备过程完成。
为
tripleo-admin
用户启用从 undercloud 到 overcloud 的 SSH 访问。config-download
进程使用tripleo-admin
用户来执行基于 Ansible 的配置:$ openstack overcloud admin authorize
-
在节点上执行任何手动预配置任务。如果使用 Ansible 进行配置,请使用
tripleo-admin
用户来访问节点。 使用
--config-download-only
选项运行部署命令。包括 overcloud 所需的环境文件:$ openstack overcloud deploy \ --templates \ -e environment-file1.yaml \ -e environment-file2.yaml \ ... --config-download-only
- 等待配置过程完成。
在配置阶段,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:
- 结合置备和配置过程的标准方法。
- 分隔置备和配置过程。
流程
-
以
stack
用户身份登录 undercloud 主机。 运行
ansible-playbook-command.sh
脚本。可以将额外的 Ansible 参数传递给该脚本,再将其原封不动地传递给
ansible-playbook
命令。这样便可利用 Ansible 功能,如检查模式(--check
)、限制主机(--limit
)或覆盖变量(-e
)。例如:$ ./ansible-playbook-command.sh --limit Controller
警告当
--limit
用于大规模部署时,只有执行中包含的主机才会添加到节点的 SSHknown_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
等待配置过程完成。
其他信息
这个工作目录中包含一个名为
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
对 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 环境文件。
步骤
-
以
stack
用户身份登录 undercloud 主机。 Source
stackrc
文件:$ source ~/stackrc
使用
--stack-only
选项运行部署命令。包括 overcloud 所需的环境文件:$ openstack overcloud deploy \ --templates \ -e environment-file1.yaml \ -e environment-file2.yaml \ ... --stack-only
- 等待置备过程完成。
为
tripleo-admin
用户启用从 undercloud 到 overcloud 的 SSH 访问。config-download
进程使用tripleo-admin
用户来执行基于 Ansible 的配置:$ openstack overcloud admin authorize
生成
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
文件的位置。
-
切换到包含
config-download
文件的目录:$ cd ~/config-download
生成静态清单文件:
$ tripleo-ansible-inventory \ --stack <overcloud> \ --ansible_ssh_user tripleo-admin \ --static-yaml-inventory inventory.yaml
-
用您的 overcloud 的名称替换
<overcloud>
。
-
用您的 overcloud 的名称替换
使用
~/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
- 等待配置过程完成。
从基于 ansible 的配置手动生成
overcloudrc
文件:$ openstack action execution run \ --save-result \ --run-sync \ tripleo.deployment.overcloudrc \ '{"container":"overcloud"}' \ | jq -r '.["result"]["overcloudrc.v3"]' > overcloudrc.v3
手动将部署状态设置为成功:
$ openstack workflow execution create tripleo.deployment.v1.set_deployment_status_success '{"plan": "<overcloud>"}'
-
用您的 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-task
和 ansible-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 模板接口应用任务。
标签:
overcloud
、deploy_steps
- 服务器部署
应用特定于服务器的 heat 部署,以进行网络和基础架构数据等配置。包括 NetworkDeployment、<Role>Deployment、<Role>AllNodesDeployment,等等。
标签:
overcloud
、pre_deploy_steps
- 主机准备步骤
从 host_prep_steps 模板接口应用任务。
标签:
overcloud
、host_prep_steps
- 外部部署步骤 [1,2,3,4,5]
应用来自 external_deploy_steps_tasks 模板接口的任务。Ansible 仅针对 undercloud 节点运行这些任务。
标签:
external
、external_deploy_steps
- Overcloud 部署步骤任务 [1,2,3,4,5]
从 deploy_steps_tasks 模板接口应用任务。
标签:
overcloud
、deploy_steps
- Overcloud 通用部署步骤任务 [1,2,3,4,5]
应用每个步骤执行的常见任务,包括 puppet 主机配置
container-puppet.py
和tripleo-container-manage
(容器配置和管理)。标签:
overcloud
、deploy_steps
- 部署后服务器
5 步部署过程后执行的配置应用特定于服务器的 heat 部署。
标签:
overcloud
、post_deploy_steps
- 部署之后的外部部署任务
应用来自 external_post_deploy_steps_tasks 模板接口的任务。Ansible 仅针对 undercloud 节点运行这些任务。
标签:
external
、external_deploy_steps