[CKAD] Kubernetesワークロードを支配する4大Podコントローラー徹底解説

こんにちは!本日は、Kubernetesワークロード管理の核となる4大Podコントローラーについて完璧に解説します。

単にPodを起動するだけでなく、各状況に最適なツールを選択することが、クラウドセキュリティおよびインフラ設計の始まりです。約15分で、実務と試験(CKAD)に必要な核心をすべてマスターできます。


📑 目次

  1. 概要: なぜコントローラーを使うべきか? (Desired State)
  2. Deployment: ステートレス(Stateless)アプリケーションの王者
  3. StatefulSet: ステートフル(Stateful)な専門家の管理者
  4. DaemonSet: 全てのノードを守る番人
  5. Job & CronJob: 短く太く働くバッチ処理の達人
  6. [付録] コントローラー選択ガイドと実践のヒント

0. 概要: なぜコントローラーを使うべきか? 🤔

Kubernetesにおいて、Podはいつでも停止しうる消耗品です。講師が強調するように、私たちはPodを一つ一つ手動で管理しません。代わりに、コントローラーに「私が望む状態(Desired State)」を宣言し、コントローラーが現在の状態を監視し、その状態を維持させます。


1. Deployment: ステートレス(Stateless)アプリケーションの王者 👑

最も一般的に使用されるコントローラーです。ウェブサーバーやAPIサーバーのように、Pod同士が互いに区別される必要がないステートレスアプリケーションに最適化されています。

  • 主な機能: セルフヒーリング、スケーリング、ローリングアップデートおよびロールバック。
  • 核となるリソース: 内部的にReplicaSetを生成し、Podの数を維持します。

💡 実践コード (YAML)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.21

2. StatefulSet: ステートフル(Stateful)な専門家の管理者 🏛️

データベース(MySQL、MongoDB)やメッセージキュー(Kafka)のように、Podごとに固有の名前と永続的なデータが必要な場合に使用します。

  • 主な機能: Podに順次インデックスを付与(pod-0, pod-1)、安定したネットワーク識別子(Headless Service連携)、個別ボリューム割り当て(volumeClaimTemplates)。
  • 違い: Deploymentとは異なり、Podが再起動しても名前と関連付けられたボリュームはそのまま維持されます。

3. DaemonSet: 全てのノードを守る番人 🛡️

クラスター内の全ての(または特定の条件を満たす)ノードにPodをちょうど一つずつデプロイする必要がある場合に使用します。

  • 用途: ログコレクター(Fluentd)、監視エージェント(Prometheus Node Exporter)、ネットワークプラグイン。
  • 特徴: 新しいノードが追加されると自動的にPodがデプロイされ、ノードが削除されるとPodも一緒に削除されます。

4. Job & CronJob: バッチ処理の達人 🏃‍♂️⏰

24時間稼働するサービスではなく、特定の作業が完了すると自己終了する作業を管理します。

  • Job: 一回限りの作業(例: データ移行、バッチレポート生成)。正常に完了するとPodを終了します。
  • CronJob: 定められた時間に繰り返し実行される作業(例: 毎日午前3時のetcdバックアップ)。

💡 実践コード (CronJob)

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-backup
spec:
  schedule: "0 3 * * *" # 毎日午前3時
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: busybox
            command: ["sh", "-c", "echo Backup Complete!"]
          restartPolicy: OnFailure

📊 コントローラーを一覧で比較

コントローラー 主な用途 Pod識別子 データ永続性
Deployment ウェブサーバー、API (ステートレス) ランダムハッシュ 揮発性
StatefulSet DB、分散システム (ステートフル) 固有インデックス (0, 1, 2) 永続的 (PVCマッピング)
DaemonSet ログ/監視エージェント ノード別固定 ノード依存
Job/CronJob バックアップ、バッチ処理 一回限り/繰り返し 結果保存後終了

Tags: Kubernetes, CKAD, Deployment, StatefulSet, DaemonSet, Job, CronJob, クラウドインフラ, 資格準備, Podコントローラー


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です