【ゼロからわかる】OpenShift環境におけるデータを保持する仕組み
0.はじめに
Openshift入門者向けに、「OpenShift環境でのデータを保持する仕組み」について解説します。
本記事をお読みいただくと、以下を知ることができます。
- 永続的な領域の必要性
- ボリュームについて
- 永続ストレージの概念
では、次の章から具体的な解説を進めます!
1.永続的な領域の必要性
コンテナ(Pod)には揮発性があり、コンテナの停止や再起動を行うとコンテナ内のデータやログは保存されずにロストしてしまいます。
実運用において、ユーザーアプリケーション、ログやメトリクス、イメージのデータに永続性がないことは望ましくないため、永続的な領域が必要となります。
さらに言うと、コンテナの可搬性を活かすため、条件に応じて自動的に割り当て可能な領域である必要があります。
HPE Blog,Japan:Dockerストレージ基礎編 (1)
このようなデータの永続化要件に対して、OpenShiftが提供する機能とリソースが、、、
- ボリューム
- Persistent Volume(永続ボリューム)
- Persistent Volume Claim(永続ボリューム要求)
の3つとなります。
次章から、順番に解説していきます。
2.ボリューム
OpenShiftでは、 ボリュームを使ってコンテナ(Pod)に外部ストレージを持つことができ、データやログを保存できます。
コンテナにマウント可能なボリュームは以下に挙げている6種類です。
Head | Head |
---|---|
emptyDir | Pod用の一時的なディスク領域として利用。PodがTerminateされると削除される |
hostPath | Node上の領域をコンテナにマウントする。hostPathにアクセス可能な実行権限(SCC)が必要 |
PVC | PVCで記述された条件に合うPV群から自動選択されたものをマウントするボリューム |
configmap | Configmapの値ごと別ファイルとしてマウントするボリューム |
secret | Secretの値ごと別ファイルとしてマウントするボリューム |
projectd | Secret/Configmap/Downward APIから値ごとに別ファイルとして組み合わせてマウントするボリューム |
この中で、永続化領域として利用できるのはhostPathとPVCだけであり、hostPathは特定のノード上に保管されるため、コンテナの可搬性を活かせるのはPVCのみです。
次章で、このPVCとPVについて解説します。
3.永続ストレージの概念(PV、PVCなど)
OpenShiftにおける永続ストレージの概念ついて、PVとPVCを中心に以下を解説します。
- PV(永続ボリューム)
- PVC(永続ボリューム要求)
- アクセスモード
- ボリュームモード
- プロビジョニング方式
- ストレージクラス
3.1.PV(永続ボリューム)
PVは、OpenShiftが外部の永続ボリュームを提供するシステムと連携して、永続化領域としてボリュームを確保した姿です。
バックエンドのストレージシステムは、OpenShiftクラスタに論理ディスクを供給し、クラスタではこれがPVとして作成されます。
3.2.PVC(永続ボリューム要求)
コンテナ(Pod)からPVをマウントするにはPVCを作成します。PVCでは、ユーザーの要求を反映するための項目を指定し、適合するPVがバインドされます。
次のような項目が代表的なものです。
- 容量(size)
- アクセスモード
- ボリュームモード
- プロビジョニング方式
- ストレージクラス
PodでPVを使う際にはPodのマニフェストにPVCを指定します。指定したPVCがバインドされていれば、PVがPodに接続されて使用できるようになります。
尚、PVCとPVは1対1で対応します。複数のPVCに1つのPVがバインドされることはありません。また、1つのPVCに複数のPVがバインドされることもありません。
次節から、PVCで指定できる代表的な項目について見ていきます。
3.3.アクセスモード
アクセスモードは、PVに対するアクセス制御を示す項目です。
アクセスモードには3つの種類があり、すべてのPVCでこれらの中から選択して指定することが求められます。
種類 | 内容 |
---|---|
Read Write Once(RWO) | 1つのWorkerノードで稼働するPodからPVへのRead/Writeを許可。ブロックストレージのようなイメージ。大半のバックエンドストレージが対応でき、最も使われる機会が多い。 |
Read Write Many(RWX) | 異なる複数のWorkerノードで稼働する複数のPodからPVへの同時Read/Writeを許可。共有して使われるNASのようなイメージ。 |
Read Only Many(ROX) | 異なる複数のWorkerノードで稼働する複数のPodからPVへ同時Readを許可。 ReadOnlyのためファイバチャネルやiSCSIといったブロックストレージでも複数PodからReadできるという特徴がある。他の2つのモードに比べると利用機会は限定的。 |
3.4.ボリュームモード
ボリュームモードは、接続したPodでPVをどのような形で使用するかを指定する項目です。
ボリュームモードではFilesystemとBlockの2つから選択して指定します。
種類 | 内容 |
---|---|
Filesystem | xfsやext4といったファイルシステムでフォーマットされ、Podのマニフェストで任意のマウントポイントでマウント可能。また、ボリュームモードを指定しない場合はFilesystemがデフォルトで使われるため、省略も可。 |
Block | Rawのブロックデバイスで利用することが可能。PVCでボリュームモードにBlockを指定し、Podのマニフェストで任意のデバイス名を指定して使用。Blockモードをサポートするバックエンドストレージは限られており、利用は限定的。 |
3.5.プロビジョニング方式
プロビジョニング方式は、バックエンドストレージでの論理ディスク作成とその領域とPVへの紐付け動作を指定する項目です。
この一連の操作には、「静的プロビジョニング」と「動的プロビジョニング」の2通りの方式があります。
種類 | 内容 |
---|---|
静的プロビジョニング | あらかじめ管理者がバックエンドストレージで論理ディスクを作成し、OpenShiftクラスタでPVとして紐づけて作っておく方式。PVCの内容に合致するPVがあればバインドされる。 |
動的プロビジョニング | PVCを作成すると、OpenShiftクラスタがバックエンドストレージと連携して動的にPVを作成する方式。あらかじめPVを作っておく必要がない代わりに、ストレージクラスというリソースでバックエンドストレージを特定する。 |
- 静的プロビジョニングのイメージ
Think IT:OpenShift:アプリケーションの構成と運用 - 動的プロビジョニングのイメージ
Think IT:OpenShift:アプリケーションの構成と運用
3.6.ストレージクラス(Storage Class)
ストレージクラスは、バックエンドストレージを抽象化する役割を持ちます。
ストレージクラスは、管理者がバックエンドストレージごとに事前に作成しておく必要があります。動的プロビジョニングを使う場合は、ストレージクラスは必須です。
なお、静的プロビジョニングでは必須ではありませんが、使うこともできます。
4.おわりに
今回は、OpenShift環境でのデータを保持する仕組みを理解するために、以下を学びました。
- 永続的な領域の必要性(コンテナ(Pod)には揮発性がある)
- ボリュームについて(ボリュームを使ってコンテナ(Pod)に外部ストレージを持つことができる)
- 永続ストレージの概念(PV、PVCなど)
今後もOpenShiftについて解説していきます。
おわり!
Discussion