containers.podman.podman_pod 模块 – 管理 Podman Pod

注意

此模块是 containers.podman 集合 (版本 1.16.2) 的一部分。

如果您正在使用 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install containers.podman。您需要其他要求才能使用此模块,请参阅 要求 以了解详情。

要在 playbook 中使用它,请指定:containers.podman.podman_pod

containers.podman 1.0.0 中的新增功能

概要

  • 管理 podman pod。

要求

以下要求是在执行此模块的主机上需要的。

  • podman

参数

参数

注释

add_host

列表 / 元素=字符串

向所有 pod 中容器共享的 /etc/hosts 文件添加主机。

blkio_weight

字符串

块IO相对权重。权重值在10到1000之间。

此选项在 cgroups V1 无根系统上不受支持。

blkio_weight_device

列表 / 元素=字符串

块IO相对设备权重。

cgroup_parent

字符串

将在其下创建 pod 的 cgroup 的 cgroups 路径。如果路径不是绝对路径,则该路径被认为相对于 init 进程的 cgroups 路径。如果 cgroups 不存在,则将创建它们。

cpu_shares

字符串

CPU份额(相对权重)。

cpus

字符串

设置分配给 pod 的 CPU 总数。默认为 0.000,表示对计算能力没有限制。

cpuset_cpus

字符串

限制支持执行的CPU。第一个CPU编号为0。与`cpus`不同,此参数为字符串类型,并解析为数字列表。格式为 0-3,0,1

cpuset_mems

字符串

允许执行的内存节点 (0-3, 0,1)。仅在 NUMA 系统上有效。

debug

布尔值

返回可用于调查的附加信息。

选项

  • false ← (默认)

  • true

device

列表 / 元素=字符串

向 pod 添加主机设备。可选的权限参数可用于指定设备权限。它是 r(读取)、w(写入)和 m(mknod(2))的组合。

device_read_bps

列表 / 元素=字符串

限制从设备读取速率(每秒字节数)(例如 device-read-bps=/dev/sda:1mb)

device_write_bps

列表 / 元素=字符串

限制向设备写入速率(每秒字节数)。

dns

列表 / 元素=字符串

在所有 pod 中容器共享的 /etc/resolv.conf 文件中设置自定义 DNS 服务器。允许使用特殊的“none”选项,它禁用为 pod 创建 /etc/resolv.conf。

dns_opt

别名:dns_option

列表 / 元素=字符串

在所有 pod 中容器共享的 /etc/resolv.conf 文件中设置自定义 DNS 选项。

列表 / 元素=字符串

在所有 pod 中容器共享的 /etc/resolv.conf 文件中设置自定义 DNS 搜索域。

executable

字符串

如果不在运行 podman 的机器上的 $PATH 中,则指定 podman 可执行文件的路径。

默认值: "podman"

exit_policy

字符串

设置最后一个容器退出时 pod 的退出策略。支持的策略为 stop 和 continue

选项

  • "stop"

  • "continue"

generate_systemd

字典

为容器生成 systemd 单元文件。

默认值: {}

after

列表 / 元素=字符串

添加 systemd 单元 after (After=) 选项,该选项对依赖项列表和此服务之间的依赖项进行排序。

container_prefix

字符串

设置容器的 systemd 单元名称前缀。默认为“container”。

names

布尔值

在单元文件中使用容器的名称进行启动、停止和描述。默认为 true。

选项

  • false

  • true ← (默认)

new

布尔值

在单元启动时创建容器和 pod,而不是期望它们存在。默认为“false”。有关更多信息,请参阅 podman-generate-systemd(1)。

选项

  • false ← (默认)

  • true

no_header

布尔值

不生成包含元数据(例如 Podman 版本和时间戳)的标头。从 podman 3.1.0 版本开始。

选项

  • false ← (默认)

  • true

path

字符串

指定生成单元文件的目录的路径。此选项需要此参数。如果它不存在,则将创建该目录。

pod_prefix

字符串

设置 pod 的 systemd 单元名称前缀。默认为“pod”。

