notmycloud.podman_systemd

Ansible Podman_systemd

描述

为系统和无特权用户配置 Podman Systemd 单元。

安装

以下角色也是必需的。如果将它们添加为依赖项,它们会执行,但可能会失败。

  • linuxhq.sysctl
  • notmycloud.yaml2ini
  • notmycloud.systemd_unit

重要提示:需要安装 toml Python 包。可以使用 pip 安装。

使用

提供以下变量以正确操作此角色。 PODMAN_SYSTEMD_INSTALL_COCKPIT 将安装支持 Podman 的 Cockpit。 PODMAN_SYSTEMD_ALLOW_LOWEST_PORT 将指定无特权用户可以绑定的最低端口。对于 1024 或更低的低端口,其安全性存在争议,因此应该限制为受信用户。如果这是一个多租户服务器,建议跳过此变量;但是,如果您完全管理此服务器并为每个服务设置用户,则此选项可以为您省去一些麻烦。在我看来,对于非多租户的服务器可以将其设置为 0。 PODMAN_SYSTEMD_ALLOW_PING 将允许无特权用户进行 ping 操作。 PODMAN_SYSTEMD_DEPLOY 包含大量 Podman 配置。为每个将设置 Systemd 单元的用户创建一个键。

PODMAN_SYSTEMD_DEPLOY:
  root:
    等等...
  user1:
    等等...
  user2:
    等等...

用户配置

Root 将在默认的 /etc/systemd/system 目录下配置,而用户将配置在 ~/.config/system/user 目录下。在这个例子中,我们将为一个无特权用户配置。

debug_log: bool # 设置为 true 以启用任务和调试日志记录
PODMAN_SYSTEMD_DEPLOY:
  myuser:
    config:
      storage:
        storage:
          driver: "overlay"
        # 以 INI 格式写入的键值对,存储在用户或 root 的 /etc 配置目录中。
        # 键值对应遵循 notmycloud.yaml2ini 角色所指定的格式。
      containers:
        engine:
          network_cmd_options:
            - "allow_host_loopback=true"
            - "enable_ipv6=true"
          env: 
            - "TMPDIR=$HOME/.cache/tmp/"
        # 以 TOML 格式写入的键值对,存储在用户或 root 的 /etc 配置目录中。
      registries:
        unqualified-search-registries:
          - "docker.io"
          # - "quay.io"
          # - "registry.access.redhat.com"
        registry:
          # - prefix: "docker.io"
          #   location: "127.0.0.1:5000"
          #   insecure: true
          # 在 2020 年 11 月,Docker 限制镜像拉取。在测试时为避免触及这些限制,始终使用 Google 镜像。
          # 参考:https://cloud.google.com/container-registry/docs/pulling-cached-images
        registry.mirror:
          - location: "https://mirror.gcr.io"
        # 以 TOML 格式写入的键值对,存储在用户或 root 的 /etc 配置目录中。
      login: # 请参见 containers.podman.podman_login 模块的文档
        - registry: registry.mydomain.com
          username: registryuser
          password: super$3(r37Password
    systemd:
      enable_socket: # 默认值为 False,启用用户 Podman API 套接字或在 root 下启用系统范围。
      containers:
        CONTAINERNAME: # 用您想要的容器名称替换,将用于 Systemd 单元文件。
          podman_options:
            image:
            network: # 网络字符串,默认为 slirp4netns:allow_host_loopback=true,enable_ipv6=true
            replace: # bool
            restart: # "always"|"no"|"on-failure"|"unless-stopped" 默认值为 no
            remove: # 默认值为 yes
            stop_timeout: # 默认值为 60 秒
            log_driver: # 默认为 Passthrough,因此您可以在日志中查看日志
            healthcheck:
              cmd:
              interval:
              retries:
              delay:
              timeout:
            environment: # 键值对数组
              key: "value"
            ports: # 0.0.0.0:主机端口:容器端口
            volumes: 
              - host:
                container:
                options:
                type: # file/directory
            labels: # 键值对数组
              key: "value"
            other_options: # 传递给 podman run 的其他选项的字符串或数组
          service_options: # 请参见 notmycloud.systemd_unit 变量的深度,与 UNIT_NAME 相同
      pods:
        PODNAME: # 用您想要的 Pod 名称替换,这将用于前缀关联的容器。
          pod_service_options: # 请参见 notmycloud.systemd_unit 变量的深度,与 UNIT_NAME 相同
          CONTAINERNAME:
            # 遵循上述 PODMAN_SYSTEMD_DEPLOY.USERNAME.systemd.containers.CONTAINERNAME 语法

其他说明

Podman 套接字

Root 套接字将启用在:/run/podman/podman.sock 无特权套接字将启用在 : /run/user/$UID/podman/podman.sock

容器配置目录

我建议您使用 %E/%N/ 作为您的配置根目录。
这将把配置存储在 ~/.config/{service_name}//etc/{service_name}/ 中。
对于需要多个配置目录的容器,我将使用 %E/%N/config1/%E/%N/config2/ 等等...

推荐的其他选项

--init 在容器内运行一个 init,用于转发信号和回收进程。有关更多信息,请参见 containers/podman#1670
--cap-drop=all 删除所有能力,您可能需要添加能力才能使容器正常工作。
--security-opt=no-new-privileges 禁止容器进程获得额外权限。有关更多信息,请参见 文档
--userns=keep-id 将容器用户映射到主机用户 ID。

支持

如需支持,请提出问题并提供以下内容

  • 示例任务/剧本以复制您的问题
  • 创建的结果文件。
关于项目

Configure Podman Systemd Units for system and rootless users.

安装
ansible-galaxy install notmycloud.podman_systemd
许可证
mit
下载
234
拥有者