クラスター テンプレート

Azure CycleCloud では、テンプレートを使用してクラスター構成を定義します。 既定では、CycleCloud には多数のテンプレートが含まれており、サポートされているテンプレートの完全な一覧は GitHub で入手できます。 新しいテンプレートを作成することも、既存のテンプレートをカスタマイズすることもできます。 たとえば、 スポット VM を利用するように既存のテンプレートをカスタマイズしたり、独自のネットワークを拡張するために VPC を追加したりできます。

構成表記

Azure CycleCloud クラスター テンプレートはすべて、ノードまたは nodearray に属する 1 つ以上の [[構成]] セクションを持つオプションを持ちます。 これらのセクションでは、CycleCloud によって開始されるノードに関するソフトウェア構成オプションを指定します。 点線表記は、構成する属性を指定するために使用されます。

[[node scheduler]]
  [[[configuration]]]
  cycle_server.admin.name = poweruser
  cycle_server.admin.pass = super_secret
  cycle_server.http_port = 8080
  cycle_server.https_port = 8443

表記を使用して prefix 入力を保存する構成セクションを指定することもできます。 同じ構成を次のように記述することもできます。

[[node scheduler]]
  [[[configuration cycle_server]]]
  admin.name = poweruser
  admin.pass = super_secret
  http_port = 8080
  https_port = 8443

必要に応じて、ノード/nodearray に複数の構成セクションを含めることもできます。

[[node scheduler]]
  [[[configuration]]]
  run_list = role[sge_scheduler_node]

  [[[configuration cycle_server.admin]]]
  name = poweruser
  pass = super_secret

クラスター テンプレートのパラメーター

クラスター テンプレートには、テンプレート自体を変更しなくても、クラスターの特定の部分の値を変更するパラメーターを含めることができます。 これは、開発環境や運用環境のデプロイなど、わずかな違いを持つ多くの類似クラスターが必要な場合に特に便利です。 クラスター テンプレート内でパラメーターを指定する構文は、変数の前に '$' を付けます。 一部のパラメーターを含む基本的なテンプレートの例 (非機能的) は次のようになります。

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

このテンプレートでは、次の 2 つのパラメーターを$slots定義します$machine_type。 このテンプレートを使用すると、開発環境と prod 環境の両方でパラメーターの値を含むテキスト ファイルを定義できます。 パラメーター ファイルは、JSON 形式でも Java プロパティ ファイル形式でもかまいません。

# dev-params.json
{
  "machine_type": "H16r",
  "slots": 2
}

# prod-params.properties
machine_type = Standard_D4v3
slots = 8

これにより、開発用のパラメーターを含む JSON ファイルと、運用環境の値を含む .properties ファイルが作成されます。

注意

パラメーター ファイルのファイル名サフィックスが重要です。 JSON を使用する場合は、ファイルに名前を付ける foo.json必要があります。 Java プロパティを使用する場合、ファイルの末尾 .propertiesは . 誤って名前が付けられたパラメーター ファイルが正しくインポートされません。

パラメーター ファイルを使用してテンプレートをインポートし、不足している部分を入力できるようになりました。

cyclecloud import_cluster gridengine-dev -f template.txt -p dev-params.json -c gridengine

cyclecloud import_cluster gridengine-prod -f template.txt -p prod-params.properties -c gridengine

クラスター テンプレート自体のパラメーターの一部またはすべてを定義することもできます。

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3

  [[parameter slots]]
  DefaultValue = 2

各パラメーターの既定値はテンプレート内で定義されます (既定値として 'dev' 値を使用しました)。

パラメーター ファイルなしでテンプレートをインポートできるようになり、'dev' 値が自動的に使用されます。 "prod" クラスターを作成するときは、prod-params.properties ファイルを使用して、テンプレート ファイル自体で指定された値を上書きできます。

注意

パラメーター名には、任意の文字、数字、アンダースコアを含めることができます。

テンプレート内のパラメーター参照は、次の 2 つの形式のいずれかを使用できます。

