Mímisbrunnr知恵の泉

← クラウドインフラ 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:Kubernetesの全体像(宣言的・調整ループ) | 関連:Service・Ingressスケーリングと自己修復

要点(BLUF)

概念 ── Pod・ReplicaSet・Deploymentの入れ子

3つは入れ子の関係です。Deployment が ReplicaSet を作り、ReplicaSet が Pod を保つ。

flowchart TB
    deploy["Deployment(更新・ロールバックを管理)"] --> rs["ReplicaSet(Podを常にN個に保つ)"]
    rs --> p1["Pod(コンテナ+IP)"]
    rs --> p2["Pod"]
    rs --> p3["Pod"]

仕組み ── ローリング更新

新バージョンを出すとき、Deployment は新しいReplicaSetを少しずつ増やし、古いReplicaSetを少しずつ減らす。常に最低限の数が動いているので無停止で入れ替わります。

flowchart LR
    subgraph before["更新前"]
      old3["旧Pod x3"]
    end
    subgraph during["更新中(ローリング)"]
      old2["旧Pod x2"]
      new1["新Pod x1"]
    end
    subgraph after["更新後"]
      new3["新Pod x3"]
    end
    before --> during --> after

問題があればロールバックで前の世代の ReplicaSet に戻すだけ。デプロイ戦略の全体像(カナリア等)は デプロイ戦略(ローリング・ブルーグリーン・カナリア) で扱います。

動く例 ── Deployment manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3                 # 望ましいPod数(ReplicaSetがこれを死守)
  selector:
    matchLabels:
      app: web
  template:                   # ここが Pod の雛形
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:1.27   # タグ固定(latest を避ける)
          ports:
            - containerPort: 80
          resources:          # cgroups 相当の要求/上限(コンテナとは(名前空間・cgroups)
            requests: { cpu: "100m", memory: "128Mi" }
            limits:   { cpu: "500m", memory: "256Mi" }
kubectl apply -f deployment.yaml
kubectl get pods -l app=web        # 3つ動く
kubectl delete pod <>           # 1つ消す → ReplicaSet が即作り直す
kubectl set image deployment/web web=nginx:1.27.1   # ローリング更新
kubectl rollout status deployment/web               # 進捗
kubectl rollout undo deployment/web                 # ロールバック

requests(最低保証)と limits(上限)は、Scheduler の配置判断と cgroups の制限に効く重要設定。limits を超えるメモリ使用は Pod が止められます(OOMKill)。

なぜ Deployment を使うのか

⚠️ よくある誤解・落とし穴

対応ラボ

cloud-infra-study/labs/04-02_deployment.yaml(3レプリカのDeployment。apply → Pod削除で自動復活 → set image でローリング更新 → undo でロールバックを観察。kind/minikube で)。

関連

第4章 Kubernetes 目次