27.12.2. FlexVolume ドライバー
FlexVolume ドライバーは、クラスター内のすべてのマシン (マスターとノードの両方) の明確に定義されたディレクトリーに格納されている実行可能ファイルです。OpenShift Container Platform は、flexVolume をソースとする PersistentVolume によって表されるボリュームの割り当て、割り当て解除、マウント、またはアンマウントが必要になるたびに FlexVolume ドライバーを呼び出します。
ドライバーの最初のコマンドライン引数は常に操作名です。その他のパラメーターは操作ごとに異なります。ほとんどの操作は、JSON (JavaScript Object Notation) 文字列をパラメーターとして取ります。このパラメーターは完全な JSON 文字列であり、JSON データを含むファイルの名前ではありません。
FlexVolume ドライバーには以下が含まれます。
-
すべての
flexVolume.options。 -
kubernetes.io/という接頭辞が付いたflexVolumeのいくつかのオプション。たとえば、fsTypeやreadwriteなどです。 -
kubernetes.io/secret/という接頭辞が付いた参照先シークレット (指定されている場合) の内容。
FlexVolume ドライバーの JSON 入力例
OpenShift Container Platform は、ドライバーの標準出力に JSON データが含まれていると想定します。指定されていない場合、出力には操作の結果が示されます。
FlexVolume ドライバーのデフォルトの出力
{
"status": "<Success/Failure/Not supported>",
"message": "<Reason for success/failure>"
}
{
"status": "<Success/Failure/Not supported>",
"message": "<Reason for success/failure>"
}
ドライバーの終了コードは、成功の場合は 0、エラーの場合は 1 です。
操作はべき等です。 つまり、すでに割り当てられているボリュームの割り当て操作や、すでにマウントされているボリュームのマウント操作は成功します。
FlexVolume ドライバーは以下の 2 つのモードで動作します。
attach/detach 操作は、OpenShift Container Platform マスターにより、ノードにボリュームを割り当てるため、およびノードからボリュームの割り当てを解除するために使用されます。これは何らかの理由でノードが応答不能になった場合に役立ちます。その後、マスターはノード上のすべての Pod を強制終了し、ノードからすべてのボリュームの割り当てを解除して、ボリュームを他のノードに割り当てることで、元のノードがまだ到達不能な状態であってもアプリケーションを再開できます。
マスター実行の、別のマシンからのボリュームの割り当て解除は、すべてのストレージバックエンドでサポートされる訳ではありません。
27.12.2.1. マスター実行の割り当て/割り当て解除がある FlexVolume ドライバー リンクのコピーリンクがクリップボードにコピーされました!
マスター制御の割り当て/割り当て解除をサポートする FlexVolume ドライバーは、以下の操作を実装する必要があります。
initドライバーを初期化します。マスターとノードの初期化中に呼び出されます。
- 引数: なし
- 実行場所: マスター、ノード
- 予期される出力: デフォルトの JSON
getvolumenameボリュームの一意の名前を返します。この名前は、後続の
detach呼び出しで<volume-name>として使用されるため、すべてのマスターとノード間で一致している必要があります。<volume-name>の/文字は自動的に~に置き換えられます。-
引数:
<json> - 実行場所: マスター、ノード
予期される出力: デフォルトの JSON +
volumeName:{ "status": "Success", "message": "", "volumeName": "foo-volume-bar" }{ "status": "Success", "message": "", "volumeName": "foo-volume-bar"1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ストレージバックエンド
fooのボリュームの一意の名前。
-
引数:
attach指定されたノードに、JSON で表現したボリュームを割り当てます。この操作は、ノード上のデバイスが既知の場合 (つまり、そのデバイスが実行前にストレージバックエンドによって割り当て済みの場合)、そのデバイスの名前を返します。デバイスが既知でない場合は、後続の
waitforattach操作によってノード上のデバイスが検出される必要があります。-
引数:
<json><node-name> - 実行場所: マスター
予期される出力: デフォルトの JSON +
device(既知の場合)。{ "status": "Success", "message": "", "device": "/dev/xvda" }{ "status": "Success", "message": "", "device": "/dev/xvda"1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ノード上のデバイスの名前 (既知の場合)。
-
引数:
waitforattachボリュームがノードに完全に割り当てられ、デバイスが出現するまで待機します。前の
attach操作から<device-name>が返された場合は、それが入力パラメーターとして渡されます。そうでない場合、<device-name>は空であり、この操作によってノード上のデバイスを検出する必要があります。-
引数:
<device-name><json> - 実行場所: ノード
予期される出力: デフォルトの JSON +
device{ "status": "Success", "message": "", "device": "/dev/xvda" }{ "status": "Success", "message": "", "device": "/dev/xvda"1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ノード上のデバイスの名前。
-
引数:
detachノードから、指定されたボリュームの割り当てを解除します。
<volume-name>は、getvolumename操作によって返されるデバイスの名前です。<volume-name>の/文字は自動的に~に置き換えられます。-
引数:
<volume-name><node-name> - 実行場所: マスター
- 予期される出力: デフォルトの JSON
-
引数:
isattachedボリュームがノードに割り当てられていることを確認します。
-
引数:
<json><node-name> - 実行場所: マスター
予期される出力: デフォルトの JSON +
attached{ "status": "Success", "message": "", "attached": true }{ "status": "Success", "message": "", "attached": true1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ノードへのボリュームの割り当てのステータス。
-
引数:
mountdeviceボリュームのデバイスをディレクトリーにマウントします。
<device-name>は、前のwaitforattach操作で返されるデバイスの名前です。-
引数:
<mount-dir><device-name><json> - 実行場所: ノード
- 予期される出力: デフォルトの JSON
-
引数:
unmountdeviceボリュームのデバイスをディレクトリーからアンマウントします。
-
引数:
<mount-dir> - 実行場所: ノード
-
引数:
その他のすべての操作は、{"status": "Not supported"} と終了コード 1 を出して JSON を返します。
マスターで実行される割り当て/割り当て解除操作はデフォルトで有効にされています。有効にされていない場合、割り当て/割り当て解除操作は、ボリュームの割り当て/割り当て解除が必要なノードで実行されます。FlexVolume ドライバー呼び出しの構文およびすべてのパラメーターはどちらの場合も同じ内容です。