$param: という名前の 1 つのパラメーターの値を使用します。 param

${expr}: すべてのパラメーターのコンテキストで評価 expr され、動的な値を計算できます。 次に例を示します。

Attribute = ${(a > b ? a : b) * 100}

これは、2 つのパラメーターのうち大きい方を受け取り、 ab100 で乗算します。 式は 、ClassAd 言語仕様に従って解釈および評価されます。

パラメーター参照が単独で存在する場合は、パラメーターの値が使用され、ブール値、整数、リストなどの入れ子になった構造体などの文字列以外の型がサポートされます。 ただし、参照が他のテキストに埋め込まれている場合、その値は変換され、文字列に含まれます。 たとえば、次の 2 つの場所で456定義され、参照されるとしますparam

  • Attribute1 = $param
  • 属性 2 = 123$param

Attribute1 は数値 456になりますが、値 Attribute2 は文字列 "123456"になります。 これは ${param} 、より複雑な状況でパラメーター参照を埋め込むことができるのと同じ $paramであることに注意してください。

  • 属性 3 = 123$param789
  • Attribute4 = 123${param}789

Attribute3は名前付きのparam789パラメーターを探しますが、Attribute4 は get "123456789"の値paramを使用します。

マシンの種類

Azure CycleCloud では、属性を使用して複数のコンピューターの種類が MachineType サポートされています。 表示された順序で容量の取得が試行されます。

クラスターの Init 仕様

Azure CycleCloud Web アプリケーションを使用すると、ユーザーは新しいクラスターを作成するときにクラスター init プロジェクトの仕様を選択できます。 プロジェクト スペックは、クラスター テンプレート内で設定されます。

[parameter ClusterInitSpecs]
Label = Cluster-Init
Description = Cluster init specs to apply to nodes
ParameterType = Cloud.ClusterInitSpecs

