NAME

Podman-Play-Kube-基于Kubernetes YAML创建容器、Pod或卷

SYNOPSIS

podman play kube [options] file.yml|-

DESCRIPTION

podman play kube 将读入Kubernetes YAML的结构化文件。然后,它将重新创建YAML中描述的容器、Pod或卷。然后启动Pod中的容器,并输出新Pod的ID或新卷的名称。如果将YAML文件指定为“-”,则 podman play kube 将从标准输入中读取YAML文件。使用 --down 命令行选项,它还能够拆卸上一次运行 podman play kube 。使用 --replace 命令行选项,它将拆除由上一次运行的 podman play kube 并使用Kubernetes YAML文件重新创建Pod。理想情况下,输入文件应该是由Podman创建的文件(参见podman-Generate-Kube(1))。这将保证进口的顺利和预期的结果。

目前支持的Kubernetes种类有:

  • 豆荚

  • 部署

  • PersistentVolumeClaim

  • ConfigMap

Kubernetes Pods or Deployments

Only two volume types are supported by play kube, the hostPath and persistentVolumeClaim volume types. For the hostPath volume type, only the default (empty), DirectoryOrCreate, Directory, FileOrCreate, File, and Socket subtypes are supported. The CharDevice and BlockDevice subtypes are not supported. Podman interprets the value of hostPath path as a file path when it contains at least one forward slash, otherwise Podman treats the value as the name of a named volume. When using a persistentVolumeClaim, the value for claimName is the name for the Podman named volume.

注意:当玩带有init容器的Kube YAML时,init容器将使用init类型值创建 always

注: 主机路径 Play Kube创建的卷类型将被赋予SELinux共享标签(Z),绑定装载不会重新标记(使用 chcon -t container_file_t -R <directory> )。

注:如果 :latest 标记时,Podman将尝试从注册表中提取图像。如果映像是使用Podman或Buildah在本地构建的,则它将具有 localhost 作为域名,在这种情况下,Podman将使用来自本地存储的图像,即使它具有 :latest 标签。

Kubernetes PersistentVolumeClaims

Kubernetes PersistentVolumeClaim代表一个名为VOLUME的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

Play Kube能够在给定正确的目录布局和容器文件的情况下即时构建映像。此选项目前还不适用于远程客户端,包括Mac和Windows(不包括WSL2)计算机。请考虑以下摘自YAML文件的内容:

apiVersion: v1
kind: Pod
metadata:
...
spec:
  containers:
  - command:
    - top
    - name: container
      value: podman
    image: foobar
...

如果有一个名为 foobar 在当前工作目录中包含名为的文件 ContainerfileDockerfile ,Podman Play Kube将构建该图像并为其命名 foobar 。此示例的目录结构示例如下所示:

|- mykubefiles
    |- myplayfile.yaml
    |- foobar
         |- Containerfile

该版本将考虑 foobar 作为生成的上下文目录。如果本地存储中有一个名为 foobar ,否则将不会生成映像 --build 使用了标志。使用 --build=false 以完全禁用生成。

Kubernetes ConfigMap

Kubernetes ConfigMap可以被称为Pod或部署中的环境变量或卷的来源。在Podman中,ConfigMap不是独立的对象;相反,当容器使用ConfigMap时,Podman将根据需要创建环境变量或卷。

例如,下面的YAML文档定义了ConfigMap,然后在Pod中使用它:

apiVersion: v1
kind: ConfigMap
metadata:
  name: foo
data:
    FOO: bar
---
apiVersion: v1
kind: Pod
metadata:
  name: foobar
spec:
  containers:
  - command:
    - top
    name: container-1
    image: foobar
    envFrom:
    - configMapRef:
        name: foo
        optional: false

因此,环境变量 FOO 将设置为 bar 对于容器 container-1

OPTIONS

--annotation = key=value

向容器或Pod添加批注。格式为Key=Value。这个 --annotation 选项可以多次设置。

--authfile = path

身份验证文件的路径。缺省值为${XDG_RUNTIME_DIR}/Containers/auth.json,它是使用 podman login 。如果在那里找不到授权状态,则检查$HOME/.docker/config.json,这是使用 docker login

注意:您还可以通过设置注册表_AUTH_FILE环境变量来覆盖身份验证文件的默认路径。 export REGISTRY_AUTH_FILE=path

--build

即使在本地存储中找到映像,也要构建映像。使用 --build=false 以完全禁用生成。(此选项不适用于远程Podman客户端)

--cert-dir = path

在以下位置使用证书 path (\ *.crt, * .cert、*.key)以连接到注册表。(默认:/etc/tainers/certs.d)详情请参考Containers-certs.d(5)。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机)

--configmap = path

在PATH中使用Kubernetes configmap YAML为Pod容器内的环境变量值提供源。(此选项不适用于远程Podman客户端)

注: --configmap 选项可以多次使用,或者可以使用逗号分隔的路径列表来传递多个Kubernetes figmap YAM。

--context-dir = path

使用 path 作为每个映像的构建上下文目录。要求--Build选项为真。(此选项不适用于远程Podman客户端)

--creds

这个 [用户名[:密码] ]如有需要,可用于向登记处进行身份验证。如果未提供其中一个或两个值,则会出现命令行提示符并可以输入值。输入密码时没有回显。

--down

撕毁前一轮运行创建的豆荚 play kube 。吊舱被停下来,然后被移走。创建的任何卷都保持不变。

--help-h

打印用法报表

--ip = IP地址

为Pod分配静态IP地址。当Play Kube创建多个Pod时,可以多次指定此选项。注意:当加入多个网络时,您应该使用 --network name:ip=<ip> 语法。

--log-driver =司机

为所有创建的容器设置日志记录驱动程序。