requires

列表 / 元素=字符串

设置 systemd 单元 requires (Requires=) 选项。类似于 wants,但声明更强的需求依赖关系。

restart_policy

字符串

为服务指定重启策略。重启策略必须是“no”、“on-success”、“on-failure”、“on-abnormal”、“on-watchdog”、“on-abort”或“always”之一。默认策略是“on-failure”。

选项

  • "no"

  • "on-success"

  • "on-failure"

  • "on-abnormal"

  • "on-watchdog"

  • "on-abort"

  • "always"

restart_sec

整数

设置 systemd 服务 restartsec 值。

separator

字符串

设置容器/pod 的名称/ID 与前缀之间的 systemd 单元名称分隔符。默认为“-”(短划线)。

start_timeout

整数

使用给定值覆盖容器的默认启动超时。

stop_timeout

别名:time

整数

使用给定值覆盖容器的默认停止超时。在 4.0 版本之前称为 `time`。

wants

列表 / 元素=字符串

添加 systemd 单元 wants (Wants=) 选项,表示此服务(弱)依赖于该选项。

gidmap

列表 / 元素=字符串

用户命名空间的 GID 映射。使用此标志将启用用户命名空间运行容器。它与 `userns` 和 `subgidname` 标志冲突。

gpus

字符串

要添加到容器的 GPU 设备('all' 表示传递所有 GPU)。

hostname

字符串

为 Pod 设置主机名。

infra

布尔值

创建一个 infra 容器并将其与 Pod 关联。infra 容器是一个轻量级容器,用于协调 Pod 的共享内核命名空间。默认为 true。

选项

  • false

  • true

infra_command

字符串

启动 infra 容器将运行的命令。默认为“/pause”。

infra_conmon_pidfile

字符串

将 infra 容器的 conmon 进程的 pid 写入文件。由于 conmon 在与 Podman 不同的进程中运行,因此在使用 systemd 管理 Podman 容器和 Pod 时,这是必要的。

infra_image

字符串

将为 infra 容器创建的镜像。默认为“k8s.gcr.io/pause:3.1”。

infra_name

字符串

将用于 Pod 的 infra 容器的名称。

ip

字符串

为 Pod 的共享网络设置静态 IP。

ip6

字符串

为 Pod 的共享网络设置静态 IPv6。

label

字典

向 Pod 添加元数据,传递标签键值对字典。

label_file

字符串

读取包含标签的行分隔文件。

mac_address

字符串

为 Pod 的共享网络设置静态 MAC 地址。

memory

字符串

设置内存限制。

单位可以是 b(字节)、k(KiB)、m(MiB)或 g(GiB)。

memory_swap

字符串

设置等于内存加交换空间的限制值。

单位可以是 b(字节)、k(KiB)、m(MiB)或 g(GiB)。

name

字符串 / 必需

为 Pod 分配名称。

network

列表 / 元素=字符串

设置 Pod 的网络模式。支持的值包括 bridge(默认)、host(不创建网络命名空间,Pod 中的所有容器都将使用主机网络)或要加入的 CNI 网络名称列表。

network_alias

别名:network_aliases

列表 / 元素=字符串

为 Pod 添加网络范围别名,为 Pod 加入的所有网络设置别名。要仅为特定网络设置名称,请使用 -`network` 选项下所述的别名选项。网络别名仅适用于 bridge 网络模式。此选项可以多次指定。

no_hosts

布尔值

禁用为 Pod 创建 /etc/hosts。

选项

  • false

  • true

pid

字符串

设置 Pod 的 PID 模式。默认为为 Pod 创建私有 PID 命名空间。需要通过 `share` 选项共享 PID 命名空间。

pod_id_file

字符串

将 Pod ID 写入文件。

publish

别名:ports

列表 / 元素=字符串

将端口或端口范围从 Pod 发布到主机。

quadlet_dir

path

写入 quadlet 文件的目录路径。对于 root 用户,默认为 /etc/containers/systemd/,对于非 root 用户,默认为 ~/.config/containers/systemd/

