第 13 章 使用 Podman 将容器传送到 OpenShift
您可以使用 YAML ("YAML Ain't Markup Language")格式生成容器和 pod 的可移植性描述。YAML 是一种用于描述配置数据的文本格式。
YAML 文件为:
- 可读。
- 易于生成。
- 可在环境间移植(例如,RHEL 和 OpenShift 之间)。
- 可移植编程语言。
- 方便使用(不需要在命令行中添加所有参数)。
使用 YAML 文件的原因:
- 您可以使用最小输入来重新运行本地编配的容器和 pod,这对于迭代开发非常有用。
-
您可以在另一台机器上运行相同的容器和 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 一节。
流程
列出与其关联的所有 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
使用 pod 名称或 ID 来生成 Kubernetes YAML 文件:
$ podman generate kube mypod > mypod.yaml
请注意,
podman generate
命令不反映任何可能附加到容器的逻辑卷管理器(LVM)逻辑卷或物理卷。显示
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: {}
其他资源
-
您系统上的
podman-generate-kube
手册页 - Podman:在本地容器运行时中管理 pod 和容器