[cluster demo]

  [[node defaults]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs

      [[[cluster-init myproject:myspec:1.0.0]]]

このパラメーターがクラスター テンプレートに追加されると、ユーザーはファイル ピッカーを使用して、新しいクラスターを作成するときに適切なプロジェクト スペックを選択できます。

スポット仮想マシン

ワークロードのコストを削減するには、次の値を設定 Interruptible = trueします。 これにより、インスタンスにスポットとしてフラグが設定され、使用可能な場合は余剰容量が使用されます。 これらのインスタンスは常に使用可能であるとは限らず、いつでもプリエンプションできるわけではないため、ワークロードに常に適しているとは限りません。

既定では、true に設定 Interruptible すると、最大価格が -1 に設定されたスポット インスタンスが使用されます。つまり、インスタンスは価格に基づいて削除されません。 インスタンスの価格は、使用可能な容量とクォータがある限り、現在のスポットの価格または標準インスタンスの価格のいずれか低い方になります。 カスタムの最大価格を設定する場合は、目的の MaxPrice ノードまたは nodearray で属性を使用します。

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

ルックアップ テーブル

1 つのパラメーターが別のパラメーターを参照し、参照テーブルを使用して特定の値を計算できます。 たとえば、イメージで使用するパラメーターがあり、この場合は 2 つの選択肢があるとします。

[[parameter MachineImage]]
    Label = Image
    DefaultValue = image-1000
    Description = Ubuntu 22.04
    Config.Plugin = pico.control.AutoCompleteDropdown
    [[[list Config.Entries]]]
        Name = image-1000
        Label = Ubuntu 20.04
    [[[list Config.Entries]]]
        Name = image-2000
            Label = Ubuntu 22.04

また、選択したイメージの OS バージョンを取得し、値が値の参照テーブルであるパラメーターを作成して、他の構成に使用することもできます。

[[parameter AmiLookup]]
  ParameterType = hidden
  [[[record DefaultValue]]]
      image-1000 = Ubuntu 20.04
      image-2000 = Ubuntu 22.04

これは非表示になっているため、UI に表示されないことに注意してください。

クラスター定義の他の場所で、選択したイメージに使用される OS バージョンを取得できます。

[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}

GUI 統合

クラスター テンプレート内でパラメーターを定義すると、Azure CycleCloud GUI を利用できます。 例として、パラメーターを定義するときに、GUI の作成に役立つ次の属性を使用できます。

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3
  Label = Machine Type
  Description = MachineType to use for the Grid Engine scheduler node
  ParameterType = Cloud.MachineType

  [[parameter slots]]
  DefaultValue = 2
  Description = The number of slots for Grid Engine to report for the node

"Label" 属性と "Description" 属性が含まれており、GUI とオプションの "ParameterType" 属性に表示されます。 "ParameterType" を使用すると、カスタム UI 要素を表示できます。 上記の例では、"Cloud.MachineType" の値には、使用可能なすべてのコンピューターの種類を含むドロップダウンが表示されます。 その他の ParameterType 値は次のとおりです。

パラメーターの型 説明
Cloud.MachineType 使用可能なすべてのコンピューターの種類を含むドロップダウンが表示されます。
Cloud.Credentials 使用可能なすべての資格情報を含むドロップダウンを表示します。
Cloud.Region 使用可能なすべてのリージョンを含むドロップダウンを表示します。

Chef サーバーのサポート

Azure CycleCloud は ChefServer をサポートします。

ファイル chefserver.json を作成し、資格情報を追加します。 ValidationKey は、chef サーバーの validation.pem ファイルに対応します。 また、"chef-validator" の validation_client_name 既定値から変更したかどうかを証明する必要があります。

{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}

次に、ディレクトリにファイルを配置します /opt/cycle_server/config/data。 自動的にインポートされます。

テンプレートのカスタム ユーザー イメージ

Azure CycleCloud では、テンプレート内のカスタム イメージがサポートされています。 イメージ ID (リソース ID) を直接 ImageId指定するか、イメージ レジストリにイメージを追加します。 イメージがレジストリ内にある場合は、ノードで Image 参照するか、ノード ImageName で参照します。 クラスター作成ページの イメージ ドロップダウン に表示されます。

イメージ レジストリ内のイメージは、 Package 論理イメージの内容を識別するレコードと、適切なクラウド プロバイダーの実際のイメージ ID を指定する 1 つ以上の対応する Artifact レコードで構成されます。 たとえば、R がインストールされているカスタム イメージは、次のパッケージ レコードで構成される場合があります。

AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"

そのレコードを追加したら、クラスター テンプレートにImage = RImageName = r_execute含めたりして、そのイメージを指定できます。

このイメージが ID を持つ使用中の単一の仮想マシンとして存在する場合は、次の /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage成果物を格納する必要があります。

AdType = "Artifact"
Package = "r_execute"
Version = "2.1.1"
Name = "az/useast"
Provider = "az"
ImageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage"

成果物に対して指定 Provider する必要があります。

特定のイメージ パッケージに必要な数の成果物を追加できますが、そのイメージを使用するために必要なすべての成果物 (クラウド プロバイダー アカウント、リージョン、プロジェクトごとに 1 つ) を含める必要があります。 成果物の名前は重要ではありません。ただし、特定のパッケージとバージョンのすべての成果物に対して一意である必要があります。 プロバイダーとプロバイダー固有の詳細 (リージョンなど) の組み合わせを使用することをお勧めします。 CycleCloud は、プロバイダーとプロバイダー固有の詳細に一致する適切な成果物を自動的に選択しますが、名前を解析するのではなく、プロバイダー属性 (およびリージョンなど) を使用します。

同じ名前の複数のイメージ パッケージを追加する場合は、バージョン番号が異なる必要があります。 インスタンスを起動すると、CycleCloud は、バージョン番号を点線の文字列として扱い、各部分を数値として比較することで、バージョン番号が最も高い画像を自動的に選択します。 これをオーバーライドするには、ノードでリテラル (例1.2) またはワイルドカード (1.x) として指定ImageVersionします。