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_BUILDKITDOCKER_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

许可证

BSD 3-Clause License

关于项目

Install and configure podman

安装
ansible-galaxy install gwerlas.podman
许可证
bsd-3-clause
下载
5.4k
拥有者
DevOps Engineer