跳到主要内容

Podman Pod Create 命令介绍

Podman 是一个无守护进程的容器引擎,用于在 Linux 系统上管理 OCI 容器。Podman 允许用户以非 root 身份运行容器,并且与 Docker 的 CLI 非常相似,使得用户能够轻松地在 Podman 和 Docker 之间切换。Podman 也支持 Kubernetes 中的 pod 概念,允许用户将多个容器组合成一个逻辑单元进行管理。

podman pod create 命令用于在 Podman 中创建一个新的 pod。Pod 是一组共享网络和存储资源的容器集合,通过 pod,开发者可以更方便地管理和协调容器之间的交互。

语法

podman pod create [OPTIONS]

参数选项

  • --name-n:为新创建的 pod 指定一个名称。
  • --infra:指定是否创建基础设施容器。默认情况下,Podman 会为每个 pod 创建一个基础设施容器,用于管理 pod 中的其他容器。设置为 false 时不创建。
  • --infra-command:设置基础设施容器要运行的命令。
  • --publish-p:将主机上的端口映射到容器内的端口。格式为 hostPort:containerPort
  • --network-n:为 pod 指定网络配置或网络名称。可以指定多个网络,并为每个网络设置 IP 地址。
  • --share:指定要共享的内核命名空间列表,包括 cgroup、ipc、net、pid 和 uts。
  • --share-parent:确定是否使用 pod 作为所有容器的 cgroup 父级。
  • --label:为 pod 设置元数据标签。
  • --volume-v:为 pod 中的容器挂载卷。
  • --env-e:设置环境变量。
  • --quiet-q:静默模式,只输出 pod ID。
  • --format:指定输出格式。

示例

创建一个简单的 pod

podman pod create --name my-first-pod

创建一个带有特定网络的 pod

podman pod create --name my-networked-pod --network my-custom-network

创建一个带有端口映射的 pod

podman pod create --name my-port-mapped-pod --publish 8080:80

创建一个带有共享命名空间的 pod

podman pod create --name my-shared-pod --share ipc,net,uts

注意事项

在使用 podman pod create 命令时,开发者需要注意以下几点:

  • 创建一个pod之后,需要使用 podman pod start 命令来启动pod中的容器。仅仅创建pod并不会自动启动容器。
  • 如果要将新的容器添加到已经存在的pod中,应使用 podman run --pod 命令,并指定pod的ID或名称。
  • 要查看pod中正在运行的容器,可以使用 podman pod ps 命令。
  • 当不再需要某个pod及其内部的容器时,可以使用 podman pod rm 命令来删除它们。

Pod的标识

在Podman中,Pod可以通过以下三种方式被识别:

  • UUID长标识符:这是一个唯一的长字符串,如 "f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778"。
  • UUID短标识符:这是UUID长标识符的前部分,通常足够唯一地标识一个Pod,如 "f78375b1c487"。
  • 名称:通过 --name 选项为Pod指定一个名称,例如 "my-pod"。

每次创建一个新的Pod时,Podman都会为其生成一个UUID。如果创建Pod时没有使用 --name 选项指定名称,Podman会为其生成一个随机的字符串名称。这个名称在识别和管理Pod时非常有用。

Pod资源限制

Podman允许为Pod设置资源限制,这些限制通过显式地在Pod的cgroup父级中设置来实现。所有加入到Pod中的容器都将继承这些限制。然而,当容器加入到Pod时,可以覆盖这些资源限制。例如,如果通过 podman pod create --cpus=5 创建了一个Pod,然后指定 podman container create --pod=<pod_id|pod_name> --cpus=4 来创建一个容器,那么这个容器将使用较小的CPU限制。

请注意,那些指定了自己cgroup的容器(例如,通过 --cgroupns=host 参数创建的容器)将不会继承Pod级别的cgroup资源限制。这些容器将使用主机或其他命名空间的cgroup资源限制。

在使用 podman pod create 时,开发者应仔细考虑资源限制的设置,以确保Pod中的容器能够合理地共享和使用系统资源。

