第 10 章 使用 Ansible 配置 overcloud
此功能在本发行版本中作为技术预览而提供,因此尚未得到红帽的完全支持。应该仅将其用于测试,而不要部署到生产环境中。如需了解更多有关技术预览功能的信息,请参阅 Scope of Coverage Details。
可以使用 Ansible 作为应用 overcloud 配置的主要方法。本章介绍了用于在 overcloud 上启用这一功能的步骤。
虽然 director 会自动生成 Ansible playbook,但您最好了解一下 Ansible 的语法。如需了解有关使用 Ansible 的更多信息,请参阅 https://docs.ansible.com/。
Ansible 还使用了角色这一概念,但这有别于 OpenStack Platform director 中的角色。
10.1. 基于 Ansible 的 overcloud 配置 (config-download)
config-download 功能:
- 可以使用 Ansible(而非 Heat)来配置 overcloud。
-
可以取代在 overcloud 节点上针对配置部署数据在 Heat 与 Heat 代理之间进行的通信和传输 (
os-collect-config)
Heat 可在已启用或未启用 config-download 的情况下保留标准功能:
- director 可将环境文件和参数传递至 Heat。
- director 可以使用 Heat 来创建栈和所有的后代资源。
- Heat 仍可创建任何 OpenStack 服务资源,包括裸机节点和网络创建。
虽然 Heat 会通过 SoftwareDeployment 资源创建所有部署数据,以安装和配置 overcloud,但它不会应用任何配置。相反地,Heat 只会通过其 API 来提供这类数据。栈创建好后,Mistral 工作流会查询适用于部署数据的 Heat API,并使用 Ansible 清单文件和生成的 playbook 集合来运行 ansible-playbook,以应用配置。
10.2. 将 overcloud 配置方法切换为 config-download
以下操作过程旨在将 overcloud 配置方法从 OpenStack Orchestration (heat) 切换成基于 Ansible 的 config-download 方法。在这种情况下,undercloud 会充当 Ansible 控制节点,即运行 ansible-playbook 的节点。控制节点和 undercloud 指的是同一个节点,undercloud 就安装在这个节点上。
步骤
查找
stackrc文件。$ source ~/stackrc
运行 overcloud 部署命令,并纳入
--config-download选项和环境文件,以禁用基于 heat 的配置:$ openstack overcloud deploy --templates \ --config-download \ -e /usr/share/openstack-tripleo-heat-templates/environments/config-download-environment.yaml \ --overcloud-ssh-user heat-admin \ --overcloud-ssh-key ~/.ssh/id_rsa \ [OTHER OPTIONS]请注意以下选项的使用:
-
--config-download可启用额外的 Mistral 工作流,以通过ansible-playbook(而非 Heat)来应用配置。 -
-e /usr/share/openstack-tripleo-heat-templates/environments/config-download-environment.yaml是所需的环境文件,它会将 Heat 软件部署配置资源映射到基于 Ansible 的等效资源。这样就会通过 Heat API 来提供配置数据,而且 Heat 不会应用配置。 -
--overcloud-ssh-user和--overcloud-ssh-key用于 SSH 至每个 overcloud 节点、创建初始tripleo-admin用户、将 SSH 密钥注入/home/tripleo-admin/.ssh/authorized_keys。要注入 SSH 密钥,用户可以使用--overcloud-ssh-user(默认值为heat-admin)和--overcloud-ssh-key(默认值为~/.ssh/id_rsa)为初始 SSH 连接指定凭证。为免泄露使用--overcloud-ssh-key指定的私钥,director 不会向任何 API 服务(如 Heat 或 MIstral)传递这个密钥,而且只有 director 的“openstack overcloud deploy”命令会用这个密钥为tripleo-admin用户启用访问权限。
在运行这个命令时,请确保您还纳入了与 overcloud 相关的所有其他文件。例如:
-
使用
-e纳入自定义配置环境文件 -
使用
--roles-file纳入自定义角色 (roles_data) 文件 -
使用
--networks-file纳入可组合网络 (network_data) 文件
-
Overcloud 部署命令会执行标准栈操作。但是,当 overcloud 栈达到配置阶段时,栈会切换成
config-download方法以配置 overcloud:2018-05-08 02:48:38Z [overcloud-AllNodesDeploySteps-xzihzsekhwo6]: UPDATE_COMPLETE Stack UPDATE completed successfully 2018-05-08 02:48:39Z [AllNodesDeploySteps]: UPDATE_COMPLETE state changed 2018-05-08 02:48:45Z [overcloud]: UPDATE_COMPLETE Stack UPDATE completed successfully Stack overcloud UPDATE_COMPLETE Deploying overcloud configuration
等待 overcloud 配置完成。
等 overcloud 的 Ansible 配置完成后,director 会就已成功和已失败的任务提供一份报告,并给出用于访问 overcloud 的 URL:
PLAY RECAP ********************************************************** 192.0.2.101 : ok=173 changed=42 unreachable=0 failed=0 192.0.2.102 : ok=133 changed=42 unreachable=0 failed=0 localhost : ok=2 changed=0 unreachable=0 failed=0 Ansible passed. Overcloud configuration completed. Started Mistral Workflow tripleo.deployment.v1.get_horizon_url. Execution ID: 0e4ca4f6-9d14-418a-9c46-27692649b584 Overcloud Endpoint: http://10.0.0.1:5000/ Overcloud Horizon Dashboard URL: http://10.0.0.1:80/dashboard Overcloud rc file: /home/stack/overcloudrc Overcloud Deployed
如果正在使用预置备的节点,则需通过 config-download 执行额外步骤,以确保成功部署。
10.3. 利用预配置节点启用 config-download
在将 config-download 与预配置节点搭配使用时,需将基于 Heat 的主机名映射到它们的实际主机名,以便 ansible-playbook 访问可解析的主机。请使用 HostnameMap 来映射这些值。
步骤
创建环境文件(如
hostname-map.yaml),并纳入HostnameMap参数和主机名映射。请遵循以下语法:parameter_defaults: HostnameMap: [HEAT 主机名]: [实际主机名] [HEAT 主机名]: [实际主机名][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-
保存
hostname-map.yaml的内容。 在运行
config-download部署时,请使用-e选项纳入环境文件。例如:$ openstack overcloud deploy --templates \ --config-download \ -e /usr/share/openstack-tripleo-heat-templates/environments/config-download-environment.yaml \ -e /home/stack/templates/hostname-map.yaml \ --overcloud-ssh-user heat-admin \ --overcloud-ssh-key ~/.ssh/id_rsa \ [其他选项]
10.4. 启用对于 config-download 工作目录的访问权限
Mistral 会针对 config-download 功能执行 Ansible playbook。Mistral 会将 playbook、配置文件和日志保存在工作目录中。这些工作目录可在 /var/lib/mistral/ 中找到,并会使用 Mistral 工作流执行操作的 UUID 来命名。
要先为 stack 用户设置正确的权限,然后才能访问这些工作目录。
步骤
mistral组可以读取/var/lib/mistral下的所有文件。向交互式stack用户授予以只读方式访问这些文件的 undercloud 权限:$ sudo usermod -a -G mistral stack
使用以下命令刷新
stack用户的权限:[stack@director ~]$ exec su -l stack
这个命令会提示您重新登录。请输入
stack用户的密码。测试对于
/var/lib/mistral目录的读取访问权限:$ ls /var/lib/mistral/
10.5. 查看 config-download 日志和工作目录
在执行 config-download 的过程中,Ansible 会在 undercloud 上的 /var/lib/mistral/<execution uuid>/ansible.log 中创建一个日志文件。<execution uuid> 是用于运行 ansible-playbook 的 Mistral 执行操作所对应的 UUID。
步骤
使用
openstack workflow execution list命令列出所有的执行操作,然后找到执行了config-download的所选 Mistral 执行操作的工作流 ID:$ openstack workflow execution list $ less /var/lib/mistral/<execution uuid>/ansible.log
<execution uuid>就是用于运行ansible-playbook的 Mistral 执行操作的 UUID。或者,在
/var/lib/mistral下方查找最新修改过的目录,以便快速找到最新部署的相关日志:$ less /var/lib/mistral/$(ls -t /var/lib/mistral | head -1)/ansible.log
10.6. 手动运行 config-download
/var/lib/mistral/ 中的每一个工作目录都包含所需的 playbook 和脚本,可直接与 ansible-playbook 交互。这个操作过程介绍了如何与这些文件交互。
步骤
更改为您所选的 Ansible playbook 的目录:
$ cd /var/lib/mistral/<execution uuid>/
<execution uuid>就是用于运行ansible-playbook的 Mistral 执行操作的 UUID。进入 mistral 工作目录后,运行
ansible-playbook-command.sh以重现部署:$ ./ansible-playbook-command.sh
您可以向该脚本传递其他 Ansible 参数,再由该脚本将这些参数原样传递至
ansible-playbook命令。这样便可更加充分地利用各种 Ansible 功能,如检查模式 (--check)、限制主机 (--limit) 或覆盖变量 (-e)。例如:$ ./ansible-playbook-command.sh --limit Controller
这个工作目录中包含一个名为
deploy_steps_playbook.yaml的 playbook,用于运行 overcloud 配置。要查看这个 playbook,请使用以下命令:$ less deploy_steps_playbook.yaml
这个 playbook 会使用工作目录中所含的各种任务文件。某些任务文件是所有 Openstack Platform 角色通用的,某些任务文件则特定于某些 Openstack Platform 角色和服务器。
这个工作目录中还包含与 overcloud 的
roles_data文件中定义的各个角色相对应的子目录。例如:$ ls Controller/
每个 Openstack Platform 角色目录中还包含相应角色类型的各个服务器的子目录。这些目录采用可组合角色主机名格式。例如:
$ ls Controller/overcloud-controller-0
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.7. 禁用 config-download
要重新切换为基于 Heat 的标准配置方法,请在下次运行 openstack overcloud deploy 时删除相关的选项和环境文件。
步骤
查找
stackrc文件。$ source ~/stackrc
运行 overcloud 部署命令,但不要纳入
--config-download选项或“config-download-environment.yaml”环境文件:$ openstack overcloud deploy --templates \ [OTHER OPTIONS]在运行这个命令时,请确保您还纳入了与 overcloud 相关的所有其他文件。例如:
-
使用
-e纳入自定义配置环境文件 -
使用
--roles-file纳入自定义角色 (roles_data) 文件 -
使用
--networks-file纳入可组合网络 (network_data) 文件
-
使用
- overcloud 部署命令会执行标准栈操作,包括与 Heat 有关的配置。
10.8. 后续步骤
现在,您可以继续执行各种常规 overcloud 操作。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.