--log-opt = name = 价值

设置自定义日志记录配置。以下是 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

此选项当前仅受 新闻记者 日志驱动程序。

--mac-address = MAC地址

为Pod分配静态MAC地址。当Play Kube创建多个Pod时,可以多次指定此选项。注意:当加入多个网络时,您应该使用 --network name:mac=<mac> 语法。

--network = mode--net

更改Pod的网络模式。主机网络模式应在YAML文件中配置。有效 mode 值包括:

  • [bridge[:OPTIONS,...]] :在默认网桥上创建网络堆栈。这是Rootful Containers的默认设置。可以指定以下附加选项:

    • alias=name :为容器添加网络范围的别名。

    • ip=IPv4 :为此容器指定静态IPv4地址。

    • ip=IPv6 :为此容器指定静态IPv6地址。

    • mac=MAC :为此容器指定静态MAC地址。

    • interface_name :为容器内部创建的网络接口指定名称。

    例如,要设置静态IPv4地址和静态mac地址,请使用 --network bridge:ip=10.88.0.10,mac=44:33:22:11:00:99

  • <网络名称或ID> [:选项,...] :连接到用户定义的网络;这是由创建的网络中的网络名称或ID [podman network create] 。使用网络名称意味着使用网桥网络模式。可以指定上述桥接模式下描述的相同选项。您可以使用 --network 选项,以指定其他网络。

  • none :为容器创建网络命名空间,但不为其配置网络接口,因此容器没有网络连接。

  • 容器: id:重用另一个容器的网络堆栈。

  • ns: Path:要加入的网络命名空间的路径。

  • 私人 :为容器创建新的命名空间。这将使用 桥牌 Rootful Containers和 滑行4net 对于没有根基的人。

  • [slirp4netns[:OPTIONS,...]] :使用 滑行4net (1)创建用户网络堆栈。这是无根容器的默认设置。可以指定这些附加选项,也可以使用 network_cmd_options 在tainers.conf中:

    • allow_host_loopback=true|false :允许glirp4netn到达主机环回IP (10.0.2.2 )。默认值为FALSE。

    • mtu=MTU :指定要用于此网络的MTU。(默认为 65520 )。

    • cidr=CIDR :指定要用于此网络的IP范围。(默认为 10.0.2.0/24 )。

    • enable_ipv6=true|false :启用IPv6。默认值为True。(需要 outbound_addr6 )。

    • outbound_addr=INTERFACE :指定SLIP应绑定到的出站接口(仅限IPv4流量)。

    • outbound_addr=IPv4 :指定SILRP应绑定到的出站IPv4地址。

    • outbound_addr6=INTERFACE :指定SLIP应绑定到的出站接口(仅限IPv6流量)。

    • outbound_addr6=IPv6 :指定SILRP应绑定到的出站IPv6地址。

    • port_handler=rootlesskit :使用无根套件进行端口转发。默认值。注意:Rootless Kit将传入数据包的源IP地址更改为容器网络命名空间中的IP地址,通常 10.0.2.100 。如果您的应用程序需要真实的源IP地址,例如Web服务器日志,请使用glirp4netns端口处理程序。当连接到用户定义的网络时,无根工具包端口处理程序也用于无根容器。

    • port_handler=slirp4netns :使用glirp4netns端口转发,它比rootless kit慢,但保留了正确的源IP地址。此端口处理程序不能用于用户定义的网络。

--no-hosts

请勿为Pod创建/etc/hosts。默认情况下,Podman将管理/etc/hosts,添加容器自己的IP地址和来自 --add-host--no-hosts 禁用此选项,则图像的 /etc/host 将原封不动地保存下来。此选项与Kubernetes YAML中添加的主机冲突。

--quiet-q

在拉取图像时抑制输出信息

--replace

撕毁了由前一轮 play kube 并重新创造了豆荚。此选项用于根据Kubernetes YAML使现有Pod保持最新。

--seccomp-profile-root = path

Seccomp配置文件的目录路径(默认为“/var/lib/kubelet/seccomp”)。(此选项不适用于远程Podman客户端,包括Mac和Windows(不包括WSL2)计算机)

--start

创建Pod后启动Pod,设置为False将仅创建它。

--tls-verify

联系注册表时要求HTTPS并验证证书(默认为True)。如果明确设置为TRUE,则将使用TLS验证。如果设置为FALSE,则不会使用TLS验证。如果未指定,则将使用TLS验证,除非目标注册表在Registries.conf中列为不安全注册表。

EXAMPLES

重新创建Pod和容器,如名为 demo.yml

$ podman play kube demo.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

按照文件中的描述重新创建Pod和容器 demo.yml 发送到标准输入

$ cat demo.yml | podman play kube -
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

按照文件中的说明拆卸吊舱和容器 demo.yml

$  podman play kube --down demo.yml
Pods stopped:
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
Pods removed:
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

提供 configmap-foo.ymlconfigmap-bar.yml 作为容器内环境变量的来源。

$ podman play kube demo.yml --configmap configmap-foo.yml,configmap-bar.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

$ podman play kube demo.yml --configmap configmap-foo.yml --configmap configmap-bar.yml
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

使用静态IP创建连接到两个网络(称为Net1和net2)的Pod

$ podman play kube demo.yml --network net1:ip=10.89.1.5 --network net2:ip=10.89.10.10
52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

请考虑到,必须首先使用podman-network-create(1)创建CNI网络。

另请参阅

[podman(1)] , [podman-play(1)] , [podman-network-create(1)] , [podman-generate-kube(1)] , [containers-certs.d(5)]

HISTORY

2018年12月,最初由布伦特·鲍德(Brent Baude)汇编(在redhat.com网站上bbaude)