选项详细说明
--add-host允许为Pod中的所有容器添加自定义主机名到IP地址的映射。这对于覆盖或添加主机名解析非常有用。
--blkio-weight设定块I/O权重,用于限制容器对磁盘的访问带宽。权重值范围通常在10到1000之间,值越高,容器对磁盘的访问优先级越高。
--blkio-weight-device为特定的块设备设置块I/O权重,允许更精细地控制容器对特定磁盘设备的访问带宽。
--cgroup-parent为Pod中所有容器的cgroup指定一个父cgroup。这允许用户将Pod的cgroup组织在自定义的cgroup层次结构中。
--cpu-shares设置CPU共享权重,用于在多容器环境中分配CPU资源。权重越高,容器可以获得的CPU时间片就越多。默认值为1024,意味着每个容器默认具有相同的CPU访问优先级。
--cpus设置委派给Pod的总CPU数量。例如,--cpus=1.5表示Pod可以使用的CPU资源为1.5个核心。默认值为0.000,表示没有计算能力的限制。
--cpuset-cpus限制Pod可以使用的CPU集合。例如,--cpuset-cpus=0-2表示Pod只能使用CPU 0、1和2。这可以用于将Pod绑定到特定的物理CPU核心上。
--cpuset-mems限制Pod可以使用的内存节点集合。这在具有NUMA架构的系统上特别有用,可以确保Pod的内存访问局部性。
--device允许用户将主机上的设备映射到Pod中的容器。这对于需要直接访问硬件设备的容器(如GPU或特定类型的存储设备)非常有用。
--device-read-bps限制Pod中容器对设备的读取带宽(以字节/秒为单位)。这可以用于防止容器过度使用主机的I/O资源。
--device-write-bps限制Pod中容器对设备的写入带宽(以字节/秒为单位)。同样用于防止容器过度使用主机的I/O资源。
--dns在Pod中的所有容器之间共享的/etc/resolv.conf文件中设置自定义DNS服务器。这允许用户为Pod内的容器指定特定的DNS解析设置。
--dns-option在Pod中的所有容器之间共享的/etc/resolv.conf文件中设置自定义DNS选项。这可以用于配置特定的DNS查询行为,如超时或重试策略。
--dns-search在Pod中的所有容器之间共享的/etc/resolv.conf文件中设置自定义DNS搜索域。这可以影响容器内的主机名解析行为,使容器能够解析短主机名而无需完全限定的域名。

这些选项提供了丰富的配置能力,使开发者能够更精细地控制Pod和其内部容器的行为和资源使用。通过使用这些选项,开发者可以确保Pod满足特定的性能要求,并与其他系统组件安全、高效地交互。

--exit-policy=continue | stop

设置Pod中最后一个容器退出时的退出策略。支持的策略包括:

退出策略描述
continue当最后一个容器退出时,Pod通过保持其基础容器存活而继续运行。这是默认设置。
stop当最后一个容器退出时,Pod(包括其基础容器)将被停止。在kube play中使用。

通过这些选项,用户可以更加精细地控制Pod及其内部容器的行为和资源分配。

以下是根据您提供的信息生成的表格,其中包含了Podman命令中相关选项的中文翻译和解释:

选项中文翻译解释
--help, -h打印使用说明显示Podman命令的使用说明和选项列表。
--gidmap.podPod的GID映射配置用于配置Pod的GID映射,用于在容器内部和外部之间映射用户组。
--gpusGPU设备分配允许将宿主机的GPU设备分配给容器使用,用于支持GPU加速的容器应用程序。
--hostname.podPod的主机名配置设置Pod的主机名,用于在容器内部标识Pod的名称。
--infra创建基础设施容器创建一个基础设施容器,并将其与Pod关联,用于协调Pod的共享内核命名空间。
--infra-command基础设施容器的命令指定基础设施容器启动时要运行的命令。
--infra-conmon-pidfile基础设施容器的conmon进程PID文件路径指定基础设施容器的conmon进程的PID文件路径,用于记录进程的ID。
--infra-image=image基础设施容器的自定义镜像指定基础设施容器使用的自定义镜像,除非明确指定,否则Podman会构建自定义本地镜像。
--infra-name基础设施容器的名称指定基础设施容器的名称。
--ip指定Pod的IPv4地址手动指定Pod的IPv4地址。
--ip6指定Pod的IPv6地址手动指定Pod的IPv6地址。
--label为Pod设置标签为Pod设置键值对形式的标签,用于标识和管理Pod。
--label-file从文件中读取Pod的标签从文件中读取Pod的标签配置,文件包含键值对形式的标签定义。
--mac-address指定Pod的MAC地址手动指定Pod的MAC地址。
--memory限制Pod的内存使用量设置Pod的内存使用上限,防止Pod消耗过多的内存资源。
--memory-swap限制Pod的交换空间使用量设置Pod的交换空间使用上限,控制Pod在内存不足时使用交换空间的量。
--name, -n=name为Pod指定名称为Pod分配一个唯一的名称,方便后续的管理和引用。
--network指定Pod的网络配置配置Pod的网络设置,包括选择网络模式、设置网络别名等。
--network-alias为Pod设置网络别名为Pod设置网络别名,用于在容器内部和外部之间通过别名进行通信。
--no-hosts不继承宿主机的/etc/hosts文件指定Pod不继承宿主机的/etc/hosts文件内容,使Pod不继承宿主机的主机名解析。
--pid.podPod的PID命名空间配置配置Pod的PID命名空间设置,用于管理Pod内部进程的PID。
--pod-id-file=path将Pod ID写入文件允许用户指定一个文件路径,Podman会将创建的Pod的ID写入到该文件中。
--publish发布端口用于指定Pod的端口映射关系,使得宿主机的端口能够映射到Pod内部的容器端口上。
--replace替换现有Pod在尝试创建具有相同名称的Pod时,替换现有的Pod。
--restart重启策略设置Pod中所有容器的默认重启策略,定义容器退出时是否应重新启动。
--security-opt安全选项允许用户为Pod中的容器设置额外的安全选项,用于调整容器的安全配置。

