2.8. FlexVolume を使用した永続ストレージ
OpenShift Container Platform は、ドライバーとのインターフェースに実行可能なモデルを使用する out-of-tree 形式のプラグイン、FlexVolume をサポートします。
組み込みプラグインがないバックエンドのストレージを使用する場合は、FlexVolume ドライバーを使用して OpenShift Container Platform を拡張し、アプリケーションに永続ストレージを提供できます。
Pod は、flexvolume
の in-tree 形式のプラグインを使用して FlexVolume ドライバーと対話します。
追加の参考資料
2.8.1. FlexVolume ドライバーについて
FlexVolume ドライバーは、クラスター内のすべてのノードの明確に定義されたディレクトリーに格納されている実行可能ファイルです。OpenShift Container Platform は、flexVolume
をソースとする PersistentVolume
によって表されるボリュームのマウントまたはアンマウントが必要になるたびに FlexVolume ドライバーを呼び出します。
OpenShift Container Platform では、FlexVolume について割り当ておよび割り当て解除の操作はサポートされません。
2.8.2. FlexVolume ドライバーの例
FlexVolume ドライバーの最初のコマンドライン引数は常に操作名です。その他のパラメーターは操作ごとに異なります。ほとんどの操作は、JSON (JavaScript Object Notation) 文字列をパラメーターとして取ります。このパラメーターは完全な JSON 文字列であり、JSON データを含むファイルの名前ではありません。
FlexVolume ドライバーには以下が含まれます。
-
すべての
flexVolume.options
。 -
kubernetes.io/
というプレフィックスが付いたflexVolume
のいくつかのオプション。 たとえば、fsType
やreadwrite
などです。 -
kubernetes.io/secret/
というプレフィックスが付いた参照先シークレット (指定されている場合) の内容。
FlexVolume ドライバーの JSON 入力例
{ "fooServer": "192.168.0.1:1234", 1 "fooVolumeName": "bar", "kubernetes.io/fsType": "ext4", 2 "kubernetes.io/readwrite": "ro", 3 "kubernetes.io/secret/<key name>": "<key value>", 4 "kubernetes.io/secret/<another key name>": "<another key value>", }
OpenShift Container Platform は、ドライバーの標準出力に JSON データが含まれていると想定します。指定されていない場合、出力には操作の結果が示されます。
FlexVolume ドライバーのデフォルトの出力例
{ "status": "<Success/Failure/Not supported>", "message": "<Reason for success/failure>" }
ドライバーの終了コードは、成功の場合は 0
、エラーの場合は 1
です。
操作はべき等です。 すでに割り当てられているボリュームのマウント操作は成功します。
2.8.3. FlexVolume ドライバーのインストール
OpenShift Container Platform を拡張するために使用される FlexVolume ドライバーはノードでのみ実行されます。FlexVolume を実装するには、呼び出す操作の一覧とインストールパスのみが必要になります。
前提条件
FlexVolume ドライバーは、以下の操作を実装する必要があります。
init
ドライバーを初期化します。すべてのノードの初期化中に呼び出されます。
- 引数: なし
- 実行場所: ノード
- 予期される出力: デフォルトの JSON
mount
ボリュームをディレクトリーにマウントします。これには、デバイスの検出、その後のデバイスのマウントを含む、ボリュームのマウントに必要なあらゆる操作が含まれます。
-
引数:
<mount-dir>
<json>
- 実行場所: ノード
- 予期される出力: デフォルトの JSON
-
引数:
unmount
ボリュームをディレクトリーからアンマウントします。これには、アンマウント後にボリュームをクリーンアップするために必要なあらゆる操作が含まれます。
-
引数:
<mount-dir>
- 実行場所: ノード
- 予期される出力: デフォルトの JSON
-
引数:
mountdevice
- ボリュームのデバイスを、個々の Pod がマウントをバインドするディレクトリーにマウントします。
この呼び出しでは FlexVolume 仕様に指定される「シークレット」を渡しません。ドライバーでシークレットが必要な場合には、この呼び出しを実装しないでください。
-
引数:
<mount-dir>
<json>
- 実行場所: ノード
予期される出力: デフォルトの JSON
unmountdevice
- ボリュームのデバイスをディレクトリーからアンマウントします。
-
引数:
<mount-dir>
- 実行場所: ノード
予期される出力: デフォルトの JSON
-
その他のすべての操作は、
{"status": "Not supported"}
と終了コード1
を出して JSON を返します。
-
その他のすべての操作は、
手順
FlexVolume ドライバーをインストールします。
- この実行可能ファイルがクラスター内のすべてのノードに存在することを確認します。
- この実行可能ファイルをボリュームプラグインのパス (/etc/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>) に配置します。
たとえば、ストレージ foo
の FlexVolume ドライバーをインストールするには、実行可能ファイルを /etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo に配置します。
2.8.4. FlexVolume ドライバーを使用したストレージの使用
OpenShift Container Platform の各 PersistentVolume
オブジェクトは、ストレージバックエンドの 1 つのストレージアセット (ボリュームなど) を表します。
手順
-
インストールされているストレージを参照するには、
PersistentVolume
オブジェクトを使用します。
FlexVolume ドライバーを使用した永続ボリュームのオブジェクト定義例
apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 1 spec: capacity: storage: 1Gi 2 accessModes: - ReadWriteOnce flexVolume: driver: openshift.com/foo 3 fsType: "ext4" 4 secretRef: foo-secret 5 readOnly: true 6 options: 7 fooServer: 192.168.0.1:1234 fooVolumeName: bar
- 1
- ボリュームの名前。これは Persistent Volume Claim (永続ボリューム要求) を使用するか、または Pod からボリュームを識別するために使用されます。この名前は、バックエンドストレージのボリューム名とは異なるものにすることができます。
- 2
- このボリュームに割り当てられるストレージの量。
- 3
- ドライバーの名前。このフィールドは必須です。
- 4
- ボリュームに存在するオプションのファイルシステム。このフィールドはオプションです。
- 5
- シークレットへの参照。このシークレットのキーと値は、起動時に FlexVolume ドライバーに渡されます。このフィールドはオプションです。
- 6
- 読み取り専用のフラグ。このフィールドはオプションです。
- 7
- FlexVolume ドライバーの追加オプション。
options
フィールドでユーザーが指定するフラグに加え、以下のフラグも実行可能ファイルに渡されます。"fsType":"<FS type>", "readwrite":"<rw>", "secret/key1":"<secret1>" ... "secret/keyN":"<secretN>"
シークレットは、呼び出しのマウント/マウント解除を目的とする場合にのみ渡されます。