ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で使用できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
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の種類は次のとおりです:
- ポッド
- デプロイメント
- PersistentVolumeClaim
- ConfigMap
- シークレット
- DaemonSet
- ジョブ
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
の使用方法の詳細は、アップストリームのドキュメントを参照してください。
目的
このチュートリアルでは、次のことを学習します。
- Kubernetes YAMLを使用して、Podmanでポッドを作成して実行します。
- Podmanを使用して、Kubernetes YAMLを生成します。
- Podman Kubeを使用して、Kubernetes YAMLファイルをKubernetesクラスタにデプロイします。
前提条件
- Oracle Cloud Native Environment(Oracle CNE)のインストール
- 1つの制御ノードと1つのワーカー・ノード
- Podmanインストール済
Oracle Cloud Native Environmentの構成
ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、linux-virt-labs
GitHubプロジェクトREADME.mdを読み、前提条件を完了してください。
-
Lunaデスクトップでターミナルを開きます。
-
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'"
無料の演習環境には、ローカル・ホストで実行される再生の
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クラスタへのアクセス
-
端末を開き、SSH経由でocneインスタンスに接続します。
ssh oracle@<ip_address_of_instance>
-
クラスタが安定し、すべてのポッドが実行中であることを報告するまで待機します。
watch kubectl get pods -A
すべてのポッドに「実行中」の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ポッドの作成およびKubernetes YAMLの生成
まず、コンテナをPodmanポッドにローカルにデプロイします。次に、デプロイメントを使用して、KubernetesクラスタにデプロイできるKubernetes YAMLファイルを生成します。
-
ポート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にマップされます。
-
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
-
新しいポッドとそのコンテナにホストからアクセスできることを確認します。
curl http://localhost:8081
-
実行中のポッドからKubernetesファイルYAMLを生成します。
podman kube generate my-nginx --type pod > nginx-pod.yaml
Podman generateコマンドは、コンテナを含む実行中のPodmanポッドから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
-
両方のポッドが削除されたことを確認します。
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クラスタにデプロイできます。
環境が有効であることの確認
-
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'というポッドをクラスタにデプロイしたことが確認されます。
-
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クラスタにデプロイします。
-
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がKubernetesクラスタに'my-nginx'というpodman生成のKubernetes YAMLを正常にデプロイしたことが確認されます。
次のステップ
このチュートリアルでは、Podmanを使用して、Oracle Cloud Native Environmentを使用して、KubernetesワークロードをKubernetesクラスタにデプロイする方法を示します。追加のチュートリアルおよびコンテンツについては、Oracle Linuxトレーニング・ステーションを参照してください。
関連リンク
- Oracle Cloud Native Environmentのドキュメント
- Oracle Cloud Native Environmentトラック
- 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.
G42332-01