6 Kubernetesファイル
podman kubeコマンドを使用して、PodmanとKubernetesの両方で使用できるYAMLファイルを生成して使用し、ポッド、コンテナ、ボリュームおよびその他のオブジェクトを2つのコンテナ・プラットフォーム間で移動します。
Kubernetes YAMLファイルを使用すると、次のようないくつかの利点があります:
-
移植性: PodmanとKubernetesの間でポッドを移動したり、両方のコンテナ・プラットフォームで同じコンテナとポッドを実行できます。
-
可読性: YAMLファイルをプログラミング言語で使用できます。
-
利便性: YAMLファイルには、ポッドまたはコンテナに必要なすべての構成情報を含めることができます。 したがって、Podmanコマンドを発行するときに異なるパラメータを指定する必要はありません。
Kubernetes YAMLファイルを操作するには、次のPodmanコマンドを使用できます:
-
podman kube generate -
既存のポッドのKubernetes YAMLファイルを生成します。 YAMLファイルには、多数のコンテナ、ボリュームまたはその他のオブジェクトを含むことができるPodmanポッドの説明が含まれています。 このYAMLファイルを使用して、PodmanまたはKubernetesにポッドを作成できます。
-
podman kube play -
Kubernetes YAMLファイルに基づいて、Podmanにポッドをデプロイします。
-
podman kube apply -
Kubernetes YAMLファイルに基づいて、ポッドをKubernetesクラスタにデプロイします。
-
podman kube down -
ポッド内のコンテナを停止し、Kubernetes YAMLファイルを使用してPodmanのポッドを削除します。
これらのコマンドの詳細は、コマンドの発行時に--helpフラグを使用してください。 podman-kube(1)マニュアル・ページを参照することもできます。
この項の例では、PodmanでKubernetes YAMLファイルを生成し、PodmanとKubernetesの両方でYAMLファイルを使用する方法を示します。
ヒント:
Oracle Linux 8およびOracle Linux 9システムの場合、Oracle Cloud Native Environment libvirtプロバイダは、Kubernetes YAMLファイルのテストに役立ちます。 詳細は、リリース2のOracle Cloud Native Environmentクイック・スタートを参照してください。
この項の例では、Kubernetes CLI (kubectl)を使用してKubernetesクラスタと対話します。 kubectlソフトウェア・パッケージをローカル・システムにインストールし、Kubernetes構成ファイル(kubeconfigファイル)を使用してクラスタに接続できます。 kubectlのインストールに関する情報は、Oracle Cloud Native EnvironmentのドキュメントまたはアップストリームKubernetesのドキュメントで入手できます。
Podmanには、Kubernetes YAMLファイルを生成してKubernetesクラスタにデプロイするコマンドがありますが、Kubernetesオブジェクト(ポッドやボリュームなど)をさらに管理するには、kubectlコマンドを使用して行う必要があります。 kubectlコマンドとその使用方法の詳細は、Kubernetesアップストリーム・ドキュメントを参照してください。
例6-1 Kubernetes YAMLファイルの作成と使用
この例では、Podmanポッドを作成し、ポッドからKubernetes YAMLファイルを作成し、YAMLファイルを使用してポッドをPodmanとKubernetesの両方にデプロイします。
-
ポッドを作成し、ポッドにNGINXコンテナを追加します。
podman run --pod new:mypod -dt --name nginxcontainer quay.io/libpod/alpine_nginx:latest -
ポッドとコンテナの作成を確認します。
すべてのポッドをリストします:
podman pod list出力は次のようになります:
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 8f7088f859da mypod Running 2 minutes ago d2bb22029ec9 2ポッドにコンテナを表示します。
podman pod ps --ctr-names --filter name=mypod出力には、ポッド内のコンテナ名がリストされ、次のように表示されます。
POD ID NAME STATUS CREATED INFRA ID NAMES 8f7088f859da mypod Running 13 minutes ago d2bb22029ec9 8f7088f859da-infra,nginxcontainerinfraおよび
nginxcontainerがポッドにリストされます。 -
ポッドからKubernetes YAMLファイルを作成します。
podman generate kube mypod --filename mypod.yaml -
YAMLファイルの内容を確認します。
mypod.yamlファイルは次のようになります。# Save the output of this file and use kubectl create -f to import # it into Kubernetes. # # Created with podman-5.4.0 apiVersion: v1 kind: Pod metadata: annotations: io.kubernetes.cri-o.SandboxID/nginxcontainer: d2bb22029ec98f7... creationTimestamp: "2025-07-15T02:18:18Z" labels: app: mypod name: mypod spec: containers: - env: - name: TERM value: xterm image: quay.io/libpod/alpine_nginx:latest name: nginxcontainer tty: true -
PodmanでこのYAMLファイルを実行する前に、コンテナおよびポッドを削除します:
podman stop nginxcontainerpodman rm nginxcontainerpodman pod rm mypod -
PodmanでYAMLを実行して、ポッドとそのコンテナをデプロイします:
podman kube play mypod.yamlポッドが表示され、前述のステップを使用してコンテナが実行されていることを確認できます。 たとえば:
podman pod listpodman pod ps --ctr-names --filter name=mypod -
YAMLファイルを使用してPodmanポッドを停止します。
podman kube down mypod.yaml -
KubernetesでYAMLファイルを実行して、ポッドをデプロイします。
Kubernetesクラスタの
kubeconfigファイルがある場合は、podman kube applyコマンドを使用できます。 たとえば:podman kube apply --kubeconfig mykubeconfig --file mypod.yamlKubernetesクラスタへのアクセス権がある場合は、YAMLファイルをKubernetes CLIにアクセスできるシステムにコピーし、
kubectl createコマンドを使用してポッドをデプロイできます。 たとえば:kubectl create -f mypod.yaml -
ポッドがKubernetesで実行されていることを確認するには、次のコマンドを実行します:
kubectl get pods -
Kubernetesポッドを削除するには、次のコマンドを実行します:
kubectl delete pod mypod
Kubernetes YAMLファイルの作成
podman kube generateコマンドを使用して、Podmanコンテナ、ポッドまたはボリュームのKubernetes YAMLファイルを生成します。
YAMLファイルは、Kubernetes環境で使用して、ポッド、サービスまたはPersistentVolumeClaimを起動できます。 また、Podmanで使用して、Kubernetesオブジェクトが正しく作成されたことをテストすることもできます。
Kubernetesで開始するボリューム・マウントを含むポッドの場合、PersistentVolumeClaimの適切な構成でKubernetesにStorageClassを設定する必要があります。 StorageClassが設定されている場合、ポッドの実行時にボリュームが自動的に作成されます。
podman kube generateコマンドの詳細は、podman-kube-generate(1)マニュアル・ページを参照してください。
例6-2コンテナからのYAMLファイルの作成
-
Podmanコンテナを作成します。
podman create --name myoracle oraclelinux:9-slim -
コンテナのKubernetes YAMLファイルを生成します:
podman generate kube myoracle --filename myoracle.yaml -
結果の
myoracle.yamlファイルが次のようになっていることを確認します。# Save the output of this file and use kubectl create -f to import # it into Kubernetes. # # Created with podman-5.4.0 apiVersion: v1 kind: Pod metadata: creationTimestamp: "2025-07-14T07:09:20Z" labels: app: myoracle-pod name: myoracle-pod spec: containers: - image: container-registry.oracle.com/os/oraclelinux:9-slim name: myoracle
例6-3ボリューム・マウントを使用したコンテナからのYAMLファイルの作成
-
ボリューム・マウントを含むPodmanコンテナを作成します。
podman run --name myvolumepod --volume mydata:/data oraclelinux:9-slim -
コンテナのKubernetes YAMLファイルを生成します:
podman generate kube myvolumepod --filename myvolumepod.yaml -
結果の
myvolumepod.yamlファイルが次のようになっていることを確認します。# Save the output of this file and use kubectl create -f to import # it into Kubernetes. # # Created with podman-5.4.0 # NOTE: If you generated this yaml from an unprivileged and rootless podman container on an SELinux # enabled system, check the podman generate kube manual page for steps to follow to ensure that your pod/container # has the right permissions to access the volumes added. --- apiVersion: v1 kind: Pod metadata: creationTimestamp: "2025-07-14T07:12:40Z" labels: app: myvolumepod-pod name: myvolumepod-pod spec: containers: - image: container-registry.oracle.com/os/oraclelinux:9-slim name: myvolumepod volumeMounts: - mountPath: /data name: mydata-pvc volumes: - name: mydata-pvc persistentVolumeClaim: claimName: mydata
例6-4ポッドからのYAMLファイルの作成
-
ポッドを作成し、ポッドにNGINXコンテナを追加します。
podman run --pod new:mypod -dt --name nginxcontainer quay.io/libpod/alpine_nginx:latest -
ポッドからKubernetes YAMLファイルを作成します。
podman generate kube mypod --filename mypod.yaml -
結果の
mypod.yamlファイルが次のようになっていることを確認します。# Save the output of this file and use kubectl create -f to import # it into Kubernetes. # # Created with podman-5.4.0 apiVersion: v1 kind: Pod metadata: annotations: io.kubernetes.cri-o.SandboxID/nginxcontainer: d2bb22029ec98f7... creationTimestamp: "2025-07-15T02:18:18Z" labels: app: mypod name: mypod spec: containers: - env: - name: TERM value: xterm image: quay.io/libpod/alpine_nginx:latest name: nginxcontainer tty: true
Kubernetes YAMLファイルの実行
podman kube playコマンドを使用して、PodmanでKubernetes YAMLファイルを実行します。 これは、ファイルが正しく生成されたことを確認するのに役立ちます。
podman kube playコマンドを使用して、PodmanでKubernetes YAMLファイルを実行します。
podman kube playコマンドの詳細は、podman-kube-play(1)マニュアル・ページを参照してください。
例6-5 PodmanでのKubernetes YAMLファイルの実行
podman kube play mypod.yaml
次のようなpodman podコマンドを使用して、ポッドおよびコンテナが実行されていることを確認できます:
podman pod list
podman pod ps --ctr-names --filter name=mypod
Kubernetes YAMLファイルを使用したポッドの削除
podman kube downコマンドを使用して、Kubernetes YAMLファイルを使用してPodmanポッドを停止および削除します。
この例では、podman kube generateコマンドを使用して生成されたYAMLファイルを使用して作成されたPodmanポッドを停止および削除する方法を示します。 podman kube downコマンドは、Kubernetes YAMLファイルのテスト時にpodman kube playコマンドとともに使用される可能性が高くなります。 podman kube downコマンドは、シークレットやボリュームなど、YAMLファイルにリストされているポッドおよび関連オブジェクトを停止および削除します。
podman kube downコマンドの詳細は、podman-kube-down(1)マニュアル・ページを参照してください。
例6-6 YAMLファイルを使用したポッドの停止および削除
podman kube down mypod.yaml
Kubernetesクラスタへのデプロイ
podman kube applyコマンドを使用して、Kubernetes YAMLファイルを実行し、Kubernetesクラスタにポッドおよび関連オブジェクトを作成します。
podman kube applyコマンドを使用して、Podmanで生成されたYAMLファイルを実行します。
この例では、Podmanで生成されたYAMLファイルを実行して、Kubernetesクラスタにポッドおよびコンテナを作成する方法を示します。 これは、Kubernetesクラスタを設定していることを前提としています。 宛先クラスタのKubernetes構成ファイル(kubeconfigファイル)を指定する必要があります。これは、Kubernetesクラスタからローカル・システムにコピーできます。 また、Kubernetesを実行しているサーバーでKubernetes Server APIポートが開いていることも確認する必要があります。
YAMLファイルをKubernetesクラスタにデプロイすると、ポッドはPodmanではなくそのクラスタで実行されるため、Kubernetesオブジェクトの管理はkubectlを使用して行う必要があります。 YAMLファイルをデプロイするために、Kubernetesクラスタ内のオブジェクトを管理するために使用できるPodmanコマンド(ここに示す以外)はありません。
podman kube applyコマンドの詳細は、podman-kube-apply(1)マニュアル・ページを参照してください。
例6-7 KubernetesクラスタへのYAMLファイルのデプロイ
podman kube apply --kubeconfig mykubeconfig --file mypod.yaml
Kubernetesクラスタにアクセスできる場合は、Kubernetes CLI (kubectl)を使用して、次を使用してポッドが作成されていることを確認します:
kubectl get pods