请注意,表格中的解释是基于您提供的信息和通用理解进行的解释,可能不是完全准确或详尽无遗的。实际使用时,请参考Podman的官方文档以获取最准确和详细的信息。

--share=namespace

解释

此选项允许您指定一个逗号分隔的内核命名空间列表,这些命名空间将在Pod中的容器之间共享。如果没有指定或指定为空字符串,则不会共享任何命名空间,并且除非通过--infra=true明确指定,否则不会创建基础设施容器。可选择的命名空间包括cgroup、ipc、net、pid和uts。如果选项前缀为“+”,则该命名空间将追加到默认列表中。否则,它将替换默认列表。默认情况下,匹配Kubernetes的默认设置(ipc、net、uts)。

--share-parent

解释

此布尔值用于确定进入Pod的所有容器是否将Pod作为其cgroup父级。此选项的默认值为true。如果您希望共享cgroup命名空间而不是在Pod中使用cgroup父级,则应使用--share选项来共享cgroup命名空间。

注意

此选项与--share=cgroup选项冲突,因为--share=cgroup选项将Pod设置为cgroup父级,但同时将容器加入到与基础设施容器相同的cgroup命名空间中。在使用这两个选项时,需要注意它们之间的相互影响。

以下是这些选项的中文翻译以及在表格中附带的详细说明:

选项中文翻译详细说明
--shm-size共享内存大小设置Pod中容器可用的共享内存(/dev/shm)的大小。这对于需要大量共享内存的容器应用程序非常有用。
--shm-size-systemd通过systemd设置共享内存大小使用systemd的方式来指定Pod中容器的共享内存大小。这可以允许更细粒度的控制或与其他systemd配置集成。
--subgidname子组ID映射文件名指定一个包含子组ID映射的文件名。该文件定义了容器内用户ID到宿主机组ID的映射关系。
--subuidname子用户ID映射文件名指定一个包含子用户ID映射的文件名。该文件定义了容器内用户ID到宿主机用户ID的映射关系。
--sysctl设置系统调用允许设置内核参数(系统调用),以调整容器的网络、安全或其他系统级行为。
--uidmap.podPod的用户ID映射为Pod设置用户ID映射,允许容器以不同于宿主机上的用户ID运行。这有助于隔离容器并限制其对宿主机的访问。
--userns.podPod的用户命名空间配置Pod的用户命名空间,使容器内的用户ID空间与宿主机上的用户ID空间分离。这增强了容器的安全性,并允许容器以不同的用户身份运行。
--uts.podPod的UTS命名空间设置Pod的UTS命名空间,允许容器具有独立的主机名和域名。这对于网络配置和容器识别非常有用。
--volume挂载卷在Pod中的容器上挂载一个或多个卷。卷可以是来自宿主机的目录、其他容器或其他类型的存储资源,用于持久化数据或共享数据。
--volumes-from从其他容器挂载卷允许从另一个容器挂载其卷到当前Pod中的容器。这可以方便地在多个容器之间共享数据或配置。

这些选项提供了丰富的配置选项,使得Podman可以更灵活地管理容器和Pod,满足各种应用场景的需求。

*示例

创建一个具有名称的Pod。

podman pod create --name test

创建一个名为mypod的Pod。

podman pod create mypod

创建一个没有基础设施容器的Pod。

podman pod create --infra=false

创建一个具有要运行的基础设施容器命令的命名Pod。

podman pod create --infra-command /top toppod

在主机上创建具有已发布端口的Pod。

podman pod create --publish 8443:443

使用指定的网络配置创建Pod。

podman pod create --network slirp4netns:outbound_addr=127.0.0.1,allow_host_loopback=true

使用指定的网络创建Pod。

podman pod create --network pasta

在两个网络上创建Pod。

podman pod create --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10

另请参阅

podman(1), podman-pod(1), podman-kube-play(1), containers.conf(5), cgroups(7)

历史

2018年7月,最初由 Peter Hunt 整理

脚注

Podman项目致力于包容性,这是开源的核心价值。在这里使用的masterslave挂载传播术语是有问题的,且具有分裂性的,需要改变。然而,这些术语目前在Linux内核中使用,并且必须按原样使用。当内核维护者纠正这种用法时,Podman将立即更新!