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 第27章:Prometheus + Grafana の導入例 〜Kubernetesクラスタを見える化しよう〜

Kubernetes Learning 第26章:標準的なログ取得方法(kubectl logs)〜Podの中で何が起きているかをのぞいてみよう〜

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第1章:GCPの全体像とアーキテクチャの基礎

  • 投稿者 mh
  • 5月 31, 2025
  • 3 views

現場で使えるChrome DevTools実践ガイド 第7章:Performanceパネルでパフォーマンス分析

  • 投稿者 mh
  • 5月 31, 2025
  • 3 views

Kubernetes Learning 第27章:Prometheus + Grafana の導入例 〜Kubernetesクラスタを見える化しよう〜

  • 投稿者 mh
  • 5月 31, 2025
  • 3 views

Android application development 第31章:Firebase Analytics や Remote Config の活用

  • 投稿者 mh
  • 5月 31, 2025
  • 3 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : はじめに

  • 投稿者 mh
  • 5月 30, 2025
  • 8 views

現場で使えるChrome DevTools実践ガイド 第6章:Sourcesパネルでのブレークポイントとステップ実行

  • 投稿者 mh
  • 5月 30, 2025
  • 19 views