第 13 章 使用 Podman 将容器传送到 OpenShift

您可以使用 YAML ("YAML Ain't Markup Language")格式生成容器和 pod 的可移植性描述。YAML 是一种用于描述配置数据的文本格式。

YAML 文件为:

  • 可读。
  • 易于生成。
  • 可在环境间移植(例如,RHEL 和 OpenShift 之间)。
  • 可移植编程语言。
  • 方便使用(不需要在命令行中添加所有参数)。

使用 YAML 文件的原因:

  1. 您可以使用最小输入来重新运行本地编配的容器和 pod,这对于迭代开发非常有用。
  2. 您可以在另一台机器上运行相同的容器和 pod。例如,要在 OpenShift 环境中运行应用程序并确保应用程序正常工作。您可以使用 podman generate kube 命令来生成 Kubernetes YAML 文件。然后,在将生成的 YAML 文件传送到 Kubernetes 或 OpenShift 环境之前,您可以使用 podman play 命令来测试本地系统上 pod 和容器的创建情况。使用 podman play 命令,您也可以重新创建最初在 OpenShift 或 Kubernetes 环境中创建的 pod 和容器。
注意

podman kube play 命令支持 Kubernetes YAML 功能的子集。如需更多信息,请参阅 支持的 YAML 字段的支持矩阵

13.1. 使用 Podman 生成 Kubernetes YAML 文件

您可以创建具有一个容器的 pod,并使用 podman generate kube 命令生成 Kubernetes YAML 文件。

先决条件

  • container-tools 元数据包已安装。
  • pod 已创建。详情请参阅 创建 pod 一节。

流程

  1. 列出与其关联的所有 pod 和容器:

    $ podman ps -a --pod
    CONTAINER ID  IMAGE                                       COMMAND    CREATED                 STATUS                     PORTS  NAMES               POD
    5df5c48fea87  registry.access.redhat.com/ubi9/ubi:latest  /bin/bash  Less than a second ago  Up Less than a second ago         myubi               223df6b390b4
    3afdcd93de3e  k8s.gcr.io/pause:3.1                                   Less than a second ago  Up Less than a second ago         223df6b390b4-infra  223df6b390b4
  2. 使用 pod 名称或 ID 来生成 Kubernetes YAML 文件:

    $ podman generate kube mypod > mypod.yaml

    请注意,podman generate 命令不反映任何可能附加到容器的逻辑卷管理器(LVM)逻辑卷或物理卷。

  3. 显示 mypod.yaml 文件:

    $ cat mypod.yaml
    # Generation of Kubernetes YAML is still under development!
    #
    # Save the output of this file and use kubectl create -f to import
    # it into Kubernetes.
    #
    # Created with podman-1.6.4
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: "2020-06-09T10:31:56Z"
      labels:
    app: mypod
      name: mypod
    spec:
      containers:
      - command:
            - /bin/bash
            env:
            - name: PATH
                  value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
            - name: TERM
                  value: xterm
            - name: HOSTNAME
            - name: container
                  value: oci
            image: registry.access.redhat.com/ubi9/ubi:latest
            name: myubi
            resources: {}
            securityContext:
                  allowPrivilegeEscalation: true
                  capabilities: {}
                  privileged: false
                  readOnlyRootFilesystem: false
            tty: true
            workingDir: /
    status: {}

其他资源