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 角色的默认值和变量。

# All variables intended for modification should place placed in this file.
tripleo_container_manage_hide_sensitive_logs: '{{ hide_sensitive_logs | default(true)
  }}'
tripleo_container_manage_debug: '{{ ((ansible_verbosity | int) >= 2) | bool }}'
tripleo_container_manage_clean_orphans: true

# All variables within this role should have a prefix of "tripleo_container_manage"
tripleo_container_manage_check_puppet_config: false
tripleo_container_manage_cli: podman
tripleo_container_manage_concurrency: 1
tripleo_container_manage_config: /var/lib/tripleo-config/
tripleo_container_manage_config_id: tripleo
tripleo_container_manage_config_overrides: {}
tripleo_container_manage_config_patterns: '*.json'
# Some containers where Puppet is run, can take up to 10 minutes to finish
# in slow environments.
tripleo_container_manage_create_retries: 120
# Default delay is 5s so 120 retries makes a timeout of 10 minutes which is
# what we have observed a necessary value for nova and neutron db-sync execs.
tripleo_container_manage_exec_retries: 120
tripleo_container_manage_healthcheck_disabled: false
tripleo_container_manage_log_path: /var/log/containers/stdouts
tripleo_container_manage_systemd_teardown: true

9.3.2. tripleo-container-manage molecule 场景

molecule 用于测试 tripleo_container_manage 角色。下面显示了一个 molecule 默认清单:

hosts:
  all:
    hosts:
      instance:
        ansible_host: localhost
        ansible_connection: local
        ansible_distribution: centos8

使用方法

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 示例:

- name: Manage step_1 containers using tripleo-ansible
  block:
    - name: "Manage containers for step 1 with tripleo-ansible"
      include_role:
        name: tripleo_container_manage
      vars:
        tripleo_container_manage_config: "/var/lib/tripleo-config/container-startup-config/step_1"
        tripleo_container_manage_config_id: "tripleo_step1"

9.3.3. tripleo_container_manage 角色变量

tripleo_container_manage Ansible 角色包含以下变量:

表 9.1. 角色变量
名称默认值描述

tripleo_container_manage_check_puppet_config

false

如果您希望 Ansible 检查 Puppet 容器配置,则使用此变量。Ansible 可使用配置 hash 来识别更新的容器配置。如果容器有一个来自 Puppet 的新配置,请将此变量设置为 true,以便 Ansible 能够检测到新配置,并将容器添加到 Ansible 必须重启的容器列表中。

tripleo_container_manage_cli

podman

使用此变量设置要用于管理容器的命令行界面。tripleo_container_manage 角色仅支持 Podman。

tripleo_container_manage_concurrency

1

使用此变量设置要同时管理的容器数量。

tripleo_container_manage_config

/var/lib/tripleo-config/

使用此变量设置容器配置目录的路径。

tripleo_container_manage_config_id

tripleo

使用此变量设置具体配置步骤的 ID。例如,将此值设置为 tripleo_step2,以管理部署的第二步的容器。

tripleo_container_manage_config_patterns

*.json

使用此变量设置用于标识容器配置目录中配置文件的 bash 正则表达式。

tripleo_container_manage_debug

false

使用此变量启用或禁用调试模式。如果要运行带有特定一次性配置的容器,以调试模式运行 tripleo_container_manage 角色,以输出管理容器生命周期的容器命令,或运行 no-op 容器管理操作进行测试和验证。

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

[]

使用此变量检查容器是否返回退出代码。这个值必须是列表,例如 [0,3]

9.3.4. tripleo-container-manage healthchecks

在 Red Hat OpenStack 17.1 之前,容器健康检查是由 systemd 计时器实现的,该计时器将运行 podman exec 来确定给定容器是否健康。现在,它使用 Podman 中的原生健康检查接口,这有助于集成和使用。

要检查容器(如 keystone)是否健康,请运行以下命令:

$ sudo podman healthcheck run keystone

返回代码应当为 0"healthy "。

"Healthcheck": {
    "Status": "healthy",
    "FailingStreak": 0,
    "Log": [
        {
            "Start": "2020-04-14T18:48:57.272180578Z",
            "End": "2020-04-14T18:48:57.806659104Z",
            "ExitCode": 0,
            "Output": ""
        },
        (...)
    ]
}

9.3.5. tripleo-container-manage debug

tripleo_container_manage Ansible 角色允许您对给定容器执行特定的操作。这可用于:

  • 使用特定的一次性配置运行容器。
  • 输出容器命令以管理容器生命周期。
  • 输出 Ansible 对容器所做的更改。
注意

要管理单个容器,您需要了解两个方面:

  • overcloud 部署过程中的步骤是容器部署的。
  • 包含容器配置的生成的 JSON 文件的名称。

以下是在第 1 步中 管理 HAproxy 容器的 playbook 示例,可覆盖镜像设置:

- hosts: localhost
  become: true
  tasks:
    - name: Manage step_1 containers using tripleo-ansible
      block:
        - name: "Manage HAproxy container at step 1 with tripleo-ansible"
          include_role:
            name: tripleo_container_manage
          vars:
            tripleo_container_manage_config_patterns: 'haproxy.json'
            tripleo_container_manage_config: "/var/lib/tripleo-config/container-startup-config/step_1"
            tripleo_container_manage_config_id: "tripleo_step1"
            tripleo_container_manage_clean_orphans: false
            tripleo_container_manage_config_overrides:
              haproxy:
                image: quay.io/tripleoRed_Hat_OpenStack_Platform-17.1-Customizing_your_Red_Hat_OpenStack_Platform_deployment.entos9/centos-binary-haproxy:hotfix

如果 Ansible 以检查模式运行,则不会删除或创建容器,但 playbook 结束时会显示一个命令列表来显示 playbook 的可能结果。这对于调试非常有用。

$ ansible-playbook haproxy.yaml --check

添加 diff 模式 将显示 Ansible 对容器所做的更改。

$ 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 文件中的配置重新配置。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.