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

実務での活用方法は関連書籍にも詳しい。

関連用語