Chef 是一種組態管理工具,可自動部署和管理應用程式和基礎架構。 它使用領域特定語言 (DSL) 來編寫系統配置“配方”。這些食譜儲存在「食譜」中,可以在不同系統之間共享和重複使用。
每個 cluster-init 規格都可以參考一或多個需要在開機 VM 上執行的 Chef 角色和/或逐步指南配方。
備註
CycleCloud 會在獨立模式中使用 Chef,不依賴集中式 Chef 伺服器。 準備每個 VM 所需的一組 Chef 逐步指南以及專案中的其餘檔案會一起從 Azure 儲存體帳戶進行下載。
項目結構
專案中的 specs 目錄也可以包含 chef 子目錄。 此目錄包含三個目錄: site-cookbooks (用於烹飪書定義)、 data_bags (資料包定義)、roles (Chef 角色定義檔案):
myproject
├── specs
│ ├── default
│ └── chef
│ ├── site-cookbooks
│ ├── data_bags
│ └── roles
Chef 執行清單
您可以在project.ini內的專案或規格層級指定 run_list :
[spec scheduler]
run_list = role[a], recipe[b]
當節點包含 scheduler 規格時,您定義的run_list會自動附加至任何先前定義的run_list。 例如,如果在 [configuration] 下的 run_list 是 run_list = recipe[test],則最終的 run_list 是 run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init]。
您也可以在節點上的規格層級覆寫 run_list。 此替換run_list會移除run_list中包含的任何。 例如,您可以將節點定義變更為下列定義:
[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]
使用此run_list會忽略專案中所定義的run_list。 節點上的最後 run_list 會變成 run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init]。
自訂 Chef 和可組合規格
每個規格都可以包含一個 Chef 目錄。 在交集節點之前,流程會取消調整,並將每個規格擷取到本機 chef-repo,並以相符的名稱取代任何現有的食譜、角色和資料袋。 此程序遵循您定義規格的順序,因此如果發生命名衝突,則最後定義的規格會優先。
檔案位置
當您上傳專案內容時,CycleCloud 會打包壓縮三個自定義 Chef 目錄,並將其同步至您的目標儲物櫃,位於 (locker)/projects/(project)/(version)/(spec_name)/chef。
節點會在節點啟動的啟動階段下載壓縮的 Chef 檔案。 節點會將檔案下載到 $JETPACK_HOME/system/chef/tarballs*,將其解壓縮至 $JETPACK_HOME/system/chef/chef-repo/,並使用它們來收斂節點。
備註
若要執行自訂食譜,您必須將它們新增至節點的 run_list。
Jetpack 下載資源提供者
下列範例顯示如何為 Chef 使用者建立 jetpack_download 輕量型資源提供者:
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 中使用命令時,必須指定專案。