9.3. 使用 Ansible 管理容器
Red Hat OpenStack Platform 17.1 使用 tripleo_container_manage Ansible 角色对容器执行管理操作。您还可以编写自定义 playbook 来执行特定的容器管理操作:
-
收集 heat 生成的容器配置数据。
tripleo_container_manage角色使用此数据来编配容器部署。 - 启动容器。
- 停止容器。
- 更新容器。
- 删除容器。
- 使用特定配置运行容器。
虽然 director 会自动执行容器管理,但您可能想要自定义容器配置,或者在不重新部署 overcloud 的情况下对容器应用热修复。
此角色仅支持 Podman 容器管理。
9.3.1. tripleo-container-manage 角色默认值和变量 复制链接链接已复制到粘贴板!
以下摘录显示了 tripleo_container_manage Ansible 角色的默认值和变量。
9.3.2. tripleo-container-manage molecule 场景 复制链接链接已复制到粘贴板!
molecule 用于测试 tripleo_container_manage 角色。下面显示了一个 molecule 默认清单:
使用方法
Red Hat OpenStack 17.1 仅支持此角色中的 Podman。Docker 支持采用路线图。
Molecule Ansible 角色执行以下任务:
-
收集由 TripleO Heat 模板生成的容器配置数据。此数据被用作数据源。如果容器已经由
Molecule管理,无论其存在状态,配置数据将根据需要重新配置容器。 -
管理
systemd关闭文件。它创建TripleO Container systemd服务,在关闭或启动节点时为服务排序是必需的。它还管理netns-placeholder服务。 删除不需要或需要重新配置的容器。它使用名为
needs_delete ()的自定义过滤器,其包含一组规则来确定容器是否需要删除。-
如果容器没有由
tripleo_ansible管理,则容器不会被删除,或者容器config_id与输入 ID 不匹配。 -
如果容器没有
config_data,或者容器没有与输入中数据不匹配的config_data,则会删除容器。请注意,当删除容器时,该角色还会禁用并删除systemd服务和 healtchecks。
-
如果容器没有由
按照
start_order容器配置定义的特定顺序创建容器,默认值为 0。-
如果容器是
exec,则将运行一个execs的专用 playbook,使用async,以便可以同时运行多个execs。 -
否则,会使用
podman_container来创建容器。如果容器有一个重启策略,则会配置systemd服务。如果容器有一个 healthcheck 脚本,则会配置systemd healthcheck服务。
-
如果容器是
tripleo_container_manage_concurrency 参数默认设置为 1,并且放置值高于 2 可能会公开 Podman 锁定的问题。
playbook 示例:
9.3.3. tripleo_container_manage 角色变量 复制链接链接已复制到粘贴板!
tripleo_container_manage Ansible 角色包含以下变量:
| 名称 | 默认值 | 描述 |
|---|---|---|
| tripleo_container_manage_check_puppet_config | false |
如果您希望 Ansible 检查 Puppet 容器配置,则使用此变量。Ansible 可使用配置 hash 来识别更新的容器配置。如果容器有一个来自 Puppet 的新配置,请将此变量设置为 |
| tripleo_container_manage_cli | podman |
使用此变量设置要用于管理容器的命令行界面。 |
| tripleo_container_manage_concurrency | 1 | 使用此变量设置要同时管理的容器数量。 |
| tripleo_container_manage_config | /var/lib/tripleo-config/ | 使用此变量设置容器配置目录的路径。 |
| tripleo_container_manage_config_id | tripleo |
使用此变量设置具体配置步骤的 ID。例如,将此值设置为 |
| tripleo_container_manage_config_patterns | *.json | 使用此变量设置用于标识容器配置目录中配置文件的 bash 正则表达式。 |
| tripleo_container_manage_debug | false |
使用此变量启用或禁用调试模式。如果要运行带有特定一次性配置的容器,以调试模式运行 |
| tripleo_container_manage_healthcheck_disable | false | 使用此变量启用或禁用健康检查。 |
| tripleo_container_manage_log_path | /var/log/containers/stdouts | 使用此变量为容器设置 stdout 日志路径。 |
| tripleo_container_manage_systemd_order | false | 使用此变量启用或禁用 Ansible 的 systemd 关闭顺序。 |
| tripleo_container_manage_systemd_teardown | true | 使用此变量触发已弃用容器的清理。 |
| tripleo_container_manage_config_overrides | {} | 使用此变量覆盖任何容器配置。此变量的值来自一个字典,其中每个键都是容器名称和您要覆盖的参数,如容器镜像或用户。此变量不会将自定义覆盖写入 JSON 容器配置文件,并且任何新的容器部署、更新或升级都会恢复到 JSON 配置文件的内容。 |
| tripleo_container_manage_valid_exit_code | [] |
使用此变量检查容器是否返回退出代码。这个值必须是列表,例如 |
9.3.4. tripleo-container-manage healthchecks 复制链接链接已复制到粘贴板!
在 Red Hat OpenStack 17.1 之前,容器健康检查是由 systemd 计时器实现的,该计时器将运行 podman exec 来确定给定容器是否健康。现在,它使用 Podman 中的原生健康检查接口,这有助于集成和使用。
要检查容器(如 keystone)是否健康,请运行以下命令:
sudo podman healthcheck run keystone
$ sudo podman healthcheck run keystone
返回代码应当为 0 和 "healthy "。
9.3.5. tripleo-container-manage debug 复制链接链接已复制到粘贴板!
tripleo_container_manage Ansible 角色允许您对给定容器执行特定的操作。这可用于:
- 使用特定的一次性配置运行容器。
- 输出容器命令以管理容器生命周期。
- 输出 Ansible 对容器所做的更改。
要管理单个容器,您需要了解两个方面:
- overcloud 部署过程中的步骤是容器部署的。
- 包含容器配置的生成的 JSON 文件的名称。
以下是在第 1 步中 管理 HAproxy 容器的 playbook 示例,可覆盖镜像设置:
如果 Ansible 以检查模式运行,则不会删除或创建容器,但 playbook 结束时会显示一个命令列表来显示 playbook 的可能结果。这对于调试非常有用。
ansible-playbook haproxy.yaml --check
$ ansible-playbook haproxy.yaml --check
添加 diff 模式 将显示 Ansible 对容器所做的更改。
ansible-playbook haproxy.yaml --check --diff
$ ansible-playbook haproxy.yaml --check --diff
tripleo_container_manage_clean_orphans 参数是可选的。它可以设置为 false 表示孤立的容器(带有特定 config_id )不会被删除。它可用于管理单个容器,而不影响具有相同 config_id 的其他正在运行的容器。
tripleo_container_manage_config_overrides 参数是可选的,可用于覆盖特定的容器属性,如 image 或 container 用户。参数使用容器名称和要覆盖的参数创建字典。这些参数必须存在,并在 TripleO Heat 模板中定义容器配置。
请注意,字典不会更新 JSON 文件中的覆盖,以便在执行更新或升级时,容器将与 JSON 文件中的配置重新配置。