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 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

You Missed

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

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

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 12 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第10章:Cloud DNS:インターネットの「電話帳」サービス

  • 投稿者 mh
  • 6月 16, 2025
  • 15 views

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

  • 投稿者 mh
  • 6月 15, 2025
  • 31 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第9章:IPアドレス(外部IP、内部IP、静的IP):GCPリソースの「住所」と「電話番号」

  • 投稿者 mh
  • 6月 14, 2025
  • 28 views

Kubernetes Learning 第35章:GitOpsとは?~Kubernetes運用をもっとスマートにする考え方~

  • 投稿者 mh
  • 6月 13, 2025
  • 52 views