ノート:

PodmanとOracle Cloud Native Environmentを使用したKubernetesワークロードの導入

イントロダクション

Podman kubeは、Podmanを使用してKubernetesワークロードをKubernetesクラスタにデプロイする前にテストする方法を開発者と管理者に提供します。podman kubeコマンドは、既存のPodmanコンテナまたはポッドからKubernetes準拠のYAMLを生成したり、Kubernetes YAMLファイルからコンテナ/ポッドを作成するために使用されます。これにより、Podman環境とKubernetes環境の間で簡単に移行できるため、両方のエコシステムを最大限に活用して開発サイクルとテスト・サイクルを削減できます。

ノート: podman kube playコマンドは、有効なKubernetes YAMLファイルを読み取り、ローカルで実行されているPodmanインスタンスのYAMLファイルに定義されているポッド、コンテナまたはボリュームを起動します。ただし、すべてのKubernetes YAMLファイル・タイプがサポートされるわけではありません。現在サポートされているKubernetesの種類は次のとおりです:

podman kube playコマンドで現在サポートされているKubernetes YAMLフィールドの詳細なリストは、ここにあります。

Podmanは、podman kube applyコマンドを使用して、サポートされているKubernetes YAMLファイルをKubernetesクラスタに適用できます。これらのステップは、任意のKubernetesクラスタと連携します。ただし、Kubernetesデプロイメント・オプションとしてOracle Cloud Native Environmentをお薦めします。詳細は、Oracle Cloud Native Environmentのドキュメントを参照してください。

ノート:このチュートリアルでは、Podmanを使用したKubernetes YAMLファイルの生成を示し、その後、それらをKubernetesクラスタにデプロイする方法を示します。デプロイされたオブジェクトの管理は、kubectlコマンドを使用して完了する必要があります。kubectlの使用方法の詳細は、アップストリームのドキュメントを参照してください。

目的

このチュートリアルでは、次のことを学習します。

前提条件

Oracle Cloud Native Environmentの構成

ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、linux-virt-labs GitHubプロジェクトREADME.mdを読み、前提条件を完了してください。

  1. Lunaデスクトップでターミナルを開きます。

  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'"
    

    無料の演習環境には、ローカル・ホストで実行される再生のansible_python_interpreterを設定する追加の変数local_python_interpreterが必要です。この変数は、python3.6モジュールの下にあるOracle Cloud Infrastructure SDK for PythonのRPMパッケージが環境によってインストールされるため必要です。

    デフォルトのデプロイメント・シェイプでは、AMD CPUおよびOracle Linux 8が使用されます。Intel CPUまたはOracle Linux 9を使用するには、デプロイメント・コマンドに-e instance_shape="VM.Standard3.Flex"または-e os_version="9"を追加します。

    重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階では、Oracle CNEのインストールが完了し、インスタンスの準備ができました。前回の再生をノートにとります。この再生では、デプロイするノードのパブリックIPアドレスとプライベートIPアドレス、および演習の実行中に必要なその他のデプロイメント情報が出力されます。

Kubernetesクラスタへのアクセス

  1. 端末を開き、SSH経由でocneインスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
    
  2. クラスタが安定し、すべてのポッドが実行中であることを報告するまで待機します。

    watch kubectl get pods -A
    

    すべてのポッドに「実行中」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ポッドの作成およびKubernetes YAMLの生成

まず、コンテナをPodmanポッドにローカルにデプロイします。次に、デプロイメントを使用して、KubernetesクラスタにデプロイできるKubernetes YAMLファイルを生成します。

  1. ポート8081をホストにマップするNginxサーバーを使用してポッドを作成します。

    podman run -dt --pod new:my-nginx --name nginx-container -p 8081:80 ghcr.io/oracle/oraclelinux9-nginx:1.20
    

    これにより、'my-nginx'という新しいポッドが作成され、ポッド内に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. 新しいポッドとそのコンテナにホストからアクセスできることを確認します。

    curl http://localhost:8081
    
  4. 実行中のポッドからKubernetesファイルYAMLを生成します。

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

    Podman generateコマンドは、コンテナを含む実行中のPodmanポッドから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を使用してデプロイされたポッドおよびコンテナの削除

ポッドとその関連コンテナは、作業が終了すると簡単に削除できます。

  1. my-nginxポッドを削除します。

    podman kube down nginx-pod.yaml
    
  2. 両方のポッドが削除されたことを確認します。

    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クラスタへのデプロイ

Podmanは、ホストに有効なkubeconfigファイルが$HOME/.kubeディレクトリにある場合にのみ、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'というポッドをクラスタにデプロイしたことが確認されます。

  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ファイルを使用してポッドを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がKubernetesクラスタに'my-nginx'というpodman生成のKubernetes YAMLを正常にデプロイしたことが確認されます。

次のステップ

このチュートリアルでは、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 Help Centerを参照してください。