Kubernetes Learning 第18章:PVC(PersistentVolumeClaim)の使い方

アプリケーションがログファイルやデータベースのデータなど、再起動しても失われては困るデータを扱うとき、Kubernetesでは PersistentVolumeClaim(PVC) を使って「永続的なストレージ」を Pod に提供します。

この章では、「PVCって何?」「どうやって使うの?」という疑問に答えていきます。


💡 PVCって何?

PVC(PersistentVolumeClaim)は、Kubernetesリソースのひとつで、「○GBぐらいのストレージがほしい!」という**ユーザー側の要求(リクエスト)**を表します。

その要求に合う PersistentVolume(PV:実際の物理・仮想ストレージ)がクラスターに存在していれば、自動的にバインド(紐づけ)され、Podからそのストレージを使えるようになります。


🏗️ PVCを使う流れ

PVCの基本的な使い方は、次の3ステップです。


✅ ステップ1:PVCの定義を書く(YAML)

以下は 1Gi のストレージを要求するシンプルなPVCの例です。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  • accessModes: アクセス方法(ReadWriteOnce は 1 Pod から書き込み可能)
  • resources.requests.storage: ほしいサイズ

※ ストレージクラスを指定すれば、動的にPVが作られます(Cloud環境ではほぼ必須)


✅ ステップ2:Pod(やDeployment)からマウントする

上で作った PVC を Pod で使うには、YAMLの中で volumesvolumeMounts を指定します。

apiVersion: v1
kind: Pod
metadata:
  name: web-pod
spec:
  containers:
    - name: web
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /usr/share/nginx/html
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

この例では、Nginx の /usr/share/nginx/html ディレクトリが PVC で指定したストレージにマウントされます。


✅ ステップ3:アプリの中でファイルを保存してみる

この状態でアプリケーション(たとえばNginxやSpring Bootなど)がファイルを書き込めば、それらはPodが削除された後も残り続けます。Podを再作成しても、同じPVCを使えば同じデータにアクセス可能です。


🔍 よくあるポイント・補足

▶ 動的プロビジョニングと StorageClass

クラウド環境やMinikubeでは、PVCを作成するだけで自動的にPVが生成されます(これを動的プロビジョニングと呼びます)。

spec:
  storageClassName: standard

このように storageClassName を指定することで、裏側でストレージが自動生成される仕組みです。

▶ PVCの状態確認

PVCが正しくPVとバインドされたかは以下で確認できます:

kubectl get pvc
kubectl describe pvc my-pvc

▶ Pod作成時にPVCがバインドされていないとどうなる?

Podは「PVCがバインドされるまで保留状態」になります。PVCに合うPVが見つからないと、Podも動き出しません。


🎯 実務での活用例

  • データベース(MySQL、PostgreSQLなど)の /var/lib/mysql をPVCで永続化
  • ファイルアップロードを受け付けるWebアプリの /uploads ディレクトリにマウント
  • キャッシュやセッションデータの保存場所としての活用

📋 まとめ

用語内容
PersistentVolume(PV)管理者が用意するストレージ本体
PersistentVolumeClaim(PVC)開発者・ユーザーが出すストレージ要求
PodPVCを介してストレージを使う
  • PVCは「ストレージ使わせて!」という宣言
  • Podから簡単に使えるようになる
  • 実運用では StorageClass とセットで動的プロビジョニングが基本

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
  • 111 views

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

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