第 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
文件中。
流程
创建一个包含以下内容的 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_user
和run_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
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 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/
目录