Configuration-Management

廚師最佳實踐/問題

  • May 6, 2019

我使用並喜歡 Puppet。我搬到了一家新公司,他們正在採用 Chef。所以我正在努力學習 Chef,但很難將它們拼湊在一起,因為我仍然在 Puppet 中思考 =)

這些是我的問題:

  • 在 Ruby DSL、JSON 或從管理控制台中設置角色更好嗎?為什麼有多種方法可以做同樣的事情?
  • 您可以將食譜組織到子目錄中嗎?例如:我們有自定義軟體,我想為其編寫食譜並將其粘貼到:chef-repo/cookbooks/ourcompanystuff/customsoftwarecookbook 這是一個好習慣嗎?
  • 我是否為每種類型的角色創建了一本說明書,以指定它的作用?我是否有這些食譜包括其他食譜(即我的網路伺服器角色的食譜包括 apache 食譜)。我不確定如何處理食譜的相互依賴和繼承。
  • 有沒有像 Puppet 的外部節點分類器這樣的東西,所以節點會自動確定它們的角色?
  • 似乎您可以使用刀或在管理控制台中進行配置,或者編輯 JSON 文件?這讓我感到非常困惑,為什麼有這麼多做事的方法,它是麻痺的!有理由使用其中一個嗎?來自 puppet 似乎很容易使用這些工具意外錯誤配置某些東西(即 - 遺漏一些東西)
  • 如何在我的開發集群中使用 Chef 自動配置節點?使用 Puppet,我啟動了一個連接到 puppermaster 的 VM,並啟動了一個 puppet 執行並自行設置(角色由外部節點分類器確定)。我如何用廚師做到這一點?使用將其綁定到廚師伺服器的 pem/rb 文件安裝廚師,使用刀手動告訴節點其角色或在管理界面中編輯它,然後啟動廚師客戶端執行以進行自我設置?

我完成了入門教程,我看到他們有 EC2 教程,但我從未使用過 EC2,所以我很難理解它們。在這一點上,我已經託管了 Chef 執行,並且我開始嘗試配置單個節點。我從這裡去哪裡?我需要開始看公共食譜嗎?

Opscode 上的文件還可以,但不如 Puppet 的那麼好。我的搜尋中是否還有其他優秀的 Chef 資源可能會失去?

編輯這個問題和答案已有多年曆史。權威的最佳實踐是通過 Chef Software, Inc. 製作的Learn Chef Rally自定進度培訓模組教授的。原始答案的大部分內容如下。

在這個答案中,“Chef”或“chef-client”通常指的是產品 Chef Infra。Opscode於 2013 年更名為 Chef Software, Inc。2019年4 月,Chef 開放了其所有產品的原始碼,並創建了一致的品牌命名。

不清楚在 ruby​​ DSL、JSON 還是從管理控制台設置角色更好?為什麼有多種方法可以做同樣的事情?

2019 年更新:Policyfiles 是最好的工作流程。角色被認為是一種較差的做法,Chef Software, Inc. 建議遷移到 Policyfiles。

有多種方法可以做同樣的事情,因為人們有不同的工作流程。您選擇最適合您的環境的工作流程。讓我解釋一下有什麼區別,以便您做出明智的決定。

Ruby DSL for Roles 的存在是為了在不了解 JSON 語法的情況下更輕鬆地編寫角色。這是開始使用角色的簡單方法。進行更改後,您可以使用刀將它們上傳到 Chef 伺服器。

knife role from file myrole.rb

這會將角色轉換為 JSON 並將其儲存在伺服器上。如果您有一個執行 Chef Repository 的環境,您的角色在其中作為事實來源,這非常有效。

JSON 是 Chef Server 儲存的內容,因此您還可以直接在管理控制台中編輯 JSON。它確實需要比 Ruby DSL 更多的欄位才能讓 Knife 正確辨識並上傳。這些細節在某種程度上通過 Web UI 隱藏起來。

使用 webui/管理控制台編輯角色的缺點是它們不在您的本地版本控制系統中,除非您從伺服器下載它們。你可以用刀來做到這一點:

knife role show myrole -Fj

告訴刀“-Fj以 JSON 格式顯示”。如果您願意,可以將輸出重定向到 .json 文件。

多年前更新:還有額外的刀命令用於處理本地廚師儲存庫中的文件。目前這些命令僅支持 JSON 格式文件。一個社區 RFC是開放的,它將解決為這些外掛添加對 Ruby DSL 的支持。以下是工作流程的簡要總結。

檢查伺服器和本地文件的內容差異。

knife diff roles/myrole.json

上傳 JSON 格式的角色文件。roles/路徑是必需的。這將映射到伺服器上的相同 API 端點。

knife upload roles/myrole.json

從伺服器下載內容,覆蓋儲存庫中文件的內容。

knife download roles/myrole.json

這些命令來自knife-essentials內置於 chef 客戶端包中的 .

您可以將食譜組織到子目錄中嗎?例如-我們有自定義軟體,我想為其編寫食譜並將其粘貼到:chef-repo/cookbooks/ourcompanystuff/customsoftwarecookbook 這是一個好習慣嗎?

