インストールスクリプトは、クラスターが完全に初期化された後 (すべてのノードが起動し、選択したソフトウェアがインストールされた後) に、すべてのクラスターノードで自動的に実行されます。このスクリプトを使用すると、手動での介入なしに追加のソフトウェアをインストールしたり、ソフトウェア環境をデプロイしたりできます。
利用シーン
パブリックイメージからクラスターを作成した後、ソフトウェアをインストールするか、ソフトウェア環境をセットアップします。
カスタムイメージからクラスターを作成した後、カスタムスクリプトを実行してソフトウェア環境をデプロイします。
前提条件
開始する前に、以下が準備できていることを確認してください:
E-HPC クラスター (または作成中のクラスター)
Bash や Python など、Linux シェルと互換性のある言語で記述されたスクリプト
インストールスクリプトの設定
「[クラスタの作成]」ページで、ソフトウェア設定 ステップに移動し、「[詳細設定]」セクションを見つけて、インストールスクリプトを追加します。
スクリプトは、Linux シェルでサポートされている言語で記述する必要があります。最初の行では、シェバンを使用してインタープリターを宣言する必要があります。たとえば、Bash スクリプトは次のように始まります:
#!/bin/bashスクリプトの例
以下のスクリプトは、クラスターの環境変数、メタデータ、およびノードのロールを、/root ディレクトリ内のファイルにログに記録します。このスクリプトでは、条件付きブロックを使用して、各ノードタイプで異なるロジックを実行します。
#!/bin/bash
echo "call $0 with param: $@" | tee /root/command.log
## 利用可能なすべての環境変数を表示
printenv | tee /root/env.log
## クラスターのメタデータ
echo "ClusterId: ${ClusterId}, HOSTNAME: ${HOSTNAME}" | tee /root/cluster.log
echo "AccountType: ${AccountType}, SchedulerType: ${SchedulerType}" | tee -a /root/cluster.log
## 現在のマシンのロール
echo "${Role}" | tee /root/role.log
if [ "${isLoginNode}" == "true" ]; then
## ログインノードで作業を実行
echo "This is login node" | tee -a /root/role.log
exit $?
fi
if [ "${isAccountManager}" == "true" ]; then
## NIS/LDAP マスターで作業を実行
echo "This is account manager" | tee -a /root/role.log
exit $?
fi
if [ "${isResourceManager}" == "true" ]; then
## Slurm/PBS マスターで作業を実行
echo "This is scheduler" | tee -a /root/role.log
exit $?
fi
if [ "${isComputeNode}" == "true" ]; then
## コンピュートノードで作業を実行
echo "This is compute node" | tee -a /root/role.log
exit $?
fiこのスクリプトをダウンロードするには、「サンプルインストールスクリプト」をご参照ください。
環境変数
E-HPC は、スクリプトを実行する前に各ノードに環境変数を挿入します。これらの変数を使用して、クラスター、現在のノード、およびそのロールを識別し、異なるノードタイプで異なるロジックを実行できます。
クラスターとノードの ID
| 変数 | 例 | 説明 |
|---|---|---|
ClusterId | ehpc-hz-AQoy7J**** | クラスターの ID。 |
HOSTNAME | i-bp133vs16yb3kqdj**** | 現在のノードのホスト名。 |
AccountType | NIS | ドメインアカウントのタイプ。有効値: NIS、LDAP。 |
SchedulerType | PBS | スケジューラのタイプ。有効値: PBS、SLURM、GRIDENGINE。 |
ノードのロール
Role 変数は、現在のノードが果たすロールを示します。ノードが複数のロールを持つ場合、その値にはカンマ (,) で区切られた複数のロール名が含まれます。
| 変数 | 例 | 有効値 |
|---|---|---|
Role | AccountManager | AccountManager — プライマリドメインアカウントの管理ノードAccountManagerBackup — セカンダリドメインアカウントの管理ノードResourceManager — プライマリスケジューリングノードResourceManagerBackup — セカンダリスケジューリングノードCompute — コンピュートノードLoginNode — ログインノード |
素早い条件チェックには、Role の解析を行う代わりに、以下の boolean 変数を使用してください。
ブール型のノードタイプフラグ
| 変数 | 例 | 説明 |
|---|---|---|
isLoginNode | true | ノードがログインノードであるかどうか。有効値: true、false。 |
isAccountManager | true | ノードがプライマリドメインサーバーであるかどうか。有効値: true、false。 |
isAccountManagerBackup | true | ノードがセカンダリドメインサーバーであるかどうか。有効値: true、false。 |
isResourceManager | true | ノードがプライマリスケジューラであるかどうか。有効値: true、false。 |
isResourceManagerBackup | true | ノードがセカンダリスケジューラであるかどうか。有効値: true、false。 |
isComputeNode | true | ノードがコンピュートノードであるかどうか。有効値: true、false。 |
ネットワークアドレス
| 変数 | 例 | 説明 |
|---|---|---|
ResourceManagerIp | 192.168.. | プライマリスケジューリングノードのプライベート IP アドレス。 |
ResourceManagerHost | scheduler000 | プライマリスケジューリングノードのホスト名。 |
AccountManagerIp | 192.168.. | プライマリドメインアカウントの管理ノードのプライベート IP アドレス。 |
AccountManagerHost | account000 | プライマリドメインアカウントの管理ノードのホスト名。 |
以下の変数は、高可用性が有効になっている場合に設定されます。
| 変数 | 例 | 説明 |
|---|---|---|
ResourceManagerBackupIp | 192.168.. | セカンダリスケジューリングノードのプライベート IP アドレス (高可用性が有効な場合)。 |
ResourceManagerBackupHost | scheduler001 | セカンダリスケジューリングノードのホスト名 (高可用性が有効な場合)。 |
AccountManagerBackupIp | 192.168.. | セカンダリドメインアカウントの管理ノードのプライベート IP アドレス (高可用性が有効な場合)。 |
AccountManagerBackupHost | account001 | セカンダリドメインアカウントの管理ノードのホスト名 (高可用性が有効な場合)。 |
失敗シナリオ
以下の状況では、スクリプトは実行されません:
クラスター作成の失敗:クラスターの作成に失敗した場合、どのノードでもスクリプトは実行されません。
単一ノードが実行されていない:正常なクラスター内の特定のコンピュートノードが期待どおりに実行されていない場合、そのノードではスクリプトは実行されません。
ゼロ以外の終了コード: スクリプトが
0以外のコードで終了した場合、実行は失敗と見なされます。
ゼロ以外の終了コードによる障害を調査するには、E-HPC コンソールの [操作ログ] ページでアラート情報を確認します。詳細については、クラスターにログインし、影響を受けるノードの /root にあるログファイルを確認してください。