Persistent VolumeとClaim
Persistent VolumeとPersistent Volume Claimを使って、Podに永続的なストレージを提供する方法を理解します。
「Persistent VolumeとClaim」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Podと一時データ
Podは作成と削除を繰り返しますが、アプリケーションのデータは残しておく必要があることがよくあります。データベースやユーザーがアップロードしたファイルを考えてみてください。
- Podが再起動または再スケジュールされると、コンテナーのファイルシステム内に直接保存されたデータは失われます。
- この一時的な性質はステートレスなアプリケーションには適していますが、重要なデータには永続的な保存方法が必要です。
- Kubernetesには、Podのライフサイクルをまたいで存続する永続ストレージを管理する強力な仕組みがあります。
PersistentVolume: クラスターのストレージ
PersistentVolume(PV)は、Kubernetesクラスター内のストレージです。
- クラスターをスコープとするリソースであり、特定のnamespaceには属しません。
- PVは管理者がプロビジョニングするか、StorageClassによって動的にプロビジョニングされます。
- 基盤となるストレージ技術(例: Google Persistent Disk、AWS EBS、NFS共有)の詳細を抽象化します。
PersistentVolumeを定義する
PVには、容量、アクセスモード、ストレージの種類などの詳細を定義します。次のYAMLは、5ギガバイトのストレージを持つhostPath(ローカルテスト用)のPVを定義しています。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-local-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"
注: hostPathは通常、単一ノードでの開発に使用するものであり、本番環境には推奨されません。
PersistentVolumeClaim: Podの要求
PersistentVolumeClaim(PVC)は、特定のnamespace内でユーザーまたはアプリケーションが行うストレージ要求です。
- PodはPVを直接利用せず、PVCを通じてストレージを要求します。
- PVCはnamespaceをスコープとするため、特定のプロジェクトやチームの領域に属します。
- 必要なサイズ、アクセスモード、必要に応じてStorageClassを指定します。
PVとPVC: マッチングの仕組み
Kubernetesはバインディングと呼ばれる処理によって、PVCと利用可能なPVを自動的に対応付けます。
- PVCが作成されると、KubernetesはPVCの要件(サイズ、アクセスモード、StorageClass)を満たすPVを探します。
- 適切なPVが見つかると、両者は1対1の関係で「バインド」されます。
- このバインディングにより、PVCは要求した特定のストレージを利用できます。
PVとPVCのアクセスモード
アクセスモードは、ストレージをPodにどのようにマウントして使用できるかを定義します。これらのモードをPVCが要求し、PVがサポートします。
- ReadWriteOnce(RWO): 1つのノードがボリュームを読み書き可能な状態でマウントできます。
- ReadOnlyMany(ROX): 複数のノードがボリュームを読み取り専用でマウントできます。
- ReadWriteMany(RWX): 複数のノードがボリュームを読み書き可能な状態でマウントできます。
利用できるモードは、使用するストレージプロバイダーによって異なります。
自動化のためのStorageClass
StorageClassを使うと、管理者はストレージの「クラス」(例: 「fast-ssd」、「slow-hdd」)を定義できます。
- PVを手動で作成する代わりに、PVCが要求したときにStorageClassでPVを動的にプロビジョニングできます。
- 事前に定義したテンプレートに基づいてPVの作成を自動化できます。
- ストレージのプロビジョニングと利用を分離できるため、ユーザーにとって扱いやすくなります。
PVCの作成例
1ギガバイトのストレージをReadWriteOnceアクセスで要求するPVCを作成してみましょう。このPVCは既存のPVを探すか、StorageClassを通じて動的プロビジョニングを開始します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-app-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard # Optional: if you have a 'standard' StorageClass
これをpvc.yamlとして保存し、kubectl apply -f pvc.yamlで適用します。
PodでPVCを使用する
PVCがバインドされると、Podはボリューム設定でPVCの名前を参照して利用できます。Podが基盤となるPVを知る必要はなく、PVCだけを参照すればよいのです。
apiVersion: v1
kind: Pod
metadata:
name: my-data-pod
spec:
containers:
- name: data-container
image: busybox
command: ["/bin/sh", "-c", "echo 'Hello from CoddyKit!' > /mnt/data/hello.txt && sleep 3600"]
volumeMounts:
- name: persistent-storage
mountPath: /mnt/data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: my-app-pvc
このPodは、マウントされた永続ボリュームにファイルを書き込みます。
PVとPVCを監視する
kubectlを使うと、永続ストレージリソースの状態を監視できます。
- すべてのPVを表示する:
kubectl get pv - namespace内のすべてのPVCを表示する:
kubectl get pvc - 状態やイベントなどの詳細情報を取得する:
kubectl describe pv <pv-name>kubectl describe pvc <pvc-name>
PVがBoundになっており、PVCが正しいPVにBoundされていることを確認してください。
PVとPVCの違いを理解する
あるユーザーが、50GBの永続ストレージを必要とするデータベースをデプロイしようとしています。ユーザーのアプリケーションから見た、このストレージへの要求を直接表すKubernetesリソースはどれでしょうか。
永続ストレージのまとめ
Kubernetesがアプリケーションの永続ストレージを管理する方法について学びました。
- PersistentVolume(PV)はクラスターリソースで、実際のストレージを表します。
- PersistentVolumeClaim(PVC)は、ユーザーによるストレージ要求です。
- Kubernetesは要件に基づいて、PVCを適切なPVにバインドします。
- アクセスモードはストレージの使用方法(RWO、ROX、RWX)を定義します。
- StorageClassはPVの動的プロビジョニングを可能にし、セットアップを自動化します。
この仕組みにより、Podが作成と削除を繰り返してもアプリケーションデータが保持され、ステートフルなアプリケーションの信頼性が高まります。
よくある質問
「Persistent VolumeとClaim」レッスンは無料ですか?
はい。「Persistent VolumeとClaim」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Persistent VolumeとClaim」で何を学びますか?
Persistent VolumeとPersistent Volume Claimを使って、Podに永続的なストレージを提供する方法を理解します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Persistent VolumeとClaim」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 設定のためのConfigMaps
- 機密データのためのSecrets
- Persistent VolumeとClaim
- StorageClassと動的プロビジョニング