Azure CycleCloud クラスター テンプレートについて説明する
Azure CycleCloud によって、HPC クラスターのテンプレート ベースのデプロイが提供されます。 Azure CycleCloud アプリケーションには、Slurm、PBSPro、LSF、Grid Engine、HT-Condor など、最も一般的なクラスター スケジューラのデプロイ用の複数の組み込みテンプレートが、既定で含まれています。 Azure CycleCloud GitHub リポジトリには多くのスケジューラ固有のプロジェクトが用意されており、カスタマイズして Azure CycleCloud インスタンスにインポートきます。 CycleCloud 自動スケーリング プラグインを使用することで、社内で開発された独自のスケジューラ用のテンプレート ベースのプロビジョニングを実装することもできます。
テンプレートを使うと、カスタム仮想マシン (VM) イメージ、自動スケーリング、スポット VM のサポートなど、Azure CycleCloud のさまざまな機能を容易に実装できます。 また、一般に運用環境、開発環境、テスト環境を分離するために使用される、同じように構成されたクラスターの複数のデプロイのプロビジョニングと保守に関連するオーバーヘッドも、最小限に抑えられます。
これらの利点は、Contoso 用の新しい Azure 常駐クラスターを実装するための目標と一致しています。 これらの利点の範囲を最適化するために、Azure CycleCloud テンプレートの実装の形式とプロセスについてさらに詳しく学習することにします。
Azure CycleCloud テンプレートの形式
テンプレートは INI 形式のファイルであり、宣言構文を使用して、クラスター ノードの役割や、それぞれの関係など、CycleCloud クラスターの構造と構成が記述されています。 テンプレートは名前付きセクションで構成され、ヘッダーは角かっこの 1 つ以上のペアで指定されます。 セクションによって、クラスターのオブジェクトとそのパラメーターに対応する階層が形成されます。 角かっこの数は階層内の層を表し、層ごとに順番に増加します。
[cluster]
[[node, nodearray]]
[[[volume]]]
[[[network-interface]]]
[[[cluster-init]]]
[[[input-endpoint]]]
[[[configuration]]]
[environment]
[noderef]
[parameters]
[[parameters]]
[[[parameter]]]
たとえば、[cluster]
セクションには 1 つ以上の [[node]]
セクションが含まれ、それには複数の [[[volume]]]
セクションが含まれる場合があります。 同様に、同じテンプレートの [cluster]
セクション内で 1 つ以上の [[nodearray]]
セクションを定義でき、それぞれで独自の [[[configuration]]]
を定義できます。
Note
同じ層内のセクションの順序は任意です。
テンプレートの主要なセクション
テンプレートは、次の主要なセクションで構成されます。
- クラスター:
[cluster]
セクションには、Azure CycleCloud クラスター オブジェクトの定義が含まれています。 テンプレートには少なくとも 1 つの[cluster]
セクションが含まれる必要があり、そこにはそのクラスターの子オブジェクトを記述する 1 つ以上の[[node]]
セクションと[[nodearray]]
セクションが含まれます。 - Node: これは、プラットフォームでプロビジョニングされた単一の VM を表します。
- Nodearray:これは、1 つ以上の Azure 仮想マシン スケール セットを表します。
Note
クラスターは、クラスター化されたワークロードの処理において指定された役割を果たすノードで構成されます。 実装の観点からは、それらは、Azure CycleCloud によって Azure Resource Manager を利用して、個々の Azure VM または仮想マシン スケール セットのメンバーとしてプロビジョニングされます。 後者は、同じように構成された VM のコレクションを表し、Azure VM とは異なり、水平自動スケーリングがサポートされます。 Azure CycleCloud のノード配列の実装には、仮想マシン スケール セットが使用されます。 実質的に、[[node]]
セクションでは、プラットフォームでプロビジョニングされた基になる VM のプロパティが記述されています。この VM は、スタンドアロンの Azure VM でも、Azure 仮想マシン スケール セットに属しているものでもかまいません。 [[nodearray]]
セクションでは、Azure 仮想マシン スケール セットについて記述されています。
Note
ノード配列は複数の Azure 仮想マシン スケール セットで構成され、それぞれが異なる構成の VM で構成されます。 ただし、1 つのノード配列内のすべてのノードは、クラスター スケジューラの 1 つのキューへのリソースの提供など、クラスターにおいて同じ役割を果たします。
- volume では、個々のクラスター ノードまたはノード配列を形成するノードにアタッチする必要がある Azure マネージド ディスクを定義します。 node または nodearray オブジェクトの子オブジェクトです。
- network-interface では、個々のクラスター ノードまたはノード配列を形成するノードにアタッチする必要がある Azure ネットワーク インターフェイスを定義します。 node または nodearray オブジェクトの子オブジェクトです。
- configuration では、ノードまたはノード配列の構成可能なプロパティを定義します。 node または nodearray オブジェクトの子オブジェクトです。
- cluster-init では、クラスター ノードに適用する Azure CycleCloud プロジェクトの仕様を定義します。 プロジェクトは、プロジェクト仕様の形式でノード構成が定義されているリソースのコレクションです。 起動したノードは、これらの仕様を処理することで自動的に構成されます。 cluster-init は、node または nodearray オブジェクトの子オブジェクトです。
- environment では、クラスターによって使用される Azure リソースをプロビジョニングまたは変更する Azure Resource Manager のデプロイを定義します。 これは、省略可能なトップレベルのオブジェクトです。
- noderef では、リソースの依存関係を表すためにテンプレート内のノードを参照します。 これは、省略可能なトップレベルのオブジェクトです。
- parameters を使うと、テンプレートを移植可能にすることができ、オブジェクト階層は同じでも構成設定が異なる複数のクラスターのデプロイに使用できます。 これは省略可能なトップレベル オブジェクトですが、入れ子になったパラメーター階層を作成できます。 パラメーターごとに、その既定値を定義できます。 パラメーターを使用すると、CycleCloud Web インターフェイスを介してクラスターで構成可能な変数を公開することもできます。
各セクションに含まれる複数のキーと値のペアにより、セクション ヘッダーによって表される、対応するオブジェクトに関する構成の詳細を提供します。 たとえば、ノード配列の場合、このような詳細には、ノードに使う Azure VM イメージが値で指定されている ImageName
キーや、仮想マシン スケール セットの最大許容サイズが値で指定されている Azure.MaxScalesetSize
キーなどが含まれます。 同様に、node または nodearray セクションには、1 つ以上の [[[configuration]]]
セクションを含めることができます。
テンプレートに基づいてクラスターをプロビジョニングする方法
Azure CycleCloud クラスターのプロビジョニングに使用するテンプレートを特定した後は、次のいずれかの実装方法を適用できます。
- Azure CycleCloud CLI を使ってテンプレートを Azure CycleCloud アプリケーションにインポートし、アプリケーションのグラフィカル インターフェイスを使ってクラスターをプロビジョニングします。 インポートをトリガーするには、
cyclecloud import_template -f <template_file>
コマンドを実行します (<template_file>
プレースホルダーはテンプレートが含まれるファイルの名前を表します)。 テンプレートに複数のクラスター定義が含まれる場合は、-c
パラメーターの値として参照することにより、インポートするクラスターの名前を指定します。 - Azure CycleCloud CLI を使ってテンプレートを Azure CycleCloud アプリケーションにインポートした後、クラスターをプロビジョニングします。 インポートをトリガーするには、
cyclecloud import_template -t -f <template_file>
コマンドを実行します (<template_file>
プレースホルダーはテンプレートが含まれるファイルの名前を表します)。 インポートが完了したら、cyclecloud create_cluster
コマンドを実行します。 たとえば、lab-template
という名前のインポートされたテンプレートからlab-cluster
という名前のクラスターを作成するには、cyclecloud create_cluster lab-template lab-cluster
を実行します。 - Azure CycleCloud CLI を使用して、テンプレートを明示的にインポートせずにクラスターをプロビジョニングします。 インポートをトリガーするには、
cyclecloud import_cluster
コマンドを実行します。
方法の選択に関係なく、クラスターのプロビジョニングの間に、必要なパラメーターの値を指定する必要があります。 Azure CycleCloud CLI を使用する場合は、JSON 形式のパラメーター ファイルを参照することで指定できます。
Note
このファイルはキーと値のペアで構成され、キーがパラメーター名を表します。 既存のクラスターでその形式を確認するには、cyclecloud export_parameters <cluster_name> > params.json
コマンドを使用します。<cluster_name>
プレースホルダーは、既存のクラスターの名前を表します。
Note
インポートしたテンプレートに基づいてクラスターをデプロイする前に、対応するプロジェクトの内容を Azure CycleCloud ロッカーにアップロードする必要もあります。 アップロードを実行するには、cyclecloud project upload <locker_name>
Azure CycleCloud CLI コマンドを使用します (<locker_name>
プレースホルダーは、ロッカーの名前を表します)。 使用可能なロッカーの一覧を表示するには、cyclecloud locker list
Azure CycleCloud CLI コマンドを実行します。 ロッカーの名前は、[[[cluster-init]]]
セクションで参照されます。
Note
Azure CycleCloud のインストールを設定するときのステップの 1 つとして、Azure ストレージ アカウントに BLOB コンテナーを作成します。 このコンテナーは、CycleCloud サーバーによりクラスター ノード用の CycleCloud プロジェクトをステージするためにロッカーとして使用されます。 その後、Azure CycleCloud によって管理されるクラスターのノードは、ブート プロセスの一部としてこのロッカーから CycleCloud プロジェクトをダウンロードするように構成されます。