第 15 章 使用 Ansible playbook 管理容器


有了 Podman 4.2 ,您可以使用 Podman RHEL 系统角色来管理 Podman 配置、容器以及运行 Podman 容器的 systemd 服务。

RHEL 系统角色提供了一个配置接口,来远程管理多个 RHEL 系统。您可以使用界面跨多个 RHEL 版本管理系统配置,以及采用新的主版本。如需更多信息,请参阅 使用 RHEL 系统角色自动化系统管理

15.1. 使用 podman RHEL 系统角色创建带有绑定挂载的无根容器

您可以通过运行 Ansible playbook ,使用 podman RHEL 系统角色创建带有绑定挂载的无根容器,并使用它来管理应用程序配置。

示例 Ansible playbook 启动两个 Kubernetes pod:一个用于数据库,另一个用于 web 应用。数据库 pod 配置在 playbook 中指定,而 Web 应用 Pod 在外部 YAML 文件中定义。

先决条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 用于连接到受管节点的帐户具有 sudo 权限。
  • 用户和组 webapp 存在,它必须列在主机上的 /etc/subuid/etc/subgid 文件中。

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    - name: Configure Podman
      hosts: managed-node-01.example.com
      tasks:
        - name: Create a web application and a database
          ansible.builtin.include_role:
            name: rhel-system-roles.podman
          vars:
            podman_create_host_directories: true
            podman_firewall:
              - port: 8080-8081/tcp
                state: enabled
              - port: 12340/tcp
                state: enabled
            podman_selinux_ports:
              - ports: 8080-8081
                setype: http_port_t
            podman_kube_specs:
              - state: started
                run_as_user: dbuser
                run_as_group: dbgroup
                kube_file_content:
                  apiVersion: v1
                  kind: Pod
                  metadata:
                    name: db
                  spec:
                    containers:
                      - name: db
                        image:  quay.io/linux-system-roles/mysql:5.6
                        ports:
                          - containerPort: 1234
                            hostPort: 12340
                        volumeMounts:
                          - mountPath: /var/lib/db:Z
                            name: db
                    volumes:
                      - name: db
                        hostPath:
                          path: /var/lib/db
              - state: started
                run_as_user: webapp
                run_as_group: webapp
                kube_file_src: /path/to/webapp.yml

    示例 playbook 中指定的设置包括以下内容:

    run_as_userrun_as_group
    指定容器是无根的。
    kube_file_content

    包含一个 Kubernetes YAML 文件,定义名为 db 的第一个容器。您可以使用 podman kube generate 命令生成 Kubernetes YAML 文件。

    • db 容器是基于 quay.io/db/db:stable 容器镜像。
    • db 绑定挂载将主机上的 /var/lib/db 目录映射到容器中的 /var/lib/db 目录。Z 标志使用私有的非共享标签标记内容,因此只有 db 容器才能访问其内容。
    kube_file_src: <path>
    定义第二个容器。控制器节点上 /path/to/webapp.yml 文件的内容将复制到受管节点上的 kube_file 字段中。
    volumes: <list>
    定义要在一个或多个容器中提供的数据源的 YAML 列表。例如,主机上的本地磁盘(hostPath)或其他磁盘设备。
    volumeMounts: <list>
    一个 YAML 列表,定义单个容器将挂载给定卷的目的地。
    podman_create_host_directories: true
    在主机上创建目录。这指示角色检查 hostPath 卷的 kube 规格,并在主机上创建这些目录。如果您需要对所有权和权限有更多的控制,请使用 podman_host_directories

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.podman/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.podman/README.md 文件
  • /usr/share/doc/rhel-system-roles/podman/ 目录
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.