名称

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 只支持四种卷类型:hostPathemptyDirpersistentVolumeClaimimage 卷类型。

  • 使用 hostPath 卷类型时,只支持 default (empty)DirectoryOrCreateDirectoryFileOrCreateFileSocketCharDeviceBlockDevice 子类型。当 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 kubepodman 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 的目录,其中包含一个名为 ContainerfileDockerfile 的文件,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.internalhost.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 的优先级高于 hostPorthostPort 的优先级高于 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 已设置,则使用其值。

  • 如果 usernscontainers.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 映射。

gidmappinguidmapping 中的主机 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)