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 第17章:VolumeとPersistentVolumeの基礎

Kubernetesを使っていて最初に戸惑うポイントの1つが…

Kubernetes Learning 第16章:外部アクセスとDNS、LoadBalancerのしくみ

Kubernetesの中にアプリケーションを立てただけでは、…

You Missed

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

  • 投稿者 mh
  • 5月 22, 2025
  • 6 views

Android application development 第22章:MVVMアーキテクチャ(Model-View-ViewModel)

  • 投稿者 mh
  • 5月 22, 2025
  • 5 views

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

  • 投稿者 mh
  • 5月 21, 2025
  • 21 views

Android application development 第21章:ViewModel、LiveData、DataBindingの導入

  • 投稿者 mh
  • 5月 21, 2025
  • 20 views

Kubernetes Learning 第16章:外部アクセスとDNS、LoadBalancerのしくみ

  • 投稿者 mh
  • 5月 20, 2025
  • 26 views

Android application development 第20章:非同期処理(Handler / AsyncTask / Coroutineの比較)

  • 投稿者 mh
  • 5月 20, 2025
  • 32 views