不。Knife 對食譜應該放在哪裡有一個期望,因為它使用 API 將食譜上傳到伺服器。這是在knife.rbwith中設置的cookbook_path。在舊版本的 Chef Infra 中,您可以為食譜指定一組路徑,但由於它需要更多維護並且使使用者感到困惑,因此不推薦使用。

按照慣例,我們使用食譜目錄中前綴的名稱來命名客戶特定或站點特定的食譜。對於您的範例,它將是:

chef-repo/cookbooks/ourcompany_customsoftware

根據您的工作,“我們的公司”可能有多個不同的食譜。

進一步參考:

我是否為每種類型的角色創建了一本說明書,以指定它的作用?我是否有這些食譜包括其他食譜(即我的網路伺服器角色的食譜包括 apache 食譜)。我不確定如何處理食譜的相互依賴和繼承。

角色和說明書之間沒有直接的關係或依賴關係。

角色有一個執行列表,它指定應該應用於具有該角色的任何節點的配方和其他角色。節點有一個可以包含角色或配方的執行列表。當 Chef 在節點上執行時,它將展開它包含的所有角色和配方的執行列表,然後下載所需的說明書。在節點執行列表中:

recipe[apache2]

Chef 將下載該apache2節點的說明書,以便它可以應用此配方。

您可能有一本專門針對您的基礎架構中的角色的說明書。更常見的是,您將擁有用於設置某些類型的服務(如 apache2、mysql、redis、haproxy 等)的說明書。然後您會將它們置於適當的角色中。如果您有自定義應用程序特定的事情需要發生以履行角色,那麼您可以將其寫入自定義說明書(就像我上面提到的那樣)。

進一步參考:

有沒有像 puppets 外部節點分類器這樣的東西,所以節點會自動確定它們的角色?

“是的。” Chef Infra Server 自動進行節點數據儲存(以 JSON 格式),並且伺服器還自動索引所有節點數據以供搜尋。

進一步參考:

似乎您可以使用刀或在管理控制台中進行配置,或者編輯 JSON 文件?這讓我感到非常困惑,為什麼有這麼多做事的方法,它是麻痺的!有理由使用其中一個嗎?

Chef Infra Server 具有發送和接收 JSON 響應的 RESTful API。從管理的角度來看,Knife 和管理控制台是用於與 API 互動的使用者界面。

您可以更好地使用您喜歡的工具,儘管管理控制台沒有 Knife 那麼多的功能。大多數使用 Chef Infra 的人更喜歡命令行界面,因為它提供了強大的功能和靈活性,即使是在 Windows 上使用 Chef Infra 的人也是如此。此外,knife它是一個基於外掛的工具,您可以創建新外掛以與 Chef Infra Server 或基礎設施的其他部分進行互動。

Chef Infra 是一組庫、原語和 API。它使您可以靈活地建構最適合您的基礎架構的配置管理系統。

進一步閱讀:

如何在我的開發集群中使用 Chef 自動配置節點?使用 puppet,我啟動了一個連接到 puppermatser 的 VM,並啟動了 puppet 執行並自行設置(角色由外部節點分類器確定)。我如何與廚師一起做到這一點?- 使用將其綁定到廚師伺服器的 pem/rb 文件安裝廚師,用刀手動告訴節點其角色或在管理界面中編輯它,然後啟動廚師客戶端執行以設置自己?

你會想要使用刀引導外掛。這是一個內置外掛,帶有刀。你像這樣呼叫它:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

這會:

  • 以使用者身份使用 SSH 密鑰SSH 到目標系統 (10.1.1.112) root(您可以以另一個使用者身份 ssh,然後使用--sudo)。
  • 安裝 Ruby
  • 安裝廚師
  • 為您的 Chef 伺服器創建 Chef 配置文件,讀取刀的配置 (.chef/knife.rb)。
  • 複製“驗證”RSA 私鑰,節點將使用該私鑰自動向 Chef 伺服器註冊。
  • chef-client使用列出的指定逗號分隔執行執行。在此範例中,僅webserver應用角色。

這假定目標系統已被配置,具有 IP 地址,並且您可以以 root 身份進行 SSH。根據您當地的政策和配置過程,您可能需要調整其工作方式。wiki 上的刀引導頁面描述了更多關於它是如何工作的。

Knife 還為許多公共雲計算提供商提供外掛,例如 Amazon EC2 和 Rackspace Cloud。有一些外掛可用於私有云環境,例如 Eucalyptus 和 OpenStack。還有適用於 VMware、Vsphere 等的外掛。您可以在文件中查看更多資訊。

進一步閱讀:

我的搜尋中是否還有其他好的廚師資源?

Chef 文件是文件的主要來源。

Learn Chef Rally是一系列自學模組,您可以在其中了解 Chef Infra 和其他 Chef 產品的各個方面。

我曾經維護一個部落格,在那裡我發布了關於 Chef Infra 的提示、技巧和指南:http: //jtimberman.housepub.org/。我有一個名為“快速提示”的系列。由於現實生活環境和其他承諾,我不再有時間維護該網站,但我將來可能會回到它。

Chef 客戶可以在支持網站上獲得幫助和支持:

Chef 使用者社區是獲得額外幫助的絕佳來源:

Chef Software, Inc. 的網站上提供了其他資源。

我希望這有幫助。

引用自:https://serverfault.com/questions/314990