インスタンスのルートファイルシステムを格納する ブート・ボリューム は、OSを停止することなく動的にその容量を拡張することが可能です。
ただこの動的拡張は、OCIコンソールやインスタンスOSで複数のオペレーションを実施する必要があり、ノード数が多くなるクラスタ環境の計算/GPUノードでは、これらのオペレーションを効率的に実施することが求められます。
本テクニカルTipsは、HPC/GPUクラスタの多数の計算/GPUノードに対し、 ブート・ボリューム の動的拡張を効率的に実施する方法を解説します。
0. 概要
インスタンスの ブート・ボリューム の動的拡張は、以下のステップを経て行います。
- ブート・ボリューム 拡張(OCI上で実行)
- ブート・ボリューム の再スキャン(インスタンスOS上で実行)
- パーティションの拡張(インスタンスOS上で実行)
ステップ 1. は、OCIリソースに対するオペレーションのため、OCIコンソールや OCI CLI 等のインターフェースを介して行い、ステップ 2. と 3. は、インスタンスOSに対してコマンドを実行して行います。
本テクニカルTipsは、多数の計算/GPUノードに対してこれらのオペレーションを効率よく行う事を想定しています。
このため、通常HPC/GPUクラスタのクラスタ管理ノードとして使用するBastionノードを活用し、ここからコマンドラインインターフェースで ブート・ボリューム の動的拡張のためのオペレーションを実行します。
なおBastionノードと計算ノードのOSは、 Oracle Linux を前提とします。
Bastionノードで使用するコマンドラインインターフェースは、ステップ 1. に OCI CLI 、ステップ 2. と 3. に pdsh を使用します。
このため、予めBastionノードで OCI CLI と pdsh を利用できるよう準備します。
以降の章は、以上のステップに沿って具体的な手順を解説します。
pdsh の詳細は、 OCI HPCテクニカルTips集 の pdshで効率的にクラスタ管理オペレーションを実行 を参照ください。
1. Bastionノード事前準備
本章は、Bastionノードで OCI CLI と pdsh を利用するための手順を解説します。
本テクニカルTipsでは、 OCI CLI と pdsh 実行ユーザをopcとします。
-
OCI CLI をOCI公式マニュアルの ここ の手順に従ってインストール・セットアップします。
-
pdsh を OCI HPCテクニカルTips集 の pdshで効率的にクラスタ管理オペレーションを実行 の ここ の手順に従ってインストール・セットアップします。
2. ブート・ボリューム拡張
本章は、Bastionノードで OCI CLI と pdsh を使用し、HPC/GPUクラスタ内の全計算/GPUノードの ブート・ボリューム のサイズを拡張します。
この際予め、対象の計算/GPUノードのホスト名を1行に1ノード記載したホストリストファイルを、カレントディレクトリにhostlist.txtとして用意します。
-
以下コマンドをBastionノードのopcユーザで実行し、 ブート・ボリューム を拡張する計算/GPUノードのOCIDのリストをテキストファイル(instance_ocid.txt)として作成します。
なお、 コマンド中の コンパートメント のOCIDを指定する箇所は、計算/GPUノードを格納する コンパートメント のOCIDに置き換えます。$ for hname in `cat ./hostlist.txt`; do echo $hname; oci compute instance list --compartment-id compartment_ocid --display-name $hname | jq -r '.data[].id' >> ./instance_ocid.txt; done
-
以下のコマンドをBastionノードのopcユーザで実行し、拡張する ブート・ボリューム のOCIDのリストをテキストファイル(bv_ocid.txt)として作成します。
なお、コマンド中の コンパートメント のOCIDと 可用性ドメイン を指定する箇所は、計算/GPUノードを格納する コンパートメント のOCIDと 可用性ドメイン に置き換えます。$ for inst_ocid in `cat ./instance_ocid.txt`; do echo $inst_ocid; oci compute boot-volume-attachment list --availability-domain ad_name --compartment-id compartment_ocid --instance-id $inst_ocid | jq -r '.data[]."boot-volume-id"' >> bv_ocid.txt; done
-
以下のコマンドをBastionノードのopcユーザで実行し、 ブート・ボリューム を指定のサイズに拡張し、コマンドの出力に拡張後のサイズが表示されることを以って、正しく拡張が行われたことを確認します。
なお、コマンド中の ブート・ボリューム サイズは、実際の拡張後のサイズに置き換えます。$ for bv_ocid in `cat ./bv_ocid.txt`; do echo $bv_ocid; oci bv boot-volume update --boot-volume-id $bv_ocid --size-in-gbs 500 | jq -r '.data."size-in-gbs"'; done ocid1.bootvolume.oc1.eu-frankfurt-1.xxxx 500 ocid1.bootvolume.oc1.eu-frankfurt-1.yyyy 500 $
-
以下のコマンドをBastionノードのopcユーザで実行し、 ブート・ボリューム の再スキャンを実行し、コマンドの出力にリターンコード0が表示されることを以って、正しく再スキャンが行われたことを確認します。
$ pdsh -w ^/home/opc/hostlist.txt 'sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1 > /dev/null 2>&1; echo $?' | dshbak -c ---------------- inst-9bw0h-x9-ol87,inst-nbho9-x9-ol87 ---------------- 0 $ pdsh -w ^/home/opc/hostlist.txt "echo 1 | sudo tee /sys/class/block/\`readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2\`/device/rescan > /dev/null; echo $?" | dshbak -c ---------------- inst-9bw0h-x9-ol87,inst-nbho9-x9-ol87 ---------------- 0 $
-
以下のコマンドをBastionノードのopcユーザで実行し、パーティションの拡張を実行し、コマンドの出力にリターンコード0が表示されることを以って、正しくパーティションの拡張が行われたことを確認します。
$ pdsh -w ^/home/opc/hostlist.txt 'sudo /usr/libexec/oci-growfs -y > /dev/null; echo $?' | dshbak -c ---------------- inst-9bw0h-x9-ol87,inst-nbho9-x9-ol87 ---------------- 0 $
3. ルートファイルシステムサイズ確認
本章は、計算/GPUノードのルートファイルシステムサイズを表示し、想定通りのサイズに拡張されているかどうかを確認します。
以下コマンドをBastionノードのopcユーザで実行し、コマンドの出力で計算/GPUノードの拡張後のルートファイルシステムのサイズを確認します。
$ pdsh -w ^/home/opc/hostlist.txt "df -h / | awk '{print \$2}'" | dshbak -c
----------------
inst-9bw0h-x9-ol87,inst-nbho9-x9-ol87
----------------
Size
489G