項目是定義節點組態的資源集合。 專案包含規格。 當節點啟動時,它會處理並執行一連串的規格來設定節點。
Azure CycleCloud 使用專案來管理叢集應用程式,例如批次排程器。 在 CycleCloud HPCPack 叢集中,專案會使用 hn 和 cn 規格來定義 HPCPack 前端節點和計算節點的設定和配方。
在下列部分節點定義中,docker-registry 節點會執行三個規格: bind Okta 專案 1.3.0 版的規格,以及 core docker 專案 2.0.0 版的 和 registry 規格:
[[node docker-registry]]
Locker = base-storage
[[[cluster-init okta:bind:1.3.0]]]
[[[cluster-init docker:core:2.0.0]]]
[[[cluster-init docker:registry:2.0.0]]]
尾端標記是專案版本號碼:
[[[cluster-init <project>:<spec>:<project version>]]]
保險箱是儲存體帳戶容器和認證的參考。 節點有預設的保險箱,因此您不一定需要指定此屬性。
Azure CycleCloud 會針對儲存帳戶使用簡易代碼。 例如,您可以撰寫 https://mystorage.blob.core.windows.net/mycontainer 為 az://mystorage/mycontainer。
如果您在節點上定義專案,但它不存在於預期的儲存位置,則節點會向 CycleCloud 報告 Software Installation Failure 。
CycleCloud 有內部專案,這些專案預設會在所有節點上執行,以進行特殊的磁碟區和網路處理,並設定與 CycleCloud 的通訊。 系統會自動將這些內部專案鏡像到保險箱。
您必須負責將任何額外的專案鏡像到保險箱。 CycleCloud CLI 提供撰寫專案的方法:
cyclecloud project init myproject
而且,將專案鏡像到保險箱:
cyclecloud project init mylocker
規格包含 Python、shell 腳本或 PowerShell 腳本。
建立新專案
若要建立新專案,請使用 CLI 命令 cyclecloud project init myproject ,其中 myproject 是您要建立的項目名稱。
myproject 有一個您可以變更的 default 規格。 命令會建立樹狀目錄,其中包含您以自己的資訊更新的基本架構檔案。
目錄結構
專案命令會建立下列目錄:
myproject
├── project.ini
├── blobs
├── templates
├── specs
│ ├── default
│ └── cluster-init
│ ├── scripts
│ ├── files
│ └── tests
範本目錄會保存您的叢集範本,而規格則包含定義項目的規格。 specs 目錄有一個名為 cluster-init 的子目錄(但另請參閱 Chef Orchestration)。 cluster-init 目錄包含具有特殊意義的目錄,包括 scripts 目錄 (其中包含在節點上以字典順序執行的 Script)、檔案 (其中包含節點上的原始資料檔案) 和 tests (其中包含當您在測試模式啟動叢集時執行的測試)。
project.ini
project.ini 是包含專案所有中繼資料的檔案。 其可以包含:
| 參數 | 說明 |
|---|---|
| 名稱 | 專案的名稱。 使用虛線分隔單字, 例如 order-66-2018。 |
| 標籤 | 專案的名稱。 使用帶有空格的長叢集名稱來用於顯示目的。 |
| 型別 | 三個選項: scheduler、 application或 <blank>。 此參數會決定項目的類型,併產生適當的範本。 預設值:application。 |
| 版本 | 格式:x.x. |
保險箱
專案內容會儲存在保險箱內。 您可以執行 命令 cyclecloud project upload (locker),將專案的內容上傳至 CycleCloud 安裝中定義的任何保險箱,其中 (locker) 是 CycleCloud 安裝中的雲端儲存保險箱名稱。 此保險箱是預設目標。 或者,您可以執行 命令 cyclecloud locker list 來查看有哪些保險箱可供您使用。 您可以使用 cyclecloud locker show (locker) 來檢視特定保險箱的詳細資料。
如果您新增多個保險箱,可以使用 cyclecloud project default_target (locker) 來設定預設保險箱,然後執行 cyclecloud project upload。 您也可以執行 命令 cyclecloud project default locker (locker) -global來設定要共用之專案的全域預設保險箱。
備註
預設儲物櫃會儲存在 CycleCloud 組態檔中,位於 ~/.cycle/config.ini 中,而不是 project.ini 檔案。 此設定允許 project.ini的版本控制。
當您上傳專案內容時,CycleCloud 會將 cluster-init 內容同步至您的目標儲存區,其位於 projects/(project)/(version)/(spec_name)/cluster-init。
Blob 下載
使用 project download 將 project.ini 中參考的所有 Blob 下載到本機 Blob 目錄。 此命令將使用 [locker] 參數,並嘗試將列於 project.ini 的 Blob 從儲存空間下載到本地存儲。 如果命令找不到檔案,則會傳回錯誤。
專案設定
規格
當您建立新的專案時,您會定義一個 default 規格。使用 cyclecloud project add_spec 命令將更多規格新增至您的專案。
版本控制
根據預設,所有項目都會使用1.0.0版。 在開發及部署項目時設定自訂版本,方法是在 version=x.y.z 檔案中設定 。
例如,如果locker_url為 az://my-account/my-container/projects,專案名稱為“Order66”,版本為1.6.9,規格為 default,則網址為:
az://my-account/my-container/projects/Order66/1.6.9/default
塊狀物
Blob 有兩種類型: 專案 Blob 和 使用者 Blob。
專案 Blob
專案作者提供專案資料塊,這些是可以分發的二進位檔案(例如,可合法重新分發的開放原始碼專案二進位檔案)。 專案數據塊會進入項目的 blobs 目錄,在您將它們上傳至保險箱時會被放置於 /project/blobs。
若要將 Blob 新增至專案,請將檔案新增至您的 project.ini:
[[blobs optionalname]]
Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz
以逗號分隔多個 Blob。 您也可以指定專案 Blob 目錄的相對路徑。
使用者 Blob
使用者 Blob 是二進位檔案,例如 Univa Grid Engine 二進位檔,專案作者無法合法地轉散布。 這些檔案不會與專案一起封裝。 用戶必須手動將它們放入儲物櫃。 這些檔案位於儲物櫃的 /blobs/my-project/ 中(例如, /blobs/my-project/my-blob.tgz)。 您不需要在 project.ini 中定義使用者 Blob。
若要下載任何 Blob,請使用命令 jetpack download 。 CycleCloud 會先尋找使用者 Blob,如果找不到檔案,則會使用專案層級 Blob。
備註
如果兩個 Blob 有相同的名稱,則使用者 Blob 可以覆寫專案 Blob。
在叢集範本內指定專案
規格是在您的叢集範本中定義,使用節點上的[[[cluster-init]]]區段:
[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
此範例利用所有節點所共同繼承的defaults節點定義。
排程器節點會同時取得 common 和 scheduler 規格,而執行節點陣列中的節點會同時取得 common 和 execute 規格。
檔案位置
節點會將 cluster-init 檔案下載至 /mnt/cluster-init/(project)/(spec)/。 針對 my-project 和 my-spec,您的腳本、檔案和測試位於 /mnt/cluster-init/my-project/my-spec中。
同步專案
您可以將 CycleCloud 專案從鏡像同步到叢集本機雲端記憶體。 在範本內的 SourceLocker 區段上設定屬性 [cluster-init]。 您指定的保險箱名稱是專案的來源,而當叢集啟動時,內容會同步至您的保險箱。 您也可以使用保險箱的名稱作為 cluster-init 名稱的第一個部分。 例如,如果來源保險箱是 cyclecloud,則下列兩個定義會相同:
[cluster-init my-project:my-spect:1.2.3]
SourceLocker=cyclecloud
[cluster-init cyclecloud/my-proect:my-spec:1.2.3]
大型檔案記憶體
專案支援大型檔案。 在新建立專案的最上層,您會看到 blobs 大型檔案的目錄 (Blob)。 您在此目錄中放置的 Blob 會提供特定用途,並採取與目錄內 files 專案不同的動作。
blobs目錄中的專案與規格和版本無關。 您可以在spec或專案版本之間共享 blob 中的任何內容。 例如,您可以將一個不常變更的程式的安裝程式儲存在 Blob 中,並在 您的project.ini 內參考它。 當您反覆運算專案版本時,該單一檔案會維持不變,並複製到您的雲端記憶體一次,這樣可節省傳輸和儲存成本。
若要新增一個 Blob,請將檔案放入blobs目錄中,然後編輯您的project.ini以引用該檔案:
[blobs]
Files=big_file1.tgz
當您使用 project upload 命令時,會將 project.ini 中參考的所有 Blob 傳輸至雲端記憶體。
記錄檔
執行 cluster-init 時所產生的記錄檔位於 $JETPACK_HOME/logs/cluster-init/(project)/(spec)。
執行檔案
當 cluster-init 腳本成功執行時,它會將檔案放在/mnt/cluster-init/.run/(project)/(spec)中,以確保腳本不會在後續收斂時再次執行。 若要再次執行文稿,請刪除此目錄中的適當檔案。
腳本目錄
當 CycleCloud 在scripts目錄中執行文稿時,它會將環境變數新增至spec和project目錄的路徑和名稱中。
CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH
在 Linux 上,名為 test-project 且 具有 規格 default 的專案具有下列路徑:
CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default
僅執行指令碼
若要只執行 cluster-init 腳本,請使用下列命令:
jetpack converge --cluster-init
此命令會將其輸出傳送至 STDOUT,並傳送至 jetpack.log。 每個指令碼的輸出也會記錄到:
$JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out
Jetpack 下載
若要在 cluster-init 腳本內下載 Blob,請使用 命令 jetpack download (filename) 從 blobs 目錄提取 Blob。 從 cluster-init 腳本執行此命令可讓它自動判斷專案和基底 URL。 若要在非叢集初始化內容中使用它,您必須指定專案。 如需詳細資訊,請使用選項 --help 。