Podman から Kubernetes への移行では、Podman のコマンドや構成ファイルを Kubernetes のマニフェスト(YAML形式)に変換する必要があります。
特に podman generate kube を活用することで、移行がスムーズになります。基本的な移行ステップ
1. Podman で動作していた Pod を確認
Podman で作成した Pod やコンテナを確認します。]
podman pod ps
podman ps --pod
2. Kubernetes 用 YAML を生成
Podman には Kubernetes マニフェストを生成する機能があります。
podman generate kube <pod名> > pod.yaml
3. Kubernetes に適用
生成した YAML を Kubernetes クラスタに適用します。
kubectl apply -f pod.yaml
コマンド対応表(Podman → Kubernetes)
| Podman コマンド例 | Kubernetes での対応 | 備考 |
|---|---|---|
podman run -d --name myapp myimage |
kubectl apply -f deployment.yaml |
Deployment を使ってコンテナを起動・管理 |
podman pod create --name mypod |
kubectl apply -f pod.yaml |
Pod リソースとして YAML で管理 |
podman generate kube mypod > pod.yaml |
kubectl apply -f pod.yaml |
Podman の構成を YAML に変換 |
podman ps |
kubectl get pods |
実行中の Pod 一覧を表示 |
podman ps -a |
kubectl get pods --all-namespaces |
全 Pod(終了済み含む)を表示 |
podman images |
kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}' |
使用中のイメージ一覧を取得 |
podman logs mycontainer |
kubectl logs mypod |
Pod のログを表示 |
podman exec -it mycontainer bash |
kubectl exec -it mypod -- bash |
Pod 内でコマンドを実行 |
podman stop mycontainer |
kubectl delete pod mypod |
Pod を停止(削除) |
podman rm mycontainer |
kubectl delete pod mypod |
Pod を削除 |
podman rmi myimage |
Kubernetes では不要 | イメージ管理はレジストリ側で行う |
podman inspect mycontainer |
kubectl describe pod mypod |
Pod の詳細情報を表示 |
podman stats |
kubectl top pod |
Pod のリソース使用状況を表示(metrics-server 必須) |
podman build -t myimage . |
docker build → レジストリへ push |
Kubernetes 自体はビルド機能を持たない |
podman login |
kubectl create secret docker-registry |
プライベートレジストリ用の認証情報を作成 |
podman-compose up |
kubectl apply -f + kustomize など |
Compose は手動で YAML に変換が必要 |
注意点と補足
-
Podman の Pod 概念は Kubernetes の Pod と似ていますが、Kubernetes では Pod は基本的に Deployment や StatefulSet などのリソースで管理されます。
-
podman generate kube で生成される YAML は Pod リソースのみなので、本番運用では Deployment に変換することが推奨されます。
-
コンテナイメージの指定は image: フィールドで行います。Podman で使っていたイメージ名をそのまま使えます。
-
環境変数やボリュームマウントなども YAML に記述可能です。
Python スクリプトでの Podman → Kubernetes 移行ガイド
1. Podman を subprocess で呼び出していた場合
import subprocess
# Podman でコンテナ起動
subprocess.run(["podman", "run", "--name", "myapp", "-d", "myimage"])
Kubernetes での置き換え(kubectl 経由):
import subprocess
# 事前に作成した deployment.yaml を適用
subprocess.run(["kubectl", "apply", "-f", "deployment.yaml"])
表はこのような置き換えの参考になるが、Kubernetes では「コンテナを起動する」というより「マニフェストを適用して管理する」スタイルです。
2. Podman の状態確認やログ取得をしていた場合
| Podman コマンド | Kubernetes での対応 | Python での例 |
|---|---|---|
podman ps |
kubectl get pods |
subprocess.run(["kubectl", "get", "pods"]) |
podman logs myapp |
kubectl logs myapp-pod |
subprocess.run(["kubectl", "logs", "myapp-pod"]) |
✅ まとめ:表が参考になる場面・ならない場面
| 項目 | 表が参考になるか | 補足 |
|---|---|---|
Podman コマンドを subprocess で呼び出していた |
✅ はい |
kubectl コマンドに置き換えることで対応可能 |
| Podman API を使っていた | ❌ 要調整 | Kubernetes API に書き換える必要がある |
| コンテナの起動・停止・ログ取得など | ✅ はい | 対応する kubectl コマンドに変換可能 |
| Podman Compose を使っていた | ⚠️ 一部参考 | YAML を手動で Deployment や Service に分割・変換する必要がある |
| 動的に Pod を作成・削除していた | ❌ 要再設計 | Kubernetes は宣言的管理が基本。動的操作は API または Job で対応可能 |
参考リンク
Podman で Kubernetes native なアプリ開発の Innter loop から Outer loop への移行をスムーズに