第 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 就安装在这个节点上。

步骤

  1. 查找 stackrc 文件。

    $ source ~/stackrc
  2. 运行 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) 文件
  3. 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 配置完成。

  4. 等 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 来映射这些值。

步骤

  1. 创建环境文件(如 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
  2. 保存 hostname-map.yaml 的内容。
  3. 在运行 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 用户设置正确的权限,然后才能访问这些工作目录。

步骤

  1. mistral 组可以读取 /var/lib/mistral 下的所有文件。向交互式 stack 用户授予以只读方式访问这些文件的 undercloud 权限:

    $ sudo usermod -a -G mistral stack
  2. 使用以下命令刷新 stack 用户的权限:

    [stack@director ~]$ exec su -l stack

    这个命令会提示您重新登录。请输入 stack 用户的密码。

  3. 测试对于 /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。

步骤

  1. 使用 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。

  2. 或者,在 /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 交互。这个操作过程介绍了如何与这些文件交互。

步骤

  1. 更改为您所选的 Ansible playbook 的目录:

    $ cd /var/lib/mistral/<execution uuid>/

    <execution uuid> 就是用于运行 ansible-playbook 的 Mistral 执行操作的 UUID。

  2. 进入 mistral 工作目录后,运行 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 Platform 角色通用的,某些任务文件则特定于某些 Openstack Platform 角色和服务器。

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

    $ ls Controller/

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

    $ 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.7. 禁用 config-download

要重新切换为基于 Heat 的标准配置方法,请在下次运行 openstack overcloud deploy 时删除相关的选项和环境文件。

步骤

  1. 查找 stackrc 文件。

    $ source ~/stackrc
  2. 运行 overcloud 部署命令,但不要纳入 --config-download 选项或“config-download-environment.yaml”环境文件:

    $ openstack overcloud deploy --templates \
        [OTHER OPTIONS]

    在运行这个命令时,请确保您还纳入了与 overcloud 相关的所有其他文件。例如:

    • 使用 -e 纳入自定义配置环境文件
    • 使用 --roles-file 纳入自定义角色 (roles_data) 文件
    • 使用 --networks-file 纳入可组合网络 (network_data) 文件
  3. overcloud 部署命令会执行标准栈操作,包括与 Heat 有关的配置。

10.8. 后续步骤

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