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 第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
  • 11 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
  • 30 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