注意:
- Oracle 提供的免费实验室环境中提供了此教程。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成实验室时,请将这些值替换为特定于云环境的值。
使用 Podman 和 Oracle Cloud Native Environment 部署 Kubernetes 工作负载
简介
Podman kube provides developers and administrators with a way to test Kubernetes workloads using Podman before deploying them to a Kubernetes cluster.podman kube
命令用于从现有的 Podman 容器或 Pods 生成符合 Kubernetes 的 YAML,或者从 Kubernetes YAML 文件创建容器/pod。这提供了一种方便的方式来轻松在 Podman 和 Kubernetes 环境之间转换,从而利用这两个生态系统的优势来减少开发和测试周期。
注:podman kube play
命令可读取任何有效的 Kubernetes YAML 文件,并在本地运行的 Podman 实例上启动 YAML 文件中定义的 pod、容器或卷。但是,并非所有 Kubernetes YAML 文件类型都受支持;当前支持的 Kubernetes 类型包括:
- 云平台
- 部署
- PersistentVolumeClaim
- ConfigMap
- 密钥
- DaemonSet
- 职位
podman kube play
命令当前支持的 Kubernetes YAML 字段的更详细列表位于此处。
Podman 可以使用 podman kube apply
命令将支持的 Kubernetes YAML 文件应用于 Kubernetes 集群。这些步骤适用于任何 Kubernetes 集群。但是,我们建议将 Oracle Cloud Native Environment 作为 Kubernetes 部署选项。有关详细信息,请参阅 Oracle Cloud Native Environment 文档。
注:本教程演示如何使用 Podman 生成 Kubernetes YAML 文件,并随后说明如何将它们部署到 Kubernetes 集群。必须使用 kubectl
命令完成对已部署对象的任何进一步管理。有关使用 kubectl
的更多信息,请参见上游文档。
目标
在本教程中,您将学习:
- 使用 Kubernetes YAML 在 Podman 上创建和运行 Pod。
- 使用 Podman 生成 Kubernetes YAML。
- 使用 Podman Kube 将 Kubernetes YAML 文件部署到 Kubernetes 集群。
先决条件
- 安装 Oracle Cloud Native Environment (Oracle CNE)
- 单个控制节点和一个 Worker 节点
- 已安装 Podman
配置 Oracle Cloud Native Environment
注:如果在您自己的租户中运行,请在部署实验环境之前阅读 linux-virt-labs
GitHub 项目 README.md 并完成先决条件。
-
在 Luna Desktop 上打开一个终端。
-
克隆
linux-virt-labs
GitHub 项目。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
转到工作目录。
cd linux-virt-labs/ocne2
-
安装所需集合。
ansible-galaxy collection install -r requirements.yml
-
部署实验室环境。
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e install_ocne_rpm=true -e create_ocne_cluster=true -e "ocne_cluster_node_options='-n 1 -w 1'"
免费的实验环境需要额外的变量
local_python_interpreter
,该变量为在 localhost 上运行的播放设置ansible_python_interpreter
。此变量是必需的,因为环境安装了适用于 Python 的 Oracle Cloud Infrastructure SDK 的 RPM 程序包,该程序包位于 python3.6 模块下。默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9,请将
-e instance_shape="VM.Standard3.Flex"
或-e os_version="9"
添加到部署命令。重要提示:等待手册成功运行并到达暂停任务。在手册的这一阶段,Oracle CNE 安装已完成,实例已准备就绪。记下之前的剧集,其中输出其部署的节点的公共和专用 IP 地址,以及运行实验时所需的任何其他部署信息。
访问 Kubernetes 集群
-
打开终端并通过 SSH 连接到 ocne 实例。
ssh oracle@<ip_address_of_instance>
-
等待集群稳定下来,所有云池将报告它们正在运行。
watch kubectl get pods -A
当所有 pod 显示 STATUS 为 Running 时,键入
Ctrl-C
以退出watch
命令。 -
确认存在多少个节点。
kubectl get nodes
确认 Podman 工作
-
检查 Podman 的版本。
podman -v
-
确认 Podman CLI 正在工作。
podman run quay.io/podman/hello
输出示例:
[oracle@ol-server ~]$ podman run quay.io/podman/hello Trying to pull quay.io/podman/hello:latest... Getting image source signatures Copying blob f82b04e85914 done Copying config dbd85e09a1 done Writing manifest to image destination Storing signatures !... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ Project: https://github.com/containers/podman Website: https://podman.io Documents: https://docs.podman.io Twitter: @Podman_io
创建 Kubernetes YAML 文件
Podman Kube 功能可以与 Podman 生成的 Kubernetes YAML 文件或原生 Kubernetes YAML 文件一起使用。让我们反过来看看两者。
使用容器创建 Podman 云池并生成 Kubernetes YAML
首先,在本地将容器部署到 Podman pod 中。然后,使用该部署生成可部署到 Kubernetes 集群的 Kubernetes YAML 文件。
-
使用将端口 8081 映射到主机的 Nginx 服务器创建 pod。
podman run -dt --pod new:my-nginx --name nginx-container -p 8081:80 ghcr.io/oracle/oraclelinux9-nginx:1.20
这将创建一个名为 ‘ my-nginx ’ 的新 pod,在 pod 中部署一个 Nginx 容器,并将容器映射到主机上的端口 8081。
-
验证 Pod 是否已创建。
podman pod ps
输出示例:
[oracle@ocne ~]$ podman pod ps POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS e5248f6968b3 my-nginx Running 48 seconds ago 5e41ad85e232 2
-
确认您可以从主机访问新 pod 及其容器。
curl http://localhost:8081
-
从正在运行的云池生成 Kubernetes 文件 YAML。
podman kube generate my-nginx --type pod > nginx-pod.yaml
Podman generate 命令从包含容器的正在运行的 Podman pod 中创建符合 Kubernetes 的文件。可以将其部署到 Kubernetes 集群,使其对本地原型创建非常有用,并随后创建符合 Kubernetes 的清单文件。
-
检查生成的文件。
cat nginx-pod.yaml
输出示例:
[oracle@ocne ~]$ cat nginx-pod.yaml # Save the output of this file and use kubectl create -f to import # it into Kubernetes. # # Created with podman-4.9.4-rhel apiVersion: v1 kind: Pod metadata: creationTimestamp: "2025-08-11T14:08:13Z" labels: app: my-nginx name: my-nginx spec: containers: - env: - name: TERM value: xterm image: ghcr.io/oracle/oraclelinux9-nginx:1.20 name: zenbardeen ports: - containerPort: 80 hostPort: 8081 tty: true
删除使用 Podman Kube 部署的云池和容器
云池及其相关容器在完成处理后可以轻松删除。
-
删除 my-nginx 云池。
podman kube down nginx-pod.yaml
-
确认两个 pod 都已删除。
podman pod ps
输出示例:
[oracle@ocne ~]$ podman pod ps POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
这确认您之前创建的 Podman 生成的 Kubernetes YAML 文件有效。
使用 Podman Kube 将 Kubernetes YAML 部署到 Kubernetes 集群
只有当主机的 kubeconfig
文件位于 $HOME/.kube
目录中时,Podman 才能部署到 Kubernetes 集群。
确认您的环境有效
-
确认已设置
KUBECONFIG
环境变量。env | grep KUBE
输出示例:
[oracle@ocne ~]$ env | grep KUBE KUBECONFIG=/home/oracle/.kube/kubeconfig.ocne.local
信息:如果已安装
kubectl
,并且${HOME}/.kube
目录中有多个配置文件,请执行此命令以确认kubectl
当前正在使用哪个配置文件:kubectl get pod -v6 2>&1 | awk '/Config loaded from file:/{print $NF}'
输出示例:
[oracle@ocne ~]$ kubectl get pod -v6 2>&1 | awk '/Config loaded from file:/{print $NF}' /home/oracle/.kube/kubeconfig.ocne.local
注:在
verbosity
设置为 6 级或更高级别的情况下执行任何kubectl
命令,并且当前使用的kubeconfig
将包含在输出中。
部署有效的 Kubernetes YAML 文件
-
创建 Kubernetes YAML 文件。
cat << EOF | tee testpod.yaml > /dev/null apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: test-container image: ghcr.io/oracle/oraclelinux9-nginx:1.20 ports: - containerPort: 8080 EOF
-
使用 Podman 将
testpod.yaml
文件部署到 Kubernetes 集群。podman kube apply -f testpod.yaml
输出示例:
[oracle@ocne ~]$ podman kube apply -f testpod.yaml Deploying to cluster... Successfully deployed workloads to cluster!
注:默认情况下,这会部署到 default 名称空间。
-
确认 Pod 已部署到您的集群。
kubectl get pods
输出示例:
[oracle@ocne ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 23s
这确认 podman 已将名为 my-pod 的 pod 部署到集群。
-
确认 Nginx 已按预期部署。
kubectl describe pods/my-pod
输出示例:
[oracle@ocne ~]$ kubectl describe pods/my-pod Name: my-pod Namespace: default Priority: 0 Service Account: default Node: ocne-worker-1/192.168.122.122 Start Time: Wed, 06 Aug 2025 15:09:55 +0000 Labels: <none> Annotations: <none> Status: Running IP: 10.244.1.6 IPs: IP: 10.244.1.6 Containers: test-container: Container ID: cri-o://c2ea59274a702f9cdb044d92869b63da27249370a0c55bef2994f49a092e527a Image: ghcr.io/oracle/oraclelinux9-nginx:1.20 Image ID: ghcr.io/oracle/oraclelinux9-nginx@sha256:16b15a609a172059f9e66ae412dde3b9febe0b0fdd4eb1084eac2783088de6f1 Port: 8080/TCP Host Port: 0/TCP State: Running ... ... ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 48m default-scheduler Successfully assigned default/my-pod to ocne-worker-1 Normal Pulling 48m kubelet Pulling image "ghcr.io/oracle/oraclelinux9-nginx:1.20" Normal Pulled 48m kubelet Successfully pulled image "ghcr.io/oracle/oraclelinux9-nginx:1.20" in 10.66s (10.66s including waiting). Image size: 267010601 bytes. Normal Created 48m kubelet Created container: test-container Normal Started 48m kubelet Started container test-container
这证实了
podman kube play
命令使用 Kubernetes YAML 文件将 pod 直接部署到 Kubernetes 集群。
将 Podman 生成的 Kubernetes YAML 部署到 Kubernetes 集群
将您在教程开始时创建的 Podman 生成的 Kubernetes YAML 文件部署到 Kubernetes 集群。
-
将
nginx-pod.yaml
文件部署到 Kubernetes 集群。podman kube apply -f nginx-pod.yaml
输出示例:
[oracle@ocne ~]$ podman kube apply -f nginx-pod.yaml Deploying to cluster... Successfully deployed workloads to cluster!
-
确认 Pod 已部署到您的集群。
kubectl get pods
输出示例:
[oracle@ocne ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE my-nginx 1/1 Running 0 1m59s my-pod 1/1 Running 0 5m12s
-
确认 Nginx 已按预期部署。
kubectl describe pods/my-nginx
这证实 Podman 已成功将 podman 生成的 Kubernetes YAML(称为 my-nginx )部署到 Kubernetes 集群。
后续步骤
本教程演示了如何使用 Podman 使用 Oracle Cloud Native Environment 将 Kubernetes 工作负载部署到 Kubernetes 集群。有关其他教程和内容,请查看 Oracle Linux 培训站。
相关链接
更多学习资源
通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Deploy Kubernetes Workloads using Podman with Oracle Cloud Native Environment.
G42335-01