quadlet_file_mode

任意

quadlet 文件的权限。

可以将 quadlet_file_mode 指定为八进制数或符号模式(例如,u+rwxu=rw,g=r,o=r)。对于八进制数格式,必须添加前导零,以便 Ansible 的 YAML 解析器知道它是八进制数(例如 064401777),或者将其用引号括起来(例如 '644''1777'),以便 Ansible 接收到字符串并可以自行将字符串转换为数字。如果不遵循这些规则之一而直接给 Ansible 一个数字,最终将得到一个十进制数,这将导致意外的结果。

如果未指定 quadlet_file_mode 并且 quadlet 文件 **不存在**,则在设置新创建文件的模式时,将使用系统上的默认 umask

如果未指定 quadlet_file_mode 并且 quadlet 文件 **存在**,则将使用现有文件的模式。

指定 quadlet_file_mode 是确保文件以正确的权限创建的最佳方法。

quadlet_filename

字符串

要写入的 quadlet 文件名。默认为 *name* 值。

quadlet_options

列表 / 元素=字符串

quadlet 文件的选项。提供通常容器参数选项中缺少的内容,作为要添加的行列表。

recreate

布尔值

与 present 和 started 状态一起使用,强制重新创建现有 Pod。

选项

  • false ← (默认)

  • true

restart_policy

字符串

容器退出时要遵循的重启策略。

security_opt

列表 / 元素=字符串

Pod 的安全选项。

share

字符串

要共享的内核命名空间的逗号分隔列表。如果未指定或指定为“” ,则不共享任何命名空间。可选择的命名空间包括 ipc、net、pid、user、uts。

share_parent

布尔值

此布尔值决定进入 Pod 的所有容器是否都使用 Pod 作为其 cgroup 父级。Podman 中此选项的默认值为 true。

选项

  • false

  • true

shm_size

字符串

设置 /dev/shm 共享内存空间的大小。单位可以是 b(字节)、k(KiB)、m(MiB)或 g(GiB)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m。当大小为 0 时,对 Pod 使用的 IPC 内存量没有限制。

shm_size_systemd

字符串

systemd 特定 tmpfs 挂载点(例如 /run、/run/lock、/var/log/journal 和 /tmp)的大小。单位可以是 b(字节)、k(KiB)、m(MiB)或 g(GiB)。如果省略单位,则系统使用字节。如果省略大小,则默认为 64m。当大小为 0 时,使用量限制为主机可用内存的 50%。

state

字符串

此变量设置为状态

选项

  • "created" ← (默认)

  • "killed"

  • "restarted"

  • "absent"

  • "started"

  • "stopped"

  • "paused"

  • "unpaused"

  • "quadlet"

subgidname

字符串

来自 /etc/subgid 文件的 GID 映射名称。使用此标志将启用用户命名空间运行容器。此标志与 `userns` 和 `gidmap` 冲突。

subuidname

字符串

来自 /etc/subuid 文件的 UID 映射名称。使用此标志将启用用户命名空间运行容器。此标志与 `userns` 和 `uidmap` 冲突。

sysctl

字典

设置 Pod 的内核参数。

uidmap

列表 / 元素=字符串

使用提供的映射在新用户命名空间中运行容器。此选项与 `userns` 和 `subuidname` 选项冲突。此选项提供了一种将主机 UID 映射到容器 UID 的方法。可以多次传递它来映射不同的范围。

userns

字符串

设置 Pod 中所有容器的用户命名空间模式。它默认为 PODMAN_USERNS 环境变量。空值 (“”) 表示禁用用户命名空间。

uts

字符串

设置 Pod 的 UTS 命名空间模式。

volume

别名:volumes

列表 / 元素=字符串

创建绑定挂载。

volumes_from

列表 / 元素=字符串

从指定的容器挂载卷。

示例

# What modules does for example
- containers.podman.podman_pod:
    name: pod1
    state: started
    ports:
      - "4444:5555"

# Connect random port from localhost to port 80 on pod2
- name: Connect random port from localhost to port 80 on pod2
  containers.podman.podman_pod:
    name: pod2
    state: started
    publish: "127.0.0.1::80"

