第 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
$ source ~/stackrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 overcloud 部署命令,并纳入
--config-download
选项和环境文件,以禁用基于 heat 的配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意以下选项的使用:
-
--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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待 overcloud 配置完成。
等 overcloud 的 Ansible 配置完成后,director 会就已成功和已失败的任务提供一份报告,并给出用于访问 overcloud 的 URL:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果正在使用预置备的节点,则需通过 config-download
执行额外步骤,以确保成功部署。
10.3. 利用预配置节点启用 config-download 复制链接链接已复制到粘贴板!
在将 config-download
与预配置节点搭配使用时,需将基于 Heat 的主机名映射到它们的实际主机名,以便 ansible-playbook
访问可解析的主机。请使用 HostnameMap
来映射这些值。
步骤
创建环境文件(如
hostname-map.yaml
),并纳入HostnameMap
参数和主机名映射。请遵循以下语法:parameter_defaults: HostnameMap: [HEAT 主机名]: [实际主机名] [HEAT 主机名]: [实际主机名]
parameter_defaults: HostnameMap: [HEAT 主机名]: [实际主机名] [HEAT 主机名]: [实际主机名]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [HEAT 主机名]
通常遵循以下命名规范:[栈名称]-[角色]-[索引]
。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存
hostname-map.yaml
的内容。 在运行
config-download
部署时,请使用-e
选项纳入环境文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ sudo usermod -a -G mistral stack
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令刷新
stack
用户的权限:exec su -l stack
[stack@director ~]$ exec su -l stack
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令会提示您重新登录。请输入
stack
用户的密码。测试对于
/var/lib/mistral
目录的读取访问权限:ls /var/lib/mistral/
$ ls /var/lib/mistral/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ openstack workflow execution list $ less /var/lib/mistral/<execution uuid>/ansible.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <execution uuid>
就是用于运行ansible-playbook
的 Mistral 执行操作的 UUID。或者,在
/var/lib/mistral
下方查找最新修改过的目录,以便快速找到最新部署的相关日志:less /var/lib/mistral/$(ls -t /var/lib/mistral | head -1)/ansible.log
$ less /var/lib/mistral/$(ls -t /var/lib/mistral | head -1)/ansible.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.6. 手动运行 config-download 复制链接链接已复制到粘贴板!
/var/lib/mistral/
中的每一个工作目录都包含所需的 playbook 和脚本,可直接与 ansible-playbook
交互。这个操作过程介绍了如何与这些文件交互。
步骤
更改为您所选的 Ansible playbook 的目录:
cd /var/lib/mistral/<execution uuid>/
$ cd /var/lib/mistral/<execution uuid>/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <execution uuid>
就是用于运行ansible-playbook
的 Mistral 执行操作的 UUID。进入 mistral 工作目录后,运行
ansible-playbook-command.sh
以重现部署:./ansible-playbook-command.sh
$ ./ansible-playbook-command.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以向该脚本传递其他 Ansible 参数,再由该脚本将这些参数原样传递至
ansible-playbook
命令。这样便可更加充分地利用各种 Ansible 功能,如检查模式 (--check
)、限制主机 (--limit
) 或覆盖变量 (-e
)。例如:./ansible-playbook-command.sh --limit Controller
$ ./ansible-playbook-command.sh --limit Controller
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个工作目录中包含一个名为
deploy_steps_playbook.yaml
的 playbook,用于运行 overcloud 配置。要查看这个 playbook,请使用以下命令:less deploy_steps_playbook.yaml
$ less deploy_steps_playbook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个 playbook 会使用工作目录中所含的各种任务文件。某些任务文件是所有 Openstack Platform 角色通用的,某些任务文件则特定于某些 Openstack Platform 角色和服务器。
这个工作目录中还包含与 overcloud 的
roles_data
文件中定义的各个角色相对应的子目录。例如:ls Controller/
$ ls Controller/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 每个 Openstack Platform 角色目录中还包含相应角色类型的各个服务器的子目录。这些目录采用可组合角色主机名格式。例如:
ls Controller/overcloud-controller-0
$ ls Controller/overcloud-controller-0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ansible 任务都带有相应的标记。要查看完整的标记列表,请为
ansible-playbook
使用 CLI 参数--list-tags
:ansible-playbook -i tripleo-ansible-inventory.yaml --list-tags deploy_steps_playbook.yaml
$ ansible-playbook -i tripleo-ansible-inventory.yaml --list-tags deploy_steps_playbook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 然后,在
ansible-playbook-command.sh
脚本中通过--tags
、--skip-tags
或--start-at-task
来应用已标记的配置。例如:./ansible-playbook-command.sh --tags overcloud
$ ./ansible-playbook-command.sh --tags overcloud
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在使用 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
$ source ~/stackrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 overcloud 部署命令,但不要纳入
--config-download
选项或“config-download-environment.yaml”环境文件:openstack overcloud deploy --templates \ [OTHER OPTIONS]
$ openstack overcloud deploy --templates \ [OTHER OPTIONS]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在运行这个命令时,请确保您还纳入了与 overcloud 相关的所有其他文件。例如:
-
使用
-e
纳入自定义配置环境文件 -
使用
--roles-file
纳入自定义角色 (roles_data
) 文件 -
使用
--networks-file
纳入可组合网络 (network_data
) 文件
-
使用
- overcloud 部署命令会执行标准栈操作,包括与 Heat 有关的配置。
10.8. 后续步骤 复制链接链接已复制到粘贴板!
现在,您可以继续执行各种常规 overcloud 操作。