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 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 9 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 27 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 34 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 40 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 43 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 42 views