# Full workflow example with pod and containers
- name: Create a pod with parameters
  containers.podman.podman_pod:
    name: mypod
    state: created
    network: host
    share: net
    userns: auto
    security_opt:
      - seccomp=unconfined
      - apparmor=unconfined
    hostname: mypod
    dns:
      - 1.1.1.1
    volumes:
      - /tmp:/tmp/:ro
    label:
      key: cval
      otherkey: kddkdk
      somekey: someval
    add_host:
      - "google:5.5.5.5"

- name: Create containers attached to the pod
  containers.podman.podman_container:
    name: "{{ item }}"
    state: created
    pod: mypod
    image: alpine
    command: sleep 1h
    loop:
      - "container1"
      - "container2"

- name: Start pod
  containers.podman.podman_pod:
    name: mypod
    state: started
    network: host
    share: net
    userns: auto
    security_opt:
      - seccomp=unconfined
      - apparmor=unconfined
    hostname: mypod
    dns:
      - 1.1.1.1
    volumes:
      - /tmp:/tmp/:ro
    label:
      key: cval
      otherkey: kddkdk
      somekey: someval
    add_host:
      - "google:5.5.5.5"

# Create a Quadlet file for a pod
- containers.podman.podman_pod:
    name: qpod
    state: quadlet
    ports:
      - "4444:5555"
    volume:
      - /var/run/docker.sock:/var/run/docker.sock
    quadlet_dir: /custom/dir

返回值

常用返回值已在 此处 记录,以下是此模块独有的字段

描述

pod

字典

为给定 Pod 生成的 Pod 检查结果。

返回:始终

示例: {"CgroupParent": "user.slice", "CgroupPath": "user.slice/user-1000.slice/[email protected]/user.slice/....slice", "Containers": [{"Id": "37f960e6c8accc6b5b41945b1dcf03a28d3a366f7f37049748f18b21c44f577e", "Name": "a99a49b8fa77-infra", "State": "created"}], "CreateCgroup": true, "CreateCommand": ["podman", "pod", "create", "--name", "pod_name", "--infra=True", "--userns", "auto", "--security-opt", "seccomp=unconfined", "--security-opt", "apparmor=unconfined", "--hostname", "mypod", "--dns", "1.1.1.2", "--label", "key=cval", "--label", "otherkey=kddkdk", "--label", "somekey=someval", "--add-host", "google:5.5.5.5", "--volume", "/tmp/test//:/data2"], "CreateInfra": true, "Created": "2024-05-28T20:41:09.946926613+03:00", "ExitPolicy": "continue", "Hostname": "mypod", "Id": "a99a41b8fa77d8c7ff1c432a7a21bc0c2afd8c13b94a9d9b9b19b66ae97920c1", "InfraConfig": {"DNSOption": null, "DNSSearch": null, "DNSServer": ["1.1.1.2"], "HostAdd": ["google:5.5.5.5"], "HostNetwork": false, "NetworkOptions": null, "Networks": null, "NoManageHosts": false, "NoManageResolvConf": false, "PortBindings": {}, "StaticIP": "", "StaticMAC": "", "pid_ns": "private", "userns": "host", "uts_ns": "private"}, "InfraContainerID": "37f960e6c8accc6b5b41945b1dcf03a28d3a366f7f37049748f18b21c44f577e", "Labels": {"key": "cval", "otherkey": "kddkdk", "somekey": "someval"}, "LockNumber": 1, "Name": "pod_name", "NumContainers": 1, "SharedNamespaces": ["user", "uts", "ipc", "net"], "State": "Created", "mounts": [{"Destination": "/data2", "Driver": "", "Mode": "", "Options": ["nosuid", "nodev", "rbind"], "Propagation": "rprivate", "RW": true, "Source": "/tmp/test", "Type": "bind"}], "security_opt": ["seccomp=unconfined", "apparmor=unconfined"]}

作者

  • Sagi Shnaidman (@sshnaidm)