附註:

使用 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 種類為:

如需 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 的詳細資訊,請參閱上游文件

目標

在本教學課程中,您將學習到:

必要條件

設定 Oracle Cloud Native Environment

注意:如果是在您自己的租用戶中執行,請先閱讀 linux-virt-labs GitHub 專案 README.md 並完成先決條件,再部署實驗環境環境。

  1. 在 Luna Desktop 上開啟終端機。

  2. 複製 linux-virt-labs GitHub 專案。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 變更至工作目錄。

    cd linux-virt-labs/ocne2
    
  4. 安裝必要的集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 部署實驗環境環境。

    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 叢集

  1. 開啟終端機,並透過 SSH 連線至 ocne 執行處理。

    ssh oracle@<ip_address_of_instance>
    
  2. 等待叢集穩定,並讓所有 Pod 報告正在執行中。

    watch kubectl get pods -A
    

    一旦所有 Pod 顯示 執行中STATUS ,請輸入 Ctrl-C 以結束 watch 指令。

  3. 確認有多少節點存在。

    kubectl get nodes
    

確認 Podman 工作

  1. 檢查 Podman 的版本。

    podman -v
    
  2. 確認 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 檔案。

  1. 使用將連接埠 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。

  2. 已建立 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
    
  3. 確認您可以從主機存取新 Pod 與其容器。

    curl http://localhost:8081
    
  4. 從執行中的 Pod 產生 Kubernetes 檔案 YAML。

    podman kube generate my-nginx --type pod > nginx-pod.yaml
    

    Podman generate 命令會從含有容器的執行 Podman Podman Pod 建立符合 Kubernetes 的檔案。讓本機原型設計以及後續建立符合 Kubernetes 規範的清單檔案非常有用,您可以部署到 Kubernetes 叢集。

  5. 複查產生的檔案。

    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 及其關聯的容器在您完成使用後,即可輕鬆移除。

  1. 刪除 my-nginx Pod。

    podman kube down nginx-pod.yaml
    
  2. 確認已刪除這兩個 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 叢集。

確認您的環境有效

  1. 確認已設定 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 檔案

  1. 建立 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
    
  2. 使用 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!
    

    注意:預設會將此項目建置到預設命名空間。

  3. 確認 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 部署至叢集。

  4. 確認如預期般部署 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 叢集。

  1. 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!
    
  2. 確認 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
    
  3. 確認如預期般部署 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