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.pod | Pod的GID映射配置 | 用于配置Pod的GID映射,用于在容器内部和外部之间映射用户组。 |
--gpus | GPU设备分配 | 允许将宿主机的GPU设备分配给容器使用,用于支持GPU加速的容器应用程序。 |
--hostname.pod | Pod的主机名配置 | 设置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.pod | Pod的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.pod | Pod的用户ID映射 | 为Pod设置用户ID映射,允许容器以不同于宿主机上的用户ID运行。这有助于隔离容器并限制其对宿主机的访问。 |
--userns.pod | Pod的用户命名空间 | 配置Pod的用户命名空间,使容器内的用户ID空间与宿主机上的用户ID空间分离。这增强了容器的安全性,并允许容器以不同的用户身份运行。 |
--uts.pod | Pod的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项目致力于包容性,这是开源的核心价值。在这里使用的master
和slave
挂载传播术语是有问题的,且具有分裂性的,需要改变。然而,这些术语目前在Linux内核中使用,并且必须按原样使用。当内核维护者纠正这种用法时,Podman将立即更新!