14.2. 使用 podman RHEL 系统角色创建带有绑定挂载的无根容器
您可以使用 podman RHEL 系统角色,通过运行 Ansible playbook 来创建带有绑定挂载的无根容器,并管理应用程序配置。
示例 Ansible playbook 启动两个 Kubernetes pod:一个用于数据库,另一个用于 web 应用。数据库 pod 配置在 playbook 中指定,而 Web 应用 Pod 在一个外部 YAML 文件中定义。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有这些节点的
sudo权限。 -
用户和组
webapp存在,且必须列在主机上的/etc/subuid和/etc/subgid文件中。 -
必须已创建名为
dbuser和名为dbgroup的组。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 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
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow