名称¶
podman kube play - 基于 Kubernetes YAML 创建容器、Pod 和卷
概要¶
podman kube play [选项] file.yml|-|https://website.io/file.yml
描述¶
podman kube play 读取 Kubernetes YAML 的结构化文件。它重新创建 YAML 中描述的容器、Pod 或卷。然后启动 Pod 中的容器,并输出新 Pod 的 ID 或新卷的名称。如果 YAML 文件被指定为“ -”,则podman kube play
从 stdin 读取 YAML 文件。输入也可以是指向 YAML 文件的 URL,例如 https://podman.org.cn/demo.yml。podman kube play
从 URL 读取 YAML 并从中创建 Pod 和容器。
使用--down
命令行选项,它还可以拆除由 podman kube play
的先前运行创建的 Pod。
使用--replace
命令行选项,它将拆除由 podman kube play
的先前运行创建的 Pod(如果有)并使用 Kubernetes YAML 文件重新创建 Pod。
理想情况下,输入文件是由 Podman 命令创建的(请参阅 podman-kube-generate(1))。这保证了顺利的导入和预期的结果。
目前,支持的 Kubernetes 种类是
Pod
Deployment
PersistentVolumeClaim
ConfigMap
Secret
DaemonSet
Job
Kubernetes Pods 或 Deployments
kube play 只支持四种卷类型:hostPath、emptyDir、persistentVolumeClaim 和 image 卷类型。
使用 hostPath 卷类型时,只支持 default (empty)、DirectoryOrCreate、Directory、FileOrCreate、File、Socket、CharDevice 和 BlockDevice 子类型。当 hostPath path 的值包含至少一个正斜杠时,Podman 将其解释为文件路径,否则 Podman 将该值视为命名卷的名称。
使用 persistentVolumeClaim 时,claimName 的值为 Podman 命名卷的名称。
使用 emptyDir 卷时,Podman 会创建一个匿名卷,该卷附加到在 Pod 中运行的容器,并在 Pod 被删除后被删除。
使用 image 卷时,Podman 会创建一个具有空子路径的只读镜像卷(整个镜像被挂载)。镜像必须已存在本地。它仅在 rootful 模式下受支持。
注意:容器的默认重启策略是always
。可以通过在规范中设置 restartPolicy
字段来更改默认值。
注意:当使用包含 init 容器的 kube YAML 时,init 容器将使用 init 类型值 once
创建。要更改默认类型,请使用 io.podman.annotations.init.container.type
注释将类型设置为 always
。
注意:由 kube play 创建的 hostPath 卷类型被赋予 SELinux 共享标签 (z),绑定挂载不会被重新标记(使用 chcon -t container_file_t -R <directory>
)。
注意:要设置 Pod 的 userns,请在 Pod/Deployment 定义中使用 io.podman.annotations.userns 注释。例如,io.podman.annotations.userns=keep-id 注释告诉 Podman 创建一个用户命名空间,其中当前无根用户的 UID:GID 映射到容器中的相同值。这可以通过 --userns
标志覆盖。
注意:使用 io.podman.annotations.volumes-from 注释将一个容器的卷绑定挂载到另一个容器。您可以将来自多个源容器的卷挂载到目标容器。属于同一个 Pod 的源容器必须在 kube YAML 中的目标容器之前定义。注释格式为 io.podman.annotations.volumes-from/targetContainer: "sourceContainer1:mountOpts1;sourceContainer2:mountOpts2"
。
注意:如果使用 :latest
标签,Podman 会尝试从注册表中拉取镜像。如果镜像是使用 Podman 或 Buildah 本地构建的,它将具有 localhost
作为域,在这种情况下,即使它具有 :latest
标签,Podman 也会使用本地存储中的镜像。
注意:命令 podman play kube
是 podman kube play
的别名,执行相同的函数。
注意:命令 podman kube down
可用于停止和删除基于 podman kube play
用于创建它们的相同 Kubernetes YAML 的 Pod 或容器。
注意:要自定义在 podman kube play
期间创建的 infra 容器的名称,请在 Pod 定义中使用 io.podman.annotations.infra.name 注释。当从使用 --infra-name
标志设置的 Pod 生成 kube yaml 时,此注释会自动设置。
Kubernetes PersistentVolumeClaims
Kubernetes PersistentVolumeClaim 代表一个 Podman 命名卷。Podman 只需要 PersistentVolumeClaim 名称来创建卷。Kubernetes 注释可以用于利用 Podman 卷的可用选项。
volume.podman.io/driver
volume.podman.io/device
volume.podman.io/type
volume.podman.io/uid
volume.podman.io/gid
volume.podman.io/mount-options
volume.podman.io/import-source
volume.podman.io/image
使用 volume.podman.io/import-source
将注释值中指定的 tarball(.tar、.tar.gz、.tgz、.bzip、.tar.xz、.txz)的内容导入到创建的 Podman 卷中
Kube play 能够在给定正确的目录布局和 Containerfiles 的情况下动态构建镜像。此选项目前不适用于远程客户端,包括 Mac 和 Windows(不包括 WSL2)机器。考虑以下来自 YAML 文件的摘录
apiVersion: v1
kind: Pod
metadata:
...
spec:
containers:
- name: container
image: foobar
...
如果当前工作目录中有一个名为 foobar
的目录,其中包含一个名为 Containerfile
或 Dockerfile
的文件,Podman kube play 会构建该镜像并将其命名为 foobar
。此示例的示例目录结构如下所示
|- mykubefiles
|- myplayfile.yaml
|- foobar
|- Containerfile
构建将 foobar
视为构建的上下文目录。如果本地存储中有一个名为 foobar
的镜像,则除非使用 --build
标志,否则不会构建该镜像。使用 --build=false
完全禁用构建。
Kubernetes ConfigMap
Kubernetes ConfigMap 可以作为 Pod 或 Deployment 中环境变量或卷的来源。ConfigMap 在 Podman 中不是一个独立的对象;相反,当容器使用 ConfigMap 时,Podman 会根据需要创建环境变量或卷。
例如,以下 YAML 文档定义了一个 ConfigMap,然后在 Pod 中使用它
apiVersion: v1
kind: ConfigMap
metadata:
name: foo
data:
FOO: bar
---
apiVersion: v1
kind: Pod
metadata:
name: foobar
spec:
containers:
- name: container-1
image: foobar
envFrom:
- configMapRef:
name: foo
optional: false
结果是环境变量 FOO
被设置为 bar
用于容器 container-1
。
Kubernetes Secret
Kubernetes Secret 代表一个 Podman 命名秘密。Kubernetes Secret 被整体保存,可以作为 Pod 或 Deployment 中环境变量或卷的来源。
例如,以下 YAML 文档定义了一个 Secret,然后在 Pod 中使用它
kind: Secret
apiVersion: v1
metadata:
name: foo
data:
foo: YmFy # base64 for bar
---
apiVersion: v1
kind: Pod
metadata:
name: foobar
spec:
containers:
- name: container-1
image: foobar
env:
- name: FOO
valueFrom:
secretKeyRef:
name: foo
key: foo
结果是环境变量 FOO
被设置为 bar
用于容器 container-1
。
Automounting Volumes (deprecated)
注意:自动挂载注释已弃用。Kubernetes 具有对镜像卷的原生支持,应该使用它而不是此 podman 特定的注释。
如果给定了注释 io.podman.annotations.kube.image.automount/$ctrname
,则可以将镜像自动挂载到容器中。以下规则适用
镜像必须已存在本地。
镜像必须至少有一个卷指令。
卷指令给定的路径将从镜像挂载到容器中。例如,一个在
/test/test_dir
处有卷的镜像将在容器的/test/test_dir
处挂载/test/test_dir
。可以指定多个镜像。如果多个镜像在特定路径下都有卷,则指定最后一个镜像将起作用。
镜像始终以只读方式挂载。
要挂载的镜像在注释“io.podman.annotations.kube.image.automount/$ctrname”中定义,以分号分隔的列表形式。它们被挂载到 Pod 中的单个容器中,而不是整个 Pod 中。如果需要额外的挂载,则可以为其他容器指定注释。
选项¶
--annotation=key=value¶
为容器或 Pod 添加注释。此选项可以设置多次。
--authfile=path¶
身份验证文件的路径。在 Linux 上默认为 ${XDG_RUNTIME_DIR}/containers/auth.json
,在 Windows/macOS 上默认为 $HOME/.config/containers/auth.json
。该文件由 podman login 创建。如果在那里找不到授权状态,则会检查 $HOME/.docker/config.json
,该文件是使用 docker login 设置的。
注意:还可以通过设置 REGISTRY_AUTH_FILE
环境变量来覆盖身份验证文件的默认路径。这可以通过 export REGISTRY_AUTH_FILE=path 来完成。
--build¶
即使在本地存储中找到镜像,也构建镜像。使用 --build=false
完全禁用构建。(此选项不适用于远程 Podman 客户端)
注意:您还可以通过设置 BUILDAH_ISOLATION 环境变量来覆盖默认的隔离类型。export BUILDAH_ISOLATION=oci。有关更多信息,请参阅 podman-build.1.md。
--cert-dir=path¶
使用 path 中的证书(*.crt、*.cert、*.key)连接到注册表。(默认:/etc/containers/certs.d)有关详细信息,请参阅 containers-certs.d(5)。(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器)
--configmap=path¶
使用 path 中的 Kubernetes configmap YAML 文件作为 Pod 中容器内环境变量值的来源。(此选项不适用于远程 Podman 客户端)
注意:--configmap 选项可以多次使用,或者可以使用逗号分隔的路径列表来传递多个 Kubernetes configmap YAML 文件。YAML 文件可以是多文档 YAML 格式。但是,它必须仅包含 configmaps
--context-dir=path¶
使用 path 作为每个镜像的构建上下文目录。要求 --build 选项为 true。(此选项不适用于远程 Podman 客户端)
--creds=[username[:password]]¶
用于验证注册表(如果需要)的 [username[:password]]。如果一个或两个值都没有提供,则会显示命令行提示,您可以输入值。密码在输入时不会显示。
请注意,指定的凭据仅用于验证目标注册表。它们不用于镜像或注册表重写时(参见 containers-registries.conf(5)
);要验证这些凭据,请考虑使用 containers-auth.json(5)
文件。
--force¶
作为 --down 的一部分,拆除链接到 PersistentVolumeClaims 的卷
--help, -h¶
打印用法说明
--ip=IP address¶
为 Pod 分配一个静态 IP 地址。当 kube play 创建多个 Pod 时,此选项可以指定多次。注意:当加入多个网络时,使用 --network name:ip=<ip> 语法。
--log-driver=driver¶
为所有创建的容器设置日志驱动程序。
--log-opt=name=value¶
特定于日志驱动程序的选项。
设置自定义日志记录配置。支持以下 name:
path:指定日志文件的路径(例如 --log-opt path=/var/log/container/mycontainer.json);
max-size:指定日志文件的最大大小(例如 --log-opt max-size=10mb);
tag:为容器指定一个自定义日志标签(例如 --log-opt tag=”{{.ImageName}}”。它支持与 podman inspect --format 相同的键。此选项目前仅由 journald 日志驱动程序支持。
--mac-address=MAC address¶
为 Pod 分配一个静态 MAC 地址。当 kube play 创建多个 Pod 时,此选项可以指定多次。注意:当加入多个网络时,使用 --network name:mac=<mac> 语法。
--network=mode, --net¶
设置 Pod 的网络模式。
有效的 mode 值为
bridge[:OPTIONS,…]:在默认网桥上创建一个网络栈。这是有根容器的默认值。可以指定以下附加选项
alias=name:为容器添加网络范围别名。
ip=IPv4:为该容器指定一个静态 IPv4 地址。
ip6=IPv6:为该容器指定一个静态 IPv6 地址。
mac=MAC:为该容器指定一个静态 MAC 地址。
interface_name=name:为容器内创建的网络接口指定一个名称。
例如,要设置一个静态 ipv4 地址和一个静态 mac 地址,请使用
--network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99
。<network name or ID>[:OPTIONS,…]:连接到用户定义的网络;这是通过 podman network create 创建的网络的网络名称或 ID。可以指定上述网桥模式下描述的相同选项。使用 --network 选项多次以指定其他网络。
为了向后兼容,还可以指定第一个 --network 参数上的逗号分隔的网络,但是这会阻止您使用上述网桥部分中描述的选项。none:为容器创建一个网络命名空间,但不要为其配置网络接口,因此容器没有网络连接。
container:id:重用另一个容器的网络栈。
host:不创建网络命名空间,容器使用主机的网络。注意:主机模式允许容器完全访问本地系统服务,例如 D-bus,因此被认为是不安全的。
ns:path:要加入的网络命名空间的路径。
private:为容器创建一个新的命名空间。这对于有根容器使用 bridge 模式,对于无根容器使用 slirp4netns 模式。
slirp4netns[:OPTIONS,…]:使用 slirp4netns(1) 创建用户网络栈。可以指定以下附加选项,它们也可以使用容器.conf 中的
network_cmd_options
设置allow_host_loopback=true|false:允许 slirp4netns 访问主机回环 IP(默认值为 10.0.2.2 或从 slirp4netns cidr 子网更改后的第二个 IP,请参阅下面的 cidr 选项)。默认值为 false。
mtu=MTU:指定要用于该网络的 MTU。(默认值为
65520
)。cidr=CIDR:指定要用于该网络的 IP 范围。(默认值为
10.0.2.0/24
)。enable_ipv6=true|false:启用 IPv6。默认值为 true。(对于
outbound_addr6
来说是必需的)。outbound_addr=INTERFACE:指定 slirp 绑定的出站接口(仅限 ipv4 流量)。
outbound_addr=IPv4:指定 slirp 绑定的出站 ipv4 地址。
outbound_addr6=INTERFACE:指定 slirp 绑定的出站接口(仅限 ipv6 流量)。
outbound_addr6=IPv6:指定 slirp 绑定的出站 ipv6 地址。
port_handler=rootlesskit:使用 rootlesskit 进行端口转发。默认值。
注意:Rootlesskit 会将传入数据包的源 IP 地址更改为容器网络命名空间中的 IP 地址,通常为10.0.2.100
。如果应用程序需要实际的源 IP 地址,例如 web 服务器日志,请使用 slirp4netns 端口处理程序。当连接到用户定义的网络时,rootlesskit 端口处理程序也用于无根容器。port_handler=slirp4netns:使用 slirp4netns 端口转发,它比 rootlesskit 慢,但会保留正确的源 IP 地址。此端口处理程序不能用于用户定义的网络。
pasta[:OPTIONS,…]:使用 pasta(1) 创建用户模式网络栈。
这是无根容器的默认值,并且仅在无根模式下支持。
默认情况下,IPv4 和 IPv6 地址和路由以及 Pod 接口名称都从主机复制。如果未配置端口转发,则在两侧(init 命名空间或容器命名空间)绑定服务时,端口将动态转发。端口转发保留原始源 IP 地址。pasta(1) 中描述的选项可以作为以逗号分隔的参数指定。
在 pasta(1) 选项方面,--config-net 默认情况下被提供,以便在容器启动时配置网络,并且 --no-map-gw 也默认被假设,以避免使用网关地址从容器直接访问主机。后者可以通过在 pasta 特定的选项中传递 --map-gw 来覆盖(尽管它不是实际的 pasta(1) 选项)。
此外,如果分别没有配置从主机到容器的 TCP 或 UDP 端口转发,则会传递 -t none 和 -u none,以禁用基于绑定端口的自动端口转发。类似地,-T none 和 -U none 用于禁用从容器到主机的相同功能。
一些示例pasta:--map-gw:允许容器使用网关地址直接到达主机。
pasta:--mtu,1500:为容器中的 tap 接口指定 1500 字节 MTU。
pasta:--ipv4-only,-a,10.0.2.0,-n,24,-g,10.0.2.2,--dns-forward,10.0.2.3,-m,1500,--no-ndp,--no-dhcpv6,--no-dhcp,相当于默认的 slirp4netns(1) 选项:禁用 IPv6,为容器中的
tap0
接口分配10.0.2.0/24
,网关为10.0.2.3
,启用可在10.0.2.3
访问的 DNS 转发器,将 MTU 设置为 1500 字节,禁用 NDP、DHCPv6 和 DHCP 支持。pasta:-I,tap0,--ipv4-only,-a,10.0.2.0,-n,24,-g,10.0.2.2,--dns-forward,10.0.2.3,--no-ndp,--no-dhcpv6,--no-dhcp,相当于默认的 slirp4netns(1) 选项以及 Podman 覆盖:与上面相同,但将 MTU 保留为 65520 字节
pasta:-t,auto,-u,auto,-T,auto,-U,auto:基于从主机和容器两侧观察到的绑定端口启用自动端口转发
pasta:-T,5201:启用从容器到主机的 TCP 端口 5201 的转发,使用环回接口而不是 tap 接口以提高性能
当没有指定网络选项并且 YAML 文件中未配置 host 网络模式时,将创建一个新的网络堆栈,并且 Pod 会附加到该堆栈,从而实现 Pod 之间的通信。
--no-hosts¶
不要修改 Pod 中的 /etc/hosts
文件。
Podman 默认情况下控制 Pod 的 /etc/hosts
文件,并添加容器名称(参见 --name 选项)和主机名(参见 --hostname 选项)的条目、内部 host.containers.internal
和 host.docker.internal
主机,以及使用 --add-host 选项添加的任何主机名。有关详细信息,请参阅 --add-host 选项。传递 --no-hosts 会禁用此功能,以便图像的 /etc/hosts
文件保持不变。可以通过在 containers.conf
中设置 no_hosts=true 来在全局范围内实现相同的效果。
此选项与 Kubernetes YAML 中添加的主机冲突。
--publish=[[ip:][hostPort]:]containerPort[/protocol]¶
在 YAML 文件中定义或覆盖端口定义。
YAML 文件和命令行中的端口列表将合并。匹配是通过使用 containerPort 字段来完成的。如果 YAML 文件和选项中都存在 containerPort,则后者优先。
--publish-all¶
将此选项设置为 true
将使所有端口暴露给主机,即使仅通过 K8 YAML 中的 containerPort 指定。在哪个端口将被暴露方面,--publish 的优先级高于 hostPort,hostPort 的优先级高于 containerPort。
如果设置为 false
(这是默认值),则仅通过 hostPort 或 --publish 定义的端口会在主机上发布。
--quiet, -q¶
拉取镜像时抑制输出信息
--replace¶
拆除由 kube play
的先前运行创建的 Pod,然后重新创建 Pod。此选项用于根据 Kubernetes YAML 保持现有 Pod 的最新状态。
--seccomp-profile-root=path¶
seccomp 配置文件目录路径(默认:“/var/lib/kubelet/seccomp”)。(此选项不适用于远程 Podman 客户端,包括 Mac 和 Windows(不包括 WSL2)机器)
--start¶
创建 Pod 后启动它,设置为 false 仅创建它。
--tls-verify¶
在联系注册表时要求 HTTPS 并验证证书(默认:true)。如果显式设置为 true,则使用 TLS 验证。如果设置为 false,则不使用 TLS 验证。如果未指定,则使用 TLS 验证,除非目标注册表在 containers-registries.conf(5) 中列为不安全的注册表
--userns=mode¶
设置容器的用户命名空间模式。
如果未设置 --userns
,则默认值将按如下方式确定。
如果设置了
--pod
,则忽略--userns
并使用 Pod 的用户命名空间。如果环境变量 PODMAN_USERNS 已设置,则使用其值。
如果
userns
在containers.conf
中指定,则使用此值。否则,假设
--userns=host
。
--userns=""
(即空字符串)是 --userns=host
的别名。
此选项与 --gidmap、--uidmap、--subuidname 和 --subgidname 不兼容。
无根用户 --userns=键映射
键 |
主机用户 |
容器用户 |
---|---|---|
auto |
$UID |
nil(主机用户 UID 未映射到容器中。) |
host |
$UID |
0(默认用户帐户映射到容器中的 root 用户。) |
keep-id |
$UID |
$UID(将用户帐户映射到容器中相同的 UID。) |
keep-id:uid=200,gid=210 |
$UID |
200:210(将用户帐户映射到容器中指定的 UID、GID 值。) |
nomap |
$UID |
nil(主机用户 UID 未映射到容器中。) |
有效的 mode 值为
auto[:OPTIONS,…]: 自动创建一个唯一的用户命名空间。
rootful mode
:--userns=auto
标志要求用户名称 containers 在 /etc/subuid 和 /etc/subgid 文件中指定,并具有 Podman 容器允许分配的未使用子用户 ID 范围。Example: `containers:2147483647:2147483648`.
rootless mode
:将使用 /etc/subuid 和 /etc/subgid 文件中的用户范围。请注意,在不使用 --userns=auto 的情况下运行单个容器将使用整个 UID 范围,并且不允许进一步细分。参见 subuid(5)。
Podman 从 containers
子用户 ID 中分配唯一的 UID 和 GID 范围。范围的大小基于图像中所需的 UID 数量。可以通过 size
选项覆盖 UID 和 GID 的数量。
选项 --userns=keep-id
使用用户的所有 subuid 和 subgid。选项 --userns=nomap
使用用户的除用户自身 ID 之外的所有 subuid 和 subgid。只要存在任何使用 --userns=keep-id
或 --userns=nomap
启动的容器,启动新容器时使用 --userns=auto
就无法正常工作。
有效的 auto
选项
gidmapping=CONTAINER_GID:HOST_GID:SIZE:强制在用户命名空间中存在 GID 映射。
size=SIZE:为自动用户命名空间指定显式大小。例如
--userns=auto:size=8192
。如果未指定size
,则auto
会估计用户命名空间的大小。uidmapping=CONTAINER_UID:HOST_UID:SIZE:强制在用户命名空间中存在 UID 映射。
gidmapping 和 uidmapping 中的主机 UID 和 GID 可以选择性地以 @
符号为前缀。在这种情况下,podman 会查找与主机 ID 对应的中间 ID,并将找到的中间 ID 映射到容器 ID。有关详细信息,请参阅 --uidmap。
container:id:加入指定容器的用户命名空间。
host 或 “”(空字符串):在调用者的用户命名空间中运行。在容器中运行的进程对主机的权限与调用用户启动的任何其他进程相同。
keep-id:创建一个用户命名空间,其中当前用户的 UID:GID 映射到容器中的相同值。对于由 root 创建的容器,当前映射被创建到新的用户命名空间中。
有效的 keep-id
选项
uid=UID:覆盖容器中用于将当前用户映射到的 UID。
gid=GID:覆盖容器中用于将当前用户映射到的 GID。
nomap:创建一个用户命名空间,其中当前无根用户的 UID:GID 未映射到容器中。对于由 root 用户创建的容器,此选项不允许使用。
ns:namespace:在给定的现有用户命名空间中运行 Pod。
--wait, -w¶
在前景中运行 Pod 和容器。默认值为 false。
您随时可以在另一个 shell 中运行 podman pod ps
来查看正在运行的 Pod 和容器的列表。
在 tty 模式下附加时,您可以通过按 Ctrl-C 或接收任何其他中断信号来杀死 Pod 和容器。
使用 podman kube play
创建的所有 Pod、容器和卷将在退出时删除。
示例¶
重新创建指定主机 YAML 文件中描述的 Pod 和容器。
$ podman kube play demo.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
重新创建发送到 stdin 的 YAML 文件中指定的 Pod 和容器。
$ cat demo.yml | podman kube play -
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
拆除指定 YAML 文件中描述的 Pod 和容器。
$ podman kube play --down demo.yml
Pods stopped:
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
Pods removed:
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
提供多个 configmap 文件作为指定 Pod 和容器中环境变量的来源。
$ podman kube play demo.yml --configmap configmap-foo.yml,configmap-bar.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
$ podman kube play demo.yml --configmap configmap-foo.yml --configmap configmap-bar.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
创建一个连接到两个网络的 Pod,每个网络都有一个静态 IP。
$ podman kube play demo.yml --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
请注意,必须首先使用 podman-network-create(1) 创建网络。
从指向 YAML 文件的 URL 创建和拆除。
$ podman kube play https://podman.org.cn/demo.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
$ podman kube play --down https://podman.org.cn/demo.yml
Pods stopped:
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
Pods removed:
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
podman kube play --down
如果 URL 指向的 YAML 文件已被更改或修改,则无法使用 URL。
Podman Kube Play 支持¶
本文档概述了 **podman kube play** 命令当前支持的 kube yaml 字段。
注意:**N/A** 表示该选项无法在单节点 Podman 环境中支持。
Pod 字段¶
字段 |
支持 |
---|---|
containers |
✅ |
initContainers |
✅ |
imagePullSecrets |
no |
enableServiceLinks |
no |
os.name |
no |
volumes |
✅ |
nodeSelector |
N/A |
nodeName |
N/A |
affinity.nodeAffinity |
N/A |
affinity.podAffinity |
N/A |
affinity.podAntiAffinity |
N/A |
tolerations.key |
N/A |
tolerations.operator |
N/A |
tolerations.effect |
N/A |
tolerations.tolerationSeconds |
N/A |
schedulerName |
N/A |
runtimeClassName |
no |
priorityClassName |
no |
priority |
no |
topologySpreadConstraints.maxSkew |
N/A |
topologySpreadConstraints.topologyKey |
N/A |
topologySpreadConstraints.whenUnsatisfiable |
N/A |
topologySpreadConstraints.labelSelector |
N/A |
topologySpreadConstraints.minDomains |
N/A |
restartPolicy |
✅ |
terminationGracePeriodSeconds |
✅ |
activeDeadlineSeconds |
no |
readinessGates.conditionType |
no |
hostname |
✅ |
setHostnameAsFQDN |
no |
subdomain |
no |
hostAliases.hostnames |
✅ |
hostAliases.ip |
✅ |
dnsConfig.nameservers |
✅ |
dnsConfig.options.name |
✅ |
dnsConfig.options.value |
✅ |
dnsConfig.searches |
✅ |
dnsPolicy |
no |
hostNetwork |
✅ |
hostPID |
✅ |
hostIPC |
✅ |
shareProcessNamespace |
✅ |
serviceAccountName |
no |
automountServiceAccountToken |
no |
securityContext.runAsUser |
✅ |
securityContext.runAsNonRoot |
no |
securityContext.runAsGroup |
✅ |
securityContext.supplementalGroups |
✅ |
securityContext.fsGroup |
no |
securityContext.fsGroupChangePolicy |
no |
securityContext.seccompProfile.type |
no |
securityContext.seccompProfile.localhostProfile |
no |
securityContext.seLinuxOptions.level |
✅ |
securityContext.seLinuxOptions.role |
✅ |
securityContext.seLinuxOptions.type |
✅ |
securityContext.seLinuxOptions.user |
✅ |
securityContext.sysctls.name |
✅ |
securityContext.sysctls.value |
✅ |
securityContext.windowsOptions.gmsaCredentialSpec |
no |
securityContext.windowsOptions.hostProcess |
no |
securityContext.windowsOptions.runAsUserName |
no |
容器字段¶
字段 |
支持 |
---|---|
name |
✅ |
image |
✅ |
imagePullPolicy |
✅ |
command |
✅ |
args |
✅ |
workingDir |
✅ |
ports.containerPort |
✅ |
ports.hostIP |
✅ |
ports.hostPort |
✅ |
ports.name |
✅ |
ports.protocol |
✅ |
env.name |
✅ |
env.value |
✅ |
env.valueFrom.configMapKeyRef.key |
✅ |
env.valueFrom.configMapKeyRef.name |
✅ |
env.valueFrom.configMapKeyRef.optional |
✅ |
env.valueFrom.fieldRef |
✅ |
env.valueFrom.resourceFieldRef |
✅ |
env.valueFrom.secretKeyRef.key |
✅ |
env.valueFrom.secretKeyRef.name |
✅ |
env.valueFrom.secretKeyRef.optional |
✅ |
envFrom.configMapRef.name |
✅ |
envFrom.configMapRef.optional |
✅ |
envFrom.prefix |
no |
envFrom.secretRef.name |
✅ |
envFrom.secretRef.optional |
✅ |
volumeMounts.mountPath |
✅ |
volumeMounts.name |
✅ |
volumeMounts.mountPropagation |
no |
volumeMounts.readOnly |
✅ |
volumeMounts.subPath |
✅ |
volumeMounts.subPathExpr |
no |
volumeDevices.devicePath |
no |
volumeDevices.name |
no |
resources.limits |
✅ |
resources.requests |
✅ |
lifecycle.postStart |
no |
lifecycle.preStop |
no |
terminationMessagePath |
no |
terminationMessagePolicy |
no |
livenessProbe |
✅ |
readinessProbe |
no |
startupProbe |
no |
securityContext.runAsUser |
✅ |
securityContext.runAsNonRoot |
no |
securityContext.runAsGroup |
✅ |
securityContext.readOnlyRootFilesystem |
✅ |
securityContext.procMount |
✅ |
securityContext.privileged |
✅ |
securityContext.allowPrivilegeEscalation |
✅ |
securityContext.capabilities.add |
✅ |
securityContext.capabilities.drop |
✅ |
securityContext.seccompProfile.type |
no |
securityContext.seccompProfile.localhostProfile |
no |
securityContext.seLinuxOptions.level |
✅ |
securityContext.seLinuxOptions.role |
✅ |
securityContext.seLinuxOptions.type |
✅ |
securityContext.seLinuxOptions.user |
✅ |
securityContext.windowsOptions.gmsaCredentialSpec |
no |
securityContext.windowsOptions.hostProcess |
no |
securityContext.windowsOptions.runAsUserName |
no |
stdin |
no |
stdinOnce |
no |
tty |
no |
持久卷声明字段¶
字段 |
支持 |
---|---|
volumeName |
no |
storageClassName |
✅ |
volumeMode |
no |
accessModes |
✅ |
selector |
no |
resources.limits |
no |
resources.requests |
✅ |
ConfigMap 字段¶
字段 |
支持 |
---|---|
binaryData |
✅ |
data |
✅ |
immutable |
no |
部署字段¶
字段 |
支持 |
---|---|
replicas |
✅ (实际副本数量被忽略并设置为 1) |
selector |
✅ |
template |
✅ |
minReadySeconds |
no |
strategy.type |
no |
strategy.rollingUpdate.maxSurge |
no |
strategy.rollingUpdate.maxUnavailable |
no |
revisionHistoryLimit |
no |
progressDeadlineSeconds |
no |
paused |
no |
守护进程集字段¶
字段 |
支持 |
---|---|
selector |
✅ |
template |
✅ |
minReadySeconds |
no |
strategy.type |
no |
strategy.rollingUpdate.maxSurge |
no |
strategy.rollingUpdate.maxUnavailable |
no |
revisionHistoryLimit |
no |
作业字段¶
字段 |
支持 |
---|---|
activeDeadlineSeconds |
no |
selector |
no (由 k8s 自动设置) |
template |
✅ |
backoffLimit |
no |
completionMode |
no |
completions |
no (使用 kube generate 设置为 1) |
manualSelector |
no |
parallelism |
no (使用 kube generate 设置为 1) |
podFailurePolicy |
no |
suspend |
no |
ttlSecondsAfterFinished |
no |
另请参阅¶
podman(1), podman-kube(1), podman-kube-down(1), podman-network-create(1), podman-kube-generate(1), podman-build(1), containers-certs.d(5)