Kubernetes Learning 第17章:VolumeとPersistentVolumeの基礎

Kubernetesを使っていて最初に戸惑うポイントの1つが「Podの中でデータが保存されない」という問題です。この章ではその理由と、それを解決するための Volume、PersistentVolume(PV)、PersistentVolumeClaim(PVC)の考え方を学びます。


❓ なぜVolumeが必要なのか?

Kubernetesでは、Pod内のコンテナが一時的にデータを保存できますが、そのライフサイクルは非常に短いです。

例えば:

  • Podが再起動されたら → データは消える
  • 新しいPodに置き換えられたら → データは引き継がれない

つまり、アプリケーションのログ、DBデータ、ファイルアップロードなどを残したい場合、何らかの外部ストレージが必要になります。

ここで登場するのが Kubernetes の Volume です。


📦 Volumeとは?

KubernetesにおけるVolumeは、コンテナにマウントできるファイルの保存領域です。以下のような種類があります:

Volumeタイプ説明
emptyDirPodが動いている間だけの一時領域
hostPathNode上のディレクトリをマウントする
configMap/secret設定や機密データをファイルとして提供
persistentVolumeClaim外部ストレージをPodに接続する(後述)

emptyDirhostPath は簡単に使えますが、Podが再スケジュールされたらデータは失われます。


💾 PersistentVolume(PV)とPersistentVolumeClaim(PVC)

本格的に永続化するには、**PersistentVolume(PV)とPersistentVolumeClaim(PVC)**という仕組みを使います。

用語の整理:

用語役割
PV (PersistentVolume)管理者があらかじめ用意しておく「物理的なストレージ」リソース(NFS, AWS EBSなど)
PVC (PersistentVolumeClaim)ユーザーが「ストレージを使いたい!」と要求する宣言
PodPVCを通してPVにアクセスする

ざっくり言うと、PVは「空いてる倉庫」、PVCは「これくらいの広さの倉庫がほしい」、Podは「そこに荷物を置く」感じです。


🔧 使い方の流れ(例)

  1. 管理者が PersistentVolume を用意(静的プロビジョニング)
  2. ユーザーが PersistentVolumeClaim を作成
  3. Kubernetesが適合するPVを探してPVCとバインド
  4. PodがそのPVCをVolumeとしてマウント

🧪 シンプルな例(YAML)

# PersistentVolumeClaimの例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
# PodがPVCを使う例
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
    - name: app
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: my-storage
  volumes:
    - name: my-storage
      persistentVolumeClaim:
        claimName: my-pvc

📌 動的プロビジョニングとは?

クラウド環境では、StorageClass を使えば、PVCを書くだけで PV を自動的に作成できます(これを動的プロビジョニングと呼びます)。非常に便利なので、実運用ではこのパターンが主流です。


📋 まとめ

  • Podの中のデータは基本的に永続化されない
  • 永続化したいなら Volume + PersistentVolume + PersistentVolumeClaim を使う
  • PVC = 倉庫のリクエスト/PV = 実際のストレージ
  • 動的プロビジョニングを使えば、PVを自動で用意してくれる

mh

Related Posts

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

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

You Missed

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

  • 投稿者 mh
  • 6月 24, 2025
  • 88 views

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

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

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

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

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

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

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

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

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

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