Deployment
Kubernetes で Pod のレプリカ数、更新戦略、ロールバックを宣言的に管理するリソース
Kubernetesデプロイ
Deployment とは
Deployment は Kubernetes のリソースで、Pod のレプリカ数、コンテナイメージ、更新戦略を宣言的に管理する。「この Pod を 3 つ動かす」と宣言すると、Kubernetes が自動的に 3 つの Pod を作成・維持する。Pod が異常終了しても自動的に再作成される。
基本的な設定
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
replicas: 3
selector:
matchLabels:
app: api-server
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
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 }
Deployment → ReplicaSet → Pod の関係
Deployment (宣言的な管理)
└── ReplicaSet (レプリカ数の維持)
├── Pod 1
├── Pod 2
└── Pod 3
Deployment がイメージを更新すると、新しい ReplicaSet が作成され、ローリングアップデートで Pod が段階的に置き換えられる。
kubectl での操作
# デプロイ
kubectl apply -f deployment.yaml
# 状態確認
kubectl get deployments
kubectl describe deployment api-server
# イメージの更新
kubectl set image deployment/api-server app=myapp:2.0
# ロールバック
kubectl rollout undo deployment/api-server
# スケール
kubectl scale deployment/api-server --replicas=5
# 更新履歴
kubectl rollout history deployment/api-server
ECS との比較
| 観点 | Kubernetes Deployment | ECS Service |
|---|---|---|
| 宣言的管理 | YAML マニフェスト | タスク定義 + サービス |
| 更新戦略 | RollingUpdate, Recreate | Rolling update |
| ロールバック | kubectl rollout undo |
前のタスク定義に戻す |
| オートスケーリング | HPA | Application Auto Scaling |
実務での活用方法は関連書籍にも詳しい。