19.2. 使用 podman RHEL 系统角色创建带有绑定挂载的无根容器
您可以通过运行 Ansible Playbook 及管理应用程序配置,使用 podman RHEL 系统角色创建具有绑定挂载的 rootless 容器。
示例 Ansible Playbook 启动两个 Kubernetes pod:一个用于数据库,另一个用于 web 应用。数据库 pod 配置在 playbook 中指定,而 Web 应用 Pod 在一个外部 YAML 文件中定义。
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
用于连接到受管节点的帐户具有这些节点的
sudo权限。 -
用户和组
webapp存在,且必须列在主机上的/etc/subuid和/etc/subgid文件中。 -
必须已创建名为
dbuser的用户和名为dbgroup的组。
流程
创建一个包含以下内容的 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/rhel-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:: 包含定义名为db的第一个容器的 Kubernetes YAML 文件。您可以使用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