Puppet

配置管理:基於推與拉的拓撲

  • July 21, 2020

更成熟的配置管理 (CM) 系統(如 Puppet 和 Chef)使用基於拉取的方法:客戶端定期輪詢集中式 master 以獲取更新。其中一些也提供無主方法(因此,基於推送),但聲明它“不適用於生產”(Saltstack)或“可擴展性較差”(Puppet)。我所知道的唯一從一開始就基於推送的系統是亞軍 Ansible。

基於拉的系統的特定可擴展性優勢是什麼?為什麼據說添加更多的 pull-masters 比 push-agents 更容易?

例如,agiletesting.blogspot.nl寫道:

在“拉”系統中,客戶端彼此獨立地聯繫伺服器,因此整個系統比“推”系統更具可擴展性

另一方面,Rackspace 證明他們可以使用基於推送的模型處理 15K 系統。

infastructures.org寫道:

我們發誓使用諸如 SUP、CVSup、rsync 伺服器或 cfengine 之類的工具來維護基礎設施的拉式方法。與其將更改推送給客戶端,每個單獨的客戶端電腦需要負責在啟動時輪詢黃金伺服器,並在之後定期輪詢,以保持其自己的轉速水平。在採用這種觀點之前,我們開發了基於 ssh、rsh、rcp 和 rdist 的大量基於推送的腳本。我們在 r-commands(或 ssh)中發現的問題是:當您執行基於 r-command 的腳本將更改推送到目標機器時,如果您有超過 30 個目標主機,其中一個可能會在任何給定的時間下來。維護委託機器的列表成為一場噩夢。在編寫程式碼來糾正這個問題的過程中,您最終會得到精心製作的包裝程式碼來處理:死主機超時;記錄和重試死主機;分叉和執行並行作業以嘗試在合理的時間內訪問許多主機;最後檢測並防止使用所有出站 rsh 會話的源電腦上所有可用 TCP 套接字的情況。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。分叉和執行並行作業以嘗試在合理的時間內訪問許多主機;最後檢測並防止使用所有出站 rsh 會話的源電腦上所有可用 TCP 套接字的情況。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。分叉和執行並行作業以嘗試在合理的時間內訪問許多主機;最後檢測並防止使用所有出站 rsh 會話的源電腦上所有可用 TCP 套接字的情況。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。最後檢測並防止使用所有出站 rsh 會話的源電腦上所有可用 TCP 套接字的情況。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。最後檢測並防止使用所有出站 rsh 會話的源電腦上所有可用 TCP 套接字的情況。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。然後,您仍然會遇到問題,即要將您剛才所做的任何事情放入安裝映像中,以便將來安裝所有新主機,以及對任何當機且明天必須重建的主機重複此操作。在我們經歷了實現基於 r-command 的複制的麻煩之後,我們發現它只是不值得。我們不打算再次使用 r 命令或任何其他推送機制來管理基礎設施。它們的擴展性不如基於拉的方法。或與此相關的任何其他推送機制。它們的擴展性不如基於拉的方法。或與此相關的任何其他推送機制。它們的擴展性不如基於拉的方法。

這不是實現問題而不是架構問題嗎?為什麼編寫執行緒推送客戶端比編寫執行緒拉伺服器更難?

基於推送的系統的問題在於,您必須在中央推送節點上擁有整個架構的完整模型。你不能推送到你不知道的機器上。

它顯然可以工作,但要保持同步需要做很多工作。

使用 Mcollective 之類的東西,您可以將 Puppet 和其他 CM 轉換為基於推送的系統。通常,將拉系統轉換為基於推的系統是微不足道的,但採用另一種方​​式並不總是那麼簡單。

還有組織政治的問題。基於推送的系統將所有控製手放在中央管理員手中。以這種方式管理複雜性可能非常困難。我認為擴展問題是一個紅鯡魚,如果你只看客戶的數量,任何一種方法都會擴展。在許多方面,推送更容易擴展。但是,動態配置或多或少意味著您至少有一個客戶端註冊的拉取版本。

最終,它是關於哪個系統與您組織中的工作流程和所有權相匹配。作為一般規則,拉動系統更靈活。

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