Pod
Kubernetes の最小デプロイ単位で、1 つ以上のコンテナをまとめて管理するリソース
Kubernetesコンテナ
Pod とは
Pod は Kubernetes の最小デプロイ単位で、1 つ以上のコンテナをまとめて管理するリソースである。同じ Pod 内のコンテナはネットワーク (localhost) とストレージ (Volume) を共有する。通常は 1 Pod = 1 コンテナだが、サイドカーパターンで複数コンテナを含む場合もある。
Pod の定義
apiVersion: v1
kind: Pod
metadata:
name: api-server
labels:
app: api-server
spec:
containers:
- name: app
image: myapp:1.0
ports:
- containerPort: 3000
resources:
requests: { cpu: 100m, memory: 128Mi }
limits: { cpu: 500m, memory: 512Mi }
readinessProbe:
httpGet: { path: /ready, port: 3000 }
livenessProbe:
httpGet: { path: /healthz, port: 3000 }
Pod のライフサイクル
Pending → Running → Succeeded / Failed
↓
CrashLoopBackOff (再起動ループ)
| フェーズ | 説明 |
|---|---|
| Pending | スケジューリング待ち、イメージのプル中 |
| Running | 少なくとも 1 つのコンテナが実行中 |
| Succeeded | 全コンテナが正常終了 (Job) |
| Failed | コンテナが異常終了 |
| CrashLoopBackOff | 起動 → クラッシュを繰り返している |
サイドカーパターン
spec:
containers:
- name: app
image: myapp:1.0
- name: log-agent # サイドカー: ログ収集
image: fluentbit:latest
volumeMounts:
- name: logs
mountPath: /var/log/app
volumes:
- name: logs
emptyDir: {}
メインコンテナとサイドカーコンテナが同じ Volume を共有し、ログ収集、プロキシ、モニタリングなどの横断的関心事を分離する。
kubectl での操作
# Pod の一覧
kubectl get pods
# Pod の詳細 (イベント、状態)
kubectl describe pod api-server
# Pod のログ
kubectl logs api-server
kubectl logs api-server -c log-agent # サイドカーのログ
# Pod に入る
kubectl exec -it api-server -- /bin/sh
# Pod の削除
kubectl delete pod api-server
Pod を直接作らない
本番環境では Pod を直接作成せず、Deployment 経由で管理する。Deployment が Pod の数を維持し、異常終了時に自動再作成する。
✅ Deployment → ReplicaSet → Pod (自動管理)
❌ Pod を直接作成 (異常終了しても再作成されない)
ECS タスクとの比較
| 観点 | Kubernetes Pod | ECS タスク |
|---|---|---|
| 最小単位 | Pod (1+ コンテナ) | タスク (1+ コンテナ) |
| サイドカー | ネイティブ対応 | サポートあり |
| ネットワーク | Pod 内は localhost | タスク内は localhost |
| ストレージ共有 | Volume | Bind mount |
現場での応用を知るには関連書籍も役立つ。