第 21 章 使用 RHEL 系统角色管理容器
使用 podman
RHEL 系统角色,您可以管理 Podman 配置、容器以及运行 Podman 容器的 systemd
服务。
21.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
标志使用私有的 unshared 标签标记内容,因此只有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/
目录