chasinglogic.podman

Podman 的 Ansible 角色

使用 Podman 管理服务和容器

CircleCI

使用方法

默认情况下,此角色将根据 Podman 文档 安装 Podman,并执行任何其他必需的设置,以使安装在支持的平台上正常运行。

重要提示: 这意味着对于 Ubuntu / Debian 系统,在添加仓库后,它将执行 apt upgrade,该升级仅在添加或更改仓库时运行,不会在后续运行中执行。

另外,它可以将 Podman 容器部署并配置为 SystemD 服务。

示例剧本

- hosts: all
  roles:
    - role: podman

自动服务部署

Podman 容器设置为服务时,相对比较统一。因此,此角色提供了一个变量,可以用来将容器部署并配置为 SystemD 服务。更复杂的用例,如将多个容器配置为一个 pod,目前尚不支持。要在您的主机上使用此功能,请定义一个名为 podman_services 的变量,其结构如下:

podman_services:
    ## Podman 变量
    #
    # 必需:要下载的镜像名称
  - image_name: nginx
    # 可选:要下载的标签。通常对应于版本,默认为 'latest'
    image_tag: mainline
    # 可选:将添加到 SystemD 服务文件的描述
    description: Web host
    # 可选:要发布的端口列表。格式与 podman CLI 相同,即:主机端口:容器端口。这直接传递给 '--publish' 标志,因此 IP 绑定也可以使用(例如 '127.0.0.1:8080:80')。默认为无。
    publish:
      - '80:80'
    # 可选:作为 --network 标志传递的网络名称字符串。
    # 如果网络不存在,将会创建。可用于允许多个服务相互连接。有关注意事项,请参见网络部分。
    network: somenetwork
    # 可选:要挂载的卷列表。格式与 podman CLI 的主机目录:容器目录相同,并且如下面所示,允许使用挂载选项。
    volumes:
      - '/tmp:/usr/share/nginx/html:ro'
    # 可选:为 Podman 的 hostname 标志定义主机名。设置容器的主机名,默认为无。
    hostname: chasinglogic.io
    # 可选:要挂载的秘密列表。秘密不会自动创建。使用时唯一必需的字段是名称。其他值有 Podman 文档中指定的默认值 
    # https://docs.podman.io/en/v4.6.0/markdown/options/secret.html
    secrets:
      - name: secret
        type: mount
        target: /run/secrets/secret
        uid: 0
        gid: 0
        mode: 0
    # 可选:要添加到容器的环境变量列表。默认值为无。
    env_vars:
      - SOME_VAR=SOME_VALUE
    # 可选:将作为字符串的任意参数列表添加在镜像名称之前。
    flags:
      - '--cap-add=NET_ADMIN'

    ## SystemD 变量
    #
    # 可选:为此服务定义重启策略。默认值为 always
    restart: always
    # 可选:定义此服务重启之间等待的时间(秒)。默认值为 30
    restart_sec: 30
    # 可选:为 SystemD 服务定义实际使用的名称。{{ 默认为 image_name + '-podman' }}
    service_name: nginx
    # 可选:定义该 SystemD 服务必须启动后才能启动的目标/服务。这是一个 YAML 列表而不是字符串。
    after:
      - network.target
    # 可选:定义启动此 SystemD 服务的超时时间。有效值请参见 'man systemd.service'。默认值为5分钟。
    timeout_start_sec: 5m
    # 可选:为 SystemD 服务定义安装部分。目前仅支持 wanted_by。有关此部分的描述,请参见 'man systemd.unit'。默认值为无,绝大多数用户不需要此项。
    install:
      wanted_by:
        - multi-user.target
    # 可选:为服务文件定义用户和组。默认值不指定,通常等于 root。
    user: root
    group: root

网络设置

目前,Ansible 并未提供类似于 docker_network 的 podman 网络模块。如果您在容器上使用了网络选项,则需要确保在此角色运行之前,网络已存在。在将来,当 podman 网络支持添加到 Ansible 时,此角色将确保其创建。

开发

在开发时,最好像这样使用 converge 和 verify 阶段:

make converge verify

许可证

MIT

关于项目

Manage services and containers with podman

安装
ansible-galaxy install chasinglogic.podman
许可证
mit
下载
3k
拥有者
Linux and FOSS Enthusiast.