第 19 章 使用 RHEL 系统角色管理容器
使用 podman RHEL 系统角色,您可以管理 Podman 配置、容器以及运行 Podman 容器的 systemd 服务。
19.1. 使用 podman RHEL 系统角色创建带有绑定挂载的无根容器 复制链接链接已复制到粘贴板!
您可以使用 podman RHEL 系统角色,通过运行 Ansible playbook 来创建带有绑定挂载的无根容器,并管理应用程序配置。
示例 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: redhat.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