Kubernetesではアプリケーションにストレージを提供する際、「どこに保存されるか?」はとても重要なポイントです。
この章では、Kubernetesでよく使われるストレージの種類であるローカルストレージと**クラウドストレージ(EBS, NFSなど)**の違いや、使い分けの考え方を説明します。
🧱 ローカルストレージとは?
ローカルストレージとは、「Kubernetesノード自身のディスク(物理 or 仮想マシンのローカル)」を使う方法です。
たとえば、あるノードの /mnt/data
ディレクトリをPVとして利用するケースです。
spec:
hostPath:
path: /mnt/data
✅ 特徴
- 早い(ディスクI/Oが高速)
- シンプル(外部ストレージの設定が不要)
- しかし、そのノードに依存 → Podが他のノードに移動したらデータにアクセスできない!
✅ 向いている用途
- 単一ノードで完結する開発用アプリ
- キャッシュなど、失ってもよい一時データ
☁️ クラウドストレージとは?
クラウド環境(AWS、GCP、Azureなど)では、外部にあるネットワーク越しのストレージを使うことが一般的です。これらは Kubernetes の PV/PVC と組み合わせて簡単に使えます。
代表的なもの:
種類 | 概要 |
---|---|
Amazon EBS | AWSのブロックストレージ。EC2にアタッチして使う。 |
Google Persistent Disk | GCPの同様のブロックストレージ。 |
Azure Disk / Azure File | Azure上で提供されるストレージ。 |
NFS(Network File System) | ネットワーク越しのファイル共有。オンプレやNASにも使われる。 |
✅ 特徴
- 複数ノードで利用可能
- データはPodが再スケジュールされても残る
- 自動スナップショットやバックアップ機能と連携できる
✅ 向いている用途
- データベースの永続化
- 本番環境でのストレージ利用全般
- チームでのファイル共有
🆚 比較まとめ
項目 | ローカルストレージ | クラウドストレージ(EBS, NFSなど) |
---|---|---|
可搬性 | × ノード依存 | ○ 他ノードでも使える |
耐障害性 | △ ノード障害で消失の可能性あり | ○ クラウドが管理、可用性高 |
性能 | ○ 高速(物理に近い) | △ ネットワーク経由でやや遅いことも |
コスト | ○ ほぼ無料(自分のディスク) | △ クラウドの従量課金が発生 |
運用 | ○ シンプル | △ バックアップなど考慮が必要 |
💡 実務での選び方のヒント
- 開発・学習用途:MinikubeなどではローカルストレージでOK
- 本番環境(AWS/GCPなど):クラウド提供の永続ストレージを使うのが一般的
- 共有ファイルの保存:複数Podで共有したいならNFSが便利
- 高速性重視:ノードに強く依存してもよければローカルストレージ
📦 KubernetesのYAML例(EBS)
AWSでEBSを使う例(StorageClass付き):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ebs-pvc
spec:
storageClassName: gp2 # EBS用のStorageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
※クラウド環境ではStorageClassが大事になります。
🎯 まとめ
- ローカルストレージは手軽で速いが、ノード依存で消える可能性あり
- **クラウドストレージ(EBS, NFSなど)**は可搬性と安全性に優れるが、ややコストがかかる
- Kubernetesでは、PVCを使ってどちらのストレージでも同じようにアクセスできるのが大きなメリット