🗃️

【ゼロからわかる】OpenShift環境におけるデータを保持する仕組み

2024/07/28に公開

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