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}
此表達式會取較大的一個參數值,a 或 b,並將其乘以 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]]]
將此參數新增至叢集範本之後,您可以使用檔案選擇器在建立叢集時選取正確的項目規格。
現成虛擬機器
若要降低工作負載的成本,請將 設定 Interruptible 為 true。 此設定會將執行個體標示為現成虛擬機器,並讓它在可用時使用剩餘容量。 請記住,這些執行個體並非一律可供使用,而且可以隨時被搶佔,因此可能不適合您的工作負載。
根據預設,當您設定 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 中的 Label 和 Description 屬性,以及選擇性 的 ParameterType 屬性。
ParameterType 屬性允許顯示自定義 UI 元素。 在上述範例中 Cloud.MachineType ,值會顯示包含所有可用機器類型的下拉式清單。 其他 ParameterType 值如下:
| 參數類型 | 說明 |
|---|---|
| Cloud.MachineType | 顯示包含所有可用計算機類型的下拉式清單。 |
| 雲端憑證 (Cloud.Credentials) | 顯示包含所有可用認證的下拉式清單。 |
| 雲端服務區域 | 顯示包含所有可用區域的下拉式清單。 |
範本中的自定義使用者影像
Azure CycleCloud 支援範本中的自定義映像。 您可以使用 直接 ImageId指定映射標識碼(資源標識符),也可以將映射新增至映像登錄。 當您將映像新增至登錄時,您可以使用 Image 或 ImageName 在您的節點上參考它。 映像會出現在叢集建立頁面上的映像下拉式清單。
映像註冊表中的映像包含一筆 Package 記錄,用於識別邏輯映像的內容,以及一個或多個對應的 Artifact 記錄,這些記錄在適當的雲端提供者中指定實際的映像 ID。 例如,已安裝 R 的自訂映像可能包含此套件記錄:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
當您新增該記錄時,可以藉由在叢集範本中包含 Image = R 或 ImageName = 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)。