2026年7月28日

2026年7月28日

KubernetesのPersistentVolumeを設定する方法

はじめに

本記事では、Kubernetes上でデータ永続化を実現するためにPersistentVolume(以下PV)を使用する方法について解説します。PVはアプリケーションが持つデータを持久化し、ノードの再起動やスケールアップ/ダウンにも対応できるようにすることが可能です。

症状・背景

PersistentVolumeが必要になる主な場面としては以下の通りです:

  • データの永続化: アプリケーションが持つデータをノード間で共有し、ローカルディスクの失敗やアップデートによる影響から保護する必要がある場合。
  • スケーリング時のデータ管理: ノードの追加や削除時にデータが失われるのを防ぐために、アプリケーションのデータを外部ストレージに保存する必要がある場合。
  • 複数アプリケーション間でのデータ共有: 複数のアプリケーションが同一のデータセットにアクセスする必要がある場合。

手順・設定方法

ステップ1: PVとPersistentVolumeClaim(以下PVC)を作成する

# PersistentVolumeの定義ファイルを作成 (pv.yaml)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  # ストレージクラスの指定 (オプション)
  # storageClassName: "slow"

# PersistentVolumeClaimの定義ファイルを作成 (pvc.yaml)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

ステップ2: PVとPVCを適用する

# pv.yamlを適用
kubectl apply -f pv.yaml

# pvc.yamlを適用
kubectl apply -f pvc.yaml

ステップ3: PVCを使用してPodを作成する

# pod.yamlに以下を記述
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: nginx
      volumeMounts:
        - mountPath: /data
          name: example-data
  volumes:
    - name: example-data
      persistentVolumeClaim:
        claimName: example-pvc

# pod.yamlを適用
kubectl apply -f pod.yaml

ステップ4: 実践/トラブルシュート/監視

# Pod内のコンテナが正常に起動していることを確認する
kubectl get pods

# PVCの使用状況を確認する
kubectl get pvc

注意事項

  • ストレージクラスの指定: ストレージクラスを明示的に指定することで、特定のバックエンドストレージ(例: AWS EBS, GCE PD)を利用できます。
  • PVとPVCのリソース管理: PVは一方向的なリソースであり、PVCは二方向的なリソースです。適切な容量を確保することが重要です。
  • ローカルストレージ: ローカルディスクを使用する場合は、local ストレージクラスを利用します。

まとめ

1. PersistentVolumeの作成: PVは一回限りで定義され、PVCは多次数で再利用できます。

2. PersistentVolumeClaimの作成: PVCはPodが使用する持久化データを宣言します。

3. Podとの連携: Pod内でPVCをマウントすることで、アプリケーションが持つデータを永続化します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