gwerlas.podman
Podman
以无根模式安装和配置 Podman。
GitLab 项目 : yoanncolin/ansible/roles/podman
要求
需要配置的 Linux 基础系统:
- SSH
- Python(用于 Ansible)
- Sudo
- 可用的软件包管理器
gwerlas.system
角色可以帮助你:
ansible-galaxy install gwerlas.system
- name: 我的剧本
hosts: all
roles:
- role: gwerlas.system
- role: gwerlas.podman
事实
此角色定义的事实:
podman_version
podman_packages
你可以仅获取事实,而不对节点进行任何更改:
- name: 我的剧本
hosts: all
tasks:
- name: 获取事实
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: facts
- name: 显示
ansible.builtin.debug:
var: podman_packages
标签
你可以使用以下标签对特定任务进行过滤:
provision
: 仅配置资源
角色变量
可用变量如下所示,包括默认值(见 defaults/main.yml
):
podman_compose_install: false
podman_toolbox_install: false
podman_mimic_docker: false
podman_create_missing_users: true
podman_users:
- name: "{{ ansible_user_id }}"
podman_wrappers: []
podman_wrappers_path: /usr/local/bin
Podman 无根模式
要让某些用户以无根模式使用 Podman,podman_users
必须是如下格式的对象列表:
podman_users:
- name: jdoe # Unix 登录名(必需)
home: /home/jdoe # 如果缺失将从用户条目获取
uid: 1000 # 仅用于尚未在系统范围内创建的用户
subuid_starts: 100000 # 默认根据用户 ID 生成
subuid_length: 50000 # 默认值为 65536
subgid_starts: 100000 # 默认与 subuid_starts 相同
subgid_length: 50000 # 默认与 subuid_length 相同
因为 Podman 将数据存储在用户的主目录中,我们将在缺失时创建它。
你可以通过单独调用 rootless
任务快速添加用户:
---
- name: 添加一个用于 Podman 无根使用的用户
hosts: all
vars:
podman_users:
- name: jdoe
uid: 300
tasks:
- name: 添加约翰·多伊
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: rootless
不存在的用户
对于尚不存在的用户,我们将通过 gwerlas.system
角色为你创建他们。
要禁用缺失用户的创建,请将 podman_create_missing_users
设置为 false
。在这种情况下,你必须为每个缺失的用户设置 uid
属性。
Podman 配置
默认情况下,我们不更改发行版的配置文件。
除了 Debian 11 容器设置不支持默认工作外。
要使用自定义配置,请使用 podman_*_config
设置。
容器
使用 podman_containers_config
字典填充 /etc/containers/containers.conf
文件,结构与 containers.conf
手册页面中描述的 toml 相同。
例如:
podman_containers_config:
containers:
log_driver: journald
engine:
cgroup_manager: cgroupfs
将生成如下的 /etc/containers/containers.conf
:
[containers]
log_drivers = "journald"
[engine]
cgroup_manager = "cgroupfs"
仅适用于 Debian 11,我们将用上述配置覆盖发行版的默认设置。
注册表
注意 我们不支持弃用的版本 1 格式。
使用 podman_registries_config
字典填充 /etc/containers/registries.conf
文件,结构与 registries.conf
手册页面中描述的 toml 相同。
例如:
podman_registries_config:
unqualified-search-registries:
- docker.io
registry:
- location: my-insecure-registry:5000
insecure: true
将生成如下的 /etc/containers/registries.conf
:
unqualified-search-registries = ['docker.io']
[[registry]]
location = my-insecure-registry:5000
insecure = true
存储
使用 podman_storage_config
字典填充 /etc/containers/storage.conf
文件,结构与 storage.conf
手册页面中描述的 toml 相同。
例如:
podman_storage_config:
storage:
driver: zfs
options:
zfs:
mountopt: "nodev"
将生成如下的 /etc/containers/storage.conf
:
[storage]
driver = "zfs"
[storage.options.zfs]
mountopt = "nodev"
Libpod
使用 podman_libpod_config
字典填充 /etc/containers/libpod.conf
文件,结构与 libpod.conf
手册页面中描述的 toml 相同。
例如:
podman_libpod_config:
cgroup_manager: cgroupfs
将生成如下的 /etc/containers/libpod.conf
:
cgroup_manager = "cgroupfs"
仅适用于 Debian 11,我们将用上述配置覆盖发行版的默认设置。
Podman compose
将 podman_compose_install
设置为 true
将安装 podman-compose
,如果它在目标主机的发行版中可用。
Podman toolbox
将 podman_toolbox_install
设置为 true
将安装 podman-toolbox
,如果它在目标主机的发行版中可用。
模拟 Docker
Docker 在 $PATH 中
你可以通过将 podman_mimic_docker
参数设置为 true
来模拟 Docker。 如果目标 Linux 发行版中可用 podman-docker
包,它将被安装,否则将创建符号链接。
这样,调用 docker
的脚本将透明地使用 podman
,或者几乎是这样。
守护进程套接字
如果安装的 Podman 版本为 3.0
或更高,服务将为每个 podman_users
启用,并且环境变量 DOCKER_BUILDKIT
和 DOCKER_HOST
将分别设置为 0
和 $XDG_RUNTIME_DIR/podman/podman.sock
。
因此,你将能够在 Podman 中运行 Docker。
包装器
你可以添加一些包装器以透明地调用某些命令:
例如,在你的系统上不安装 molecule(及其依赖关系)而运行它:
podman_wrappers:
- command: molecule
image: gwerlas/molecule
env:
CONTAINER_CONNECTION: docker
MOLECULE_CONTAINERS_BACKEND: podman
interactive: true
network: host
security_opt: label=disable
volume:
- $HOME/.cache/molecule:/root/.cache/molecule
- $HOME/.vagrant.d:/root/.vagrant.d
- /run/libvirt:/run/libvirt
- /var/lib/libvirt:/var/lib/libvirt
- /var/tmp:/var/tmp
wrapper_extras:
env_patterns:
- ANSIBLE_*
- MOLECULE_*
openstack_cli: true
podman_socket: true
same_pwd: true
ssh_auth_sock: true
大多数参数与 podman run
的参数相同,我们几乎支持所有 [ansible podman_container 模块][] 的参数(除了别名和面向服务的功能)。
你可以通过编辑 podman_wrappers_autofill
变量添加(或删除)支持的参数列表。你还可以通过编辑 podman_wrappers_values
变量编辑默认值。
依赖项
gwerlas.system
角色用于用户管理。
确保在系统上安装了 containers.podman
,或在 requirements.yml
中存在。
示例剧本
一个尽可能与 Docker 兼容的示例方式:
---
- name: 兼容 Docker
hosts: all
roles:
- name: gwerlas.system
- name: gwerlas.podman
vars:
podman_mimic_docker: true