Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

Kubernetesではアプリケーションを「コンテナで動かす」だけではなく、「スケーラブルかつ信頼性のある運用」が求められます。

そのために使われるのが以下の4つのリソースです。

リソース役割
Podコンテナを実行する最小単位
ReplicaSet同じPodを指定した数だけ維持する
DeploymentReplicaSetの管理、ローリング更新など
StatefulSet状態を持つPodの管理(順番・永続化など)

それぞれ、何をしているのか順番に見ていきましょう。


🔹 Pod:コンテナを動かす最小単位

  • Kubernetesでコンテナを動かす単位は「Pod」です。
  • Podは1つまたは複数のコンテナを含み、同じネットワーク空間・ボリューム空間を共有します。
  • 通常は1Pod = 1コンテナ(Nginxだけなど)が基本です。
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest

💡 ただし、Podは自己修復されません。障害で落ちたら手動で作り直す必要があるため、本番では使いません。


🔸 ReplicaSet:Podの数を維持する

  • 「Podを3つ動かしてほしい」「落ちても自動で再起動してほしい」
  • それをやってくれるのが ReplicaSet です。
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx

🎯 特徴:

  • replicas: 3 → Podを3つ動かし続ける
  • ラベルで管理 → matchLabels に合致するPodを監視

ただし、ReplicaSet単体では**更新ロジック(古いPod→新しいPod)**を持ちません。


🔶 Deployment:ReplicaSetをさらにラップし、ローリング更新もする

  • Deploymentは 「アプリの理想状態」を宣言しておき、Kubernetesがそれを維持する仕組みです。
  • 実際に作られるのは ReplicaSet → Pod という階層構造です。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25

🔁 特徴:

  • 新しいバージョンに変えたいときは、image を変更して apply するだけ
  • 自動で ローリングアップデート(段階的に切り替え)
  • 元に戻す(ロールバック)も可能!

💡 本番では基本的に Deployment を使います。


🟪 StatefulSet:順番・永続化が必要なサービス用

  • Deploymentは「Podの中身は全部同じ」である前提ですが、**状態を持つアプリ(DBなど)**ではそうはいきません。
  • StatefulSetは、順序・名前・ストレージの永続化などをサポートします。
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx

🧠 特徴:

  • pod-0, pod-1 などの 一意な名前が付く
  • 起動・停止順序を制御できる
  • 永続Volume(PVC)と組み合わせるとDBのような「状態ありアプリ」も安全に動かせる

📊 まとめ:どれを使えばいいの?

用途使うリソース
単体でPodを試したいPod(開発用途)
同じPodを複数動かしたいDeployment
順序や状態が必要なPodStatefulSet
Deploymentの内部構成が知りたいReplicaSet

mh

Related Posts

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

KubernetesではアプリケーションをPodとして動かし…

Kubernetes Learning 第6章:DeploymentとPodを動かす簡単なハンズオン

Kubernetesを使ううえで最も基本的かつ実用的なリソー…

You Missed

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

  • 投稿者 mh
  • 5月 12, 2025
  • 4 views

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

  • 投稿者 mh
  • 5月 12, 2025
  • 4 views

Kubernetes Learning 第7章:Pod / ReplicaSet / Deployment / StatefulSet を理解する

  • 投稿者 mh
  • 5月 11, 2025
  • 19 views

Android application development 第11章:Fragmentの導入とActivityとの連携

  • 投稿者 mh
  • 5月 11, 2025
  • 19 views

Kubernetes Learning 第6章:DeploymentとPodを動かす簡単なハンズオン

  • 投稿者 mh
  • 5月 10, 2025
  • 23 views

Android application development 第10章:Bundleを使ったデータの受け渡し

  • 投稿者 mh
  • 5月 10, 2025
  • 23 views