共用方式為


叢集範本

Azure CycleCloud 會使用範本來定義叢集組態。 CycleCloud 預設包含許多範本。 如需支援範本的完整清單,請參閱 GitHub。 您可以建立新的範本或自訂現有的範本。 例如,您可以自定義現有的範本來利用 Spot VM,或新增一個 VPC 以擴充您自己的網路。

設定標記法

Azure CycleCloud 叢集範本可讓您將一或多個 [[組態]] 區段新增至節點或節點陣列。 這些區段會指定 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

如有需要,節點或節點陣列也可以包含多個組態區段:

[[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

此樣本會定義兩個參數: $machine_type$slots。 使用此範本,您可以建立文字檔,其中包含開發與生產環境中這些參數的值。 您可以針對參數檔案使用 JSON 格式或 Java 屬性檔案格式:

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

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

此範例會建立 JSON 檔案,其中包含 dev 的參數,以及包含生產環境值的 .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

範本會定義每個參數的預設值(我們使用開發值做為預設值)。

您現在可以匯入沒有參數檔案的範本,而且會自動使用開發值。 當建立 prod 叢集時,請使用 prod-params.properties 檔案覆寫範本檔案本身中指定的值。

備註

參數名稱可以包含任何字母、數位和底線。

範本中的參數參考可以採用兩種形式之一:

$param:使用名為 param的單一參數值。

${expr}:在所有參數的範疇內評估 expr,使您能夠計算動態值。 例如:

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

此表達式會取較大的一個參數值,ab,並將其乘以 100。 表達式會根據 ClassAd 語言規格來解譯和評估。

如果參數參考本身存在,則會使用 參數的值,其支援非字元串類型,例如布爾值、整數和巢狀結構,例如清單。 不過,如果參考內嵌在其他文字中,則會轉換其值並包含在字元串中。 例如,假設 param 定義為 456 ,並在兩個位置中參考:

  • 屬性 1 = $param
  • 屬性 2 = 123$param

的值 Attribute1 是數位 456,但的值 Attribute2 是字串 "123456"${param} 的運作方式與 $param相同,因此您可以在更複雜的情況下使用它來包含參數參考:

  • 屬性 3 = 123$param789
  • 屬性 4 = 123${param}789

Attribute3 會尋找名為 param789的參數,但 Attribute4 會使用 的值 param 來取得 "123456789"

機器類型

Azure CycleCloud 透過 MachineType 屬性支援多個機器類型。 解決方案會嘗試依您列出的順序取得容量。

叢集初始化規格

當您建立新的叢集時,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]]]

將此參數新增至叢集範本之後,您可以使用檔案選擇器在建立叢集時選取正確的項目規格。

現成虛擬機器

若要降低工作負載的成本,請將 設定 Interruptibletrue。 此設定會將執行個體標示為現成虛擬機器,並讓它在可用時使用剩餘容量。 請記住,這些執行個體並非一律可供使用,而且可以隨時被搶佔,因此可能不適合您的工作負載。

根據預設,當您設定 Interruptible 為 true 時,實例會使用現成虛擬機,且價格上限設為 -1。 此設定表示實例不會因價格而被收回。 實例的價格是現貨虛擬機的目前價格或標準實例的價格,取其較低者,前提是有足夠的容量和配額。 若要設定自定義的最大價格,請使用 MaxPrice 所需節點或節點陣列上的屬性。

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.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

您也可以取得已選擇映像的作業系統版本,並將它用於其他設定,方法是製作參數,其值為值的查閱資料表:

[[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

GUI 包含出現在 GUI 中的 LabelDescription 屬性,以及選擇性 的 ParameterType 屬性。 ParameterType 屬性允許顯示自定義 UI 元素。 在上述範例中 Cloud.MachineType ,值會顯示包含所有可用機器類型的下拉式清單。 其他 ParameterType 值如下:

參數類型 說明
Cloud.MachineType 顯示包含所有可用計算機類型的下拉式清單。
雲端憑證 (Cloud.Credentials) 顯示包含所有可用認證的下拉式清單。
雲端服務區域 顯示包含所有可用區域的下拉式清單。

範本中的自定義使用者影像

Azure CycleCloud 支援範本中的自定義映像。 您可以使用 直接 ImageId指定映射標識碼(資源標識符),也可以將映射新增至映像登錄。 當您將映像新增至登錄時,您可以使用 ImageImageName 在您的節點上參考它。 映像會出現在叢集建立頁面上的映像下拉式清單

映像註冊表中的映像包含一筆 Package 記錄,用於識別邏輯映像的內容,以及一個或多個對應的 Artifact 記錄,這些記錄在適當的雲端提供者中指定實際的映像 ID。 例如,已安裝 R 的自訂映像可能包含此套件記錄:

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

當您新增該記錄時,可以藉由在叢集範本中包含 Image = RImageName = r_execute 來指定映像。

如果此映像以識別碼為 /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

您可以為指定映像套件新增任意數量的成品,但您必須在您想要的所有位置中包含使用該映像所需的所有成品 (每個雲端提供者帳戶、區域、專案等各一個)。 成品的名稱並不重要,唯一要求就是它必須在每個指定的套件與版本中是獨一無二的。 我們通常建議使用提供者和提供者特定詳細數據的組合,例如區域。 CycleCloud 會自動挑選正確的成品來比對提供者和任何提供者特定的詳細資料,但它會使用 Provider 屬性 (和 Region 等等),而不是剖析 Name。

如果您新增多個具有相同名稱的映像套件,則每個套件都必須有不同的版本號碼。 當您啟動實例時,CycleCloud 會自動選取版本號碼最高的映像。 它會將版本號碼視為虛線字串,並將每個部分比較為數位。 若要覆寫此行為,請在節點上將 ImageVersion 指定為具體版本號碼(例如 1.2)或通配符版本號碼(例如 1.x)。