專案
專案是定義節點組態的資源集合。 專案包含 規格。 節點啟動時,會藉由處理和執行一連串規格來設定。
Azure CycleCloud 會使用專案來管理叢集應用程式,例如批次排程器。 在 CycleCloud HPCPack 中,專案是一種 hn
規格和 cn
規格,可定義 HPCPack 前端節點和計算節點的設定和配方。
以下是部分節點定義。 docker-registry 節點會執行三個規格:來自 okta 專案 1.3.0 版的系結規格,以及 Docker 專案 2.0.0 版的核心和登錄規格:
[[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。
節點會使用 pogo 工具,從保險箱下載它所參考的每個專案:
pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind
如果專案是在節點上定義,但不存在於預期的儲存位置,則節點會向 CycleCloud 回報 Software Installation Failure
。
CycleCloud 具有預設在所有節點上執行的內部專案,以執行特殊磁片區和網路處理,以及設定與 CycleCloud 的通訊。 這些內部專案會自動鏡像到保險箱。
使用者需負責將任何其他專案鏡像到保險箱。 CycleCloud CLI有撰寫專案的方法:
cyclecloud project init myproject
和 鏡像:
cyclecloud project init mylocker
投影到保險箱。
規格是由 Python、殼層或 PowerShell 腳本所組成。
建立新專案
若要建立新的專案,請使用 CLI 命令 cyclecloud project init myproject
,其中 myproject
是您想要建立的專案名稱。 這會建立名為 「myproject」 的專案,其中包含您可以變更的單一規格 「default」。 系統會使用您將修改的基本架構檔案來建立目錄樹狀結構,以包含您自己的資訊。
目錄結構
專案命令會建立下列目錄:
\myproject
├── project.ini
├── blobs
├── templates
├── specs
│ ├── default
│ └── cluster-init
│ ├── scripts
│ ├── files
│ └── tests
│ └── chef
│ ├── site-cookbooks
│ ├── data_bag
│ └── roles
範本目錄會保存您的叢集範本,而規格將包含定義您專案的規格。 spec 有兩個子目錄:cluster-init 和自訂 chef。 cluster-init 包含具有特殊意義的目錄,例如 腳本 目錄 (包含以語彙順序在節點) 上執行的 腳本、將 放在節點上的檔案 (原始資料檔案放在節點) ,而 測試 (包含在測試模式中啟動時要執行的測試) 。
自訂 chef 子目錄有三個目錄: site-cookbooks (用於操作手冊 定義) 、 data_bags (資料bag 定義) ,以及 ( chef 角色定義檔案的角色) 。
project.ini
project.ini
是包含您專案所有中繼資料的檔案。 它可以包含:
參數 | 描述 |
---|---|
NAME | 專案的名稱。 單字必須以虛線分隔,例如 order-66-2018 |
label | 專案的名稱。 完整名稱 (,具有叢集) 空格以供顯示之用。 |
類型 | 三個選項:排程器、應用程式、 < 空白 > 。 決定專案的類型,並產生適當的範本。 預設:應用程式 |
version | 格式:x.x.x |
儲 物 櫃
專案內容會儲存在 保險箱內。 您可以透過 命令 cyclecloud project upload (locker)
將專案的內容上傳至 CycleCloud 安裝中定義的任何保險箱,其中 (保險箱) 是 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進行版本控制。
上傳專案內容會壓縮 chef 目錄,並將 chef 和 cluster init 同步處理至目標保險箱。 這些會儲存在:
- (保險箱) /projects/ (專案) / (版 /) / (spec_name) /cluster-init
- (保險箱) /projects/ (專案) / () / (spec_name) /chef 版本
Blob 下載
使用 project download
將project.ini中參考的所有 Blob 下載到本機 Blob 目錄。 命令會使用 參數, [locker]
並嘗試從保險箱將列在project.ini中的 Blob 下載到本機儲存體。 如果找不到檔案,則會傳回錯誤。
專案設定
規格
建立新專案時,會定義單一預設規格。 您可以透過 cyclecloud project add_spec
命令將其他規格新增至專案。
版本控制
根據預設,所有專案都有 1.0.0 版 。 您可以在開發及部署專案時設定自訂版本,方法是在project.ini檔案中設定 version=x.y.z
。
例如,如果 「locker_url」 是 「az://my-account/my-container/projects」,則專案的名稱為 「Order66」,版本為 「1.6.9」,而規格為 「default」,您的 URL 會是:
- az://my-account/my-container/projects/Order66/1.6.9/default/cluster-init
- az://my-account/my-container/projects/Order66/1.6.9/default/chef
Blob
Blob 有兩種類型: 專案 Blob 和 使用者 Blob。
專案 Blob
專案 Blob 是由專案作者提供的二進位檔案,假設它們可以散發 (,也就是您合法允許轉散發) 開放原始碼專案的二進位檔案。 專案 Blob 會進入專案的「blobs」 目錄,而上傳至保險箱時,它們會位於/project/blob。
若要將 Blob 新增至專案,請將檔案 () 新增至 您的project.ini:
[[blobs optionalname]]
Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz
多個 Blob 可以以逗號分隔。 您也可以指定專案 Blob 目錄的相對路徑。
使用者 Blob
使用者 Blob 是專案作者無法合法轉散發的二進位檔案,例如 UGE 二進位檔。 這些檔案不會與專案一起封裝,而是必須手動暫存到保險箱。 這些檔案會位於 /blobs/my-project/my-blob.tgz。 使用者 Blob 不需要在project.ini中定義。
若要下載任何 Blob,請使用 jetpack download
CLI 或 jetpack_download
Chef 資源的 命令。 CycleCloud 會先尋找使用者 Blob。 如果找不到該檔案,則會使用專案層級 Blob。
注意
可以覆寫具有相同名稱的使用者 Blob 的專案 Blob。
在叢集範本內指定專案
專案語法可讓您在節點上指定多個規格。 若要定義專案,請使用下列專案:
[[[cluster-init myspec]]]
Project = myproject # inferred from name
Version = x.y.z
Spec = default # (alternatively, you can name your own spec to be used here)
Locker = default # (optional, will use default locker for node)
注意
在 'spec' 之後指定的名稱可以是任何專案,但可以和 應該用來做為定義一些 > 通用屬性的快捷方式。
您也可以將多個規格套用至指定的節點,如下所示:
[[node scheduler]]
[[[cluster-init myspec]]]
Project = myproject
Version = x.y.z
Spec = default # (alternatively, you can name your own spec to be used here)
Locker = default # (optional, will use default locker for node)
[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec # (optional)
透過以冒號分隔專案名稱、規格名稱和版本,CycleCloud 可以自動將這些值剖析為適當的 Project/Version/Spec
設定:
[[node scheduler]]
AdditionalClusterInitSpecs = $ClusterInitSpecs
[[[cluster-init myproject:myspec:x.y.z]]]
[[[cluster-init otherproject:otherspec:a.b.c]]]
您也可以在節點之間繼承規格。 例如,您可以在所有節點之間共用通用規格,然後在排程器節點上執行自訂規格:
[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
Order = 2 # optional
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
Order = 1 # optional
[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
Order = 1 # optional
這會將 和 scheduler
規格同時 common
套用至排程器節點,同時只將 和 execute
規格套用 common
至執行 nodearray。
根據預設,規格會依範本中顯示的循序執行,先執行繼承的規格。
Order
是設為預設值 1000 的選擇性整數,可用來定義規格的順序。
如果定義中 [[[cluster-init]]]
只指定一個名稱,則會假設它是規格名稱。 例如:
[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0
是名稱所隱含的有效規格設定 Spec=myspec
。
run_list
您可以在project.ini內的專案或規格層級指定 Runlist:
[spec scheduler]
run_list = role[a], recipe[b]
當節點包含規格「排程器」時,定義的run_list會自動附加至任何先前定義的 Runlist。 例如,如果我定義的 [configuration]
run_list是 run_list = recipe[test]
,則最終的執行清單會是 run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init]
。
您也可以在節點上的規格層級覆寫 Runlist。 這會取代包含在project.ini中的任何run_list。 例如,如果我們將節點定義變更為下列專案:
[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]
系統會忽略專案中定義的 Runlist,並改用上述專案。 節點上的最終 Runlist 會是 run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init]
。
注意
runlist 是 chef 特有的,否則不適用。
檔案位置
壓縮的 chef 檔案會在節點啟動的啟動階段下載。 它們會下載至 $JETPACK_HOME/system/chef/tarballs ,並解壓縮至 $JETPACK_HOME/system/chef/chef/chef-repo/,並在交集節點時使用。
注意
若要執行自訂操作手冊,您必須在節點的run_list中指定它們。
cluster-init 檔案會下載至 /mnt/cluster-init/ (專案) / (規格) /。 針對 「my-project」 和 「my-spec」,您會看到位於 /mnt/cluster-init/my-project/my-spec中的腳本、檔案和測試。
同步處理專案
CycleCloud 專案可以從鏡像同步處理到叢集本機雲端儲存體。 在範本內的區段上 [cluster-init]
設定 SourceLocker 屬性。 指定的保險箱名稱將會當做專案的來源使用,而內容會在叢集啟動時同步到您的保險箱。 您也可以使用保險箱的名稱作為 cluster-init 名稱的第一個部分。 例如,如果來源保險箱是 「cyclecloud」,則下列兩個定義相同:
[cluster-init my-project:my-spect:1.2.3]
SourceLocker=cyclecloud
[cluster-init cyclecloud/my-proect:my-spec:1.2.3]
大型檔案儲存體
專案支援大型檔案。 在新建立專案的最上層,您會看到大型檔案的「Blob」目錄, (blob) 。 請注意,放置於此目錄中的 Blob 有特定用途,且會以不同于「檔案」目錄中的專案來運作。
「blobs」 目錄中的專案與規格和版本無關:可以在規格或專案版本之間共用「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/ (專案) / (規格) 。
執行檔案
成功執行 cluster-init 腳本時,會將檔案放在 /mnt/cluster-init/.run/ (專案) / (規格) ,以確保不會在後續交集上再次執行。 如果您想要再次執行腳本,請刪除此目錄中的適當檔案。
腳本目錄
當 CycleCloud 在腳本目錄中執行腳本時,它會將環境變數新增至規格和專案目錄的路徑和名稱:
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
自訂 chef 和 Composable Specs
每個規格都有 chef 目錄。 在交集之前,每個規格都會取消定位並擷取到本機 chef-repo,並以相同名稱取代任何現有的操作手冊、角色和資料包, (s) 。 這會依照規格的定義順序來完成,因此在命名衝突的情況下,最後定義的規格一律會優先。
jetpack 下載
若要在 cluster-init 腳本內下載 Blob,請使用 命令 jetpack download (filename)
從 Blobs 目錄提取 Blob。 從 cluster-init 腳本執行此命令將會為您決定專案和基底 URL。 若要在非 cluster-init 內容中使用它,您必須指定專案 (請參閱 --help 以取得詳細資訊) 。
針對 chef 使用者, jetpack_download
已建立 LWRP:
jetpack_download "big-file1.tgz" do
project "my-project"
end
在 chef 中,預設下載位置為 #{node[:jetpack][:downloads]}
。 若要變更檔案目的地,請使用下列專案:
jetpack_download "foo.tgz" do
project "my-project"
dest "/tmp/download.tgz"
end
在 chef 中使用時,您必須指定專案。