Kubernetesではアプリケーションを「コンテナで動かす」だけではなく、「スケーラブルかつ信頼性のある運用」が求められます。
そのために使われるのが以下の4つのリソースです。
リソース | 役割 |
---|---|
Pod | コンテナを実行する最小単位 |
ReplicaSet | 同じPodを指定した数だけ維持する |
Deployment | ReplicaSetの管理、ローリング更新など |
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 |
順序や状態が必要なPod | StatefulSet |
Deploymentの内部構成が知りたい | ReplicaSet |
