Kubernetesのストレージ管理|PersistentVolume・PVC・StorageClassとEBSの動的プロビジョニング

現場実践|Kubernetesストレージ管理
Kubernetesのストレージ管理|PersistentVolume・PVC・StorageClassとEBSの動的プロビジョニング
「KubernetesでDBのデータを永続化したい」「PodをスケールするたびにデータがなくなってしまUる」——KubernetesのPersistentVolume・PersistentVolumeClaim・StorageClass・AWS EBSの動的プロビジョニングを解説します。
💡 Kubernetesのコンテナはデフォルトではデータが永続化されません。PV・PVCを使ってEBSやEFSをPodにマウントすることで、Pod再起動・再スケジュールでもデータを保持できます。
1. PV・PVC・StorageClassの関係
PersistentVolume(PV)は管理者が用意した実際のストレージリソース(EBSボリューム等)です。PersistentVolumeClaim(PVC)は開発者がストレージの「要求」を定義するリソースです。StorageClassを使うと「PVCを作成したときに自動でEBSを作成してPVとしてバインドする」動的プロビジョニングが実現できます。
2. EBS CSIドライバーによる動的プロビジョニング
# StorageClassの定義(EBS gp3)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-gp3
provisioner: ebs.csi.aws.com
parameters:
type: gp3
encrypted: "true"
volumeBindingMode: WaitForFirstConsumer
---
# PersistentVolumeClaimの定義
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: ebs-gp3
resources:
requests:
storage: 20Gi
---
# PodにPVCをマウント
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
template:
spec:
containers:
- name: postgres
image: postgres:15
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: postgres-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ebs-gp3
resources:
requests:
storage: 20Gi3. EBSとEFSの使い分け
- EBS(ReadWriteOnce):1つのPodのみからマウント可能。データベース・ステートフルアプリに使う。EBS CSIドライバーで動的プロビジョニング可能
- EFS(ReadWriteMany):複数PodからNFSで同時マウント可能。共有ファイルストレージ・WordPressのメディアファイル等に使う。EFS CSIドライバーが必要
📌 この記事のポイント
- StorageClassをgp3・暗号化ありで定義してWaitForFirstConsumerにすることでEBSの動的プロビジョニングが実現する
- StatefulSetのvolumeClaimTemplatesでPod毎に個別のEBSを自動作成・マウントする設計が本番DBの標準
- EBSはReadWriteOnce(1Pod)・EFSはReadWriteMany(複数Pod同時)でデータの性質に応じて選択する
キャリアの疑問、一緒に解決しませんか?
Infra Academyでは、インフラ系ITエンジニアを目指す方への個別サポートを行っています。2026年7月からフリーランス講師として本格始動予定です。
ABOUT ME




