Dock Stay
Pod を管理する - podman pod の使い方・オプション・サンプル

Pod を管理する - podman pod

Kubernetes の Pod と同名の概念で、ネットワーク名前空間を共有する複数コンテナを 1 つの単位として扱う。Podman 固有の強みのひとつ。

概念図

podman pod diagram

構文

bash
podman pod create [options]
podman pod start|stop|rm POD
podman run --pod POD IMAGE

実例

名前 web-stack の Pod を作成し、ホスト 8080 ポートを Pod 内に公開する

bash
podman pod create --name web-stack -p 8080:80

作成済みの Pod にコンテナを追加する

bash
podman run -d --pod web-stack --name app docker.io/library/nginx:stable

Pod 定義を Kubernetes マニフェストとして書き出す

bash
podman kube generate web-stack > web-stack.yaml

Pod とは(Kubernetes との関連)

Pod は Kubernetes が導入した「密接に関連する複数コンテナを 1 単位にまとめる」概念で、Podman はその名前と設計思想をローカル側に持ち込みました。

Pod 内のコンテナは network namespace と IPC を共有するため、localhost で相互に通信できます。

Kubernetes への持ち込みを前提とした開発では、ローカルで Pod 単位で起動することで本番に近い構成を再現できます。

Podman は podman kube play で Kubernetes YAML をそのまま再生でき、単体クラスタを立てなくても Pod 仕様を検証しやすい点がメリットです。

複数コンテナを束ねる使い方

典型的な使い方は、アプリケーションコンテナとそのサイドカー(ログ転送、プロキシ、メトリクス収集など)を同じ Pod に配置する構成です。

podman pod create で Pod を作成し、podman run --pod <name> で所属コンテナを追加します。

Pod には infra container と呼ばれる小さな pause コンテナが自動で含まれ、それがネットワーク名前空間を保持します。

個別コンテナを再起動しても Pod のネットワーク設定は維持されるため、IP アドレスやポートフォワードが安定して運用できます。

bash
podman pod create --name api-pod -p 3000:3000
podman run -d --pod api-pod --name api my-api:latest
podman run -d --pod api-pod --name logger my-fluentd:latest

podman kube で YAML 出力

podman kube generate は既存の Pod やコンテナから Kubernetes の Pod / Deployment 形式の YAML を出力します。

ローカルで動作を確認した構成をほぼそのままクラスタに持ち込めるのが利点です。

逆に podman kube play は Kubernetes YAML を読み込んで Pod を起動します。

Kubernetes の単体機能(Pod, ConfigMap, Secret など)をサポートしており、クラスタを立てずに YAML の構文や参照関係を素早く確認したいときに使えます。

Deployment の replicas など Pod 以外のリソースは一部機能のみ対応です。

関連トピック