附註:
- 本教學課程適用於 Oracle 提供的免費實驗室環境。
- 其使用 Oracle Cloud Infrastructure 證明資料、租用戶以及區間的範例值。完成實驗室時,請將這些值替代為雲端環境特定的值。
使用 Podman 與 Oracle Cloud Native Environment 部署 Kubernetes 工作負載
簡介
Podman kube 為開發人員和管理員提供了在將 Kubernetes 叢集部署之前,使用 Podman 測試 Kubernetes 工作負載的方法。podman kube
命令是用來從現有的 Podman 容器或 Pod 產生 Kubernetes 相容的 YAML,或是從 Kubernetes YAML 檔案建立容器 /Pod。這提供了在 Podman 和 Kubernetes 環境之間輕鬆轉換的便利方式,因此利用兩個生態系統中的最佳功能來減少開發和測試週期。
注意:podman kube play
命令會讀取任何有效的 Kubernetes YAML 檔案,然後啟動本機執行之 Podman 執行處理上 YAML 檔案中定義的 Pod、容器或磁碟區。不過,並非所有 Kubernetes YAML 檔案類型都支援;目前支援的 Kubernetes 種類為:
- Pod
- 部署
- 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) 的安裝
- 單一控制節點與一個工作節點
- 已安裝 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
。由於環境會安裝 Oracle Cloud Infrastructure SDK for Python 的 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>
-
等待叢集穩定,並讓所有 Pod 報告正在執行中。
watch kubectl get pods -A
一旦所有 Pod 顯示 執行中的 STATUS ,請輸入
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 Pod 並產生 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
-
從執行中的 Pod 產生 Kubernetes 檔案 YAML。
podman kube generate my-nginx --type pod > nginx-pod.yaml
Podman generate 命令會從含有容器的執行 Podman 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 部署的 Pod 與容器
Pod 及其關聯的容器在您完成使用後,即可輕鬆移除。
-
刪除 my-nginx Pod。
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!
注意:預設會將此項目建置到預設命名空間。
-
確認 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 已順利將稱為 'my-nginx' 的 Podman 產生的 Kubernetes YAML 部署至 Kubernetes 叢集。
接下來的步驟
本教學課程示範如何使用 Podman 將 Kubernetes 工作負載部署至使用 Oracle Cloud Native Environment 的 Kubernetes 叢集。查看 Oracle Linux 訓練站,瞭解其他教學課程和內容。
相關連結
其他學習資源
在 docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Deploy Kubernetes Workloads using Podman with Oracle Cloud Native Environment.
G42336-01