大多數使用者發現,在開始安裝程序前瞭解 Salt 是什麼以及如何運作會非常有用。Salt 使用主節點-用戶端模式,在此模式中,Salt 主節點向用戶端發出命令,而用戶端負責執行命令。
什麼是 Salt?
SaltStack Config 由 Salt 提供支援,Salt 是一個以 Python 為基礎的開放原始碼遠端執行架構,用於:
- 組態管理
- 自動化
- 佈建
- 協調
Salt 是 SaltStack Config 核心功能的基礎技術。SaltStack Config 可增強並延伸 Salt,從而提供其他功能和特性以提高易用性。如需概要瞭解 SaltStack Config 基礎結構,請參閱〈SaltStack Config 系統架構〉。
下圖顯示了基本 Salt 架構的主要元件:
以下章節說明了 Salt 架構中與 SaltStack Config 安裝相關的一些核心元件。
Salt 主節點和 Salt 部屬節點
Salt 使用主節點-用戶端模式,在此模式中,Salt 主節點向用戶端發出命令,而用戶端負責執行命令。在 Salt 生態系統中,Salt 主節點是執行 Salt 主節點服務的伺服器。它會向一或多個 Salt 部屬節點發出命令,這些部屬節點是指執行部屬節點服務且已向該特定 Salt 主節點登錄的節點。
用於說明 Salt 的另一種方式是發佈者-訂閱者模式。Salt 主節點發佈需要執行的工作,並且部屬節點訂閱這些工作。當某個特定工作套用至該部屬節點時,即會執行此工作。
當部屬節點完成執行工作後,它會將工作傳回資料傳送回 Salt 主節點。依預設,Salt 具有兩個連接埠,用於部屬節點與其 Salt 主節點進行通訊。這些連接埠搭配使用,以接收資料並傳送至訊息匯流排。Salt 的訊息匯流排為 ZeroMQ,該訊息匯流排會建立一個非同步網路拓撲,以盡可能提供最快的通訊。
目標和粒紋
Salt 主節點透過定義目標來指示哪些部屬節點應執行工作。目標是指一或多個 Salt 主節點中的一組部屬節點,將為其套用工作的 Salt 命令。
Salt 主節點也可以像部屬節點一樣進行管理,如果正在執行部屬節點服務,也可以成為目標。
以下是 Salt 主節點可能會向部屬節點發出的多種命令的其中一個命令範例。此命令指示所有部屬節點應安裝 Vim 應用程式:
salt -v '*' pkg.install vim
在此案例中,glob '*'
為目標,指示所有部屬節點應執行此命令。可以使用許多其他目標設定選項,包括按識別碼將特定部屬節點設為目標,或按共用特性或特徵 (在 Salt 中稱為粒紋) 將部屬節點設為目標。
Salt 隨附一個介面,用於獲取基礎系統的相關資訊。這稱為粒紋介面,因為它向 Salt 提供資訊粒紋。系統會針對作業系統、網域名稱、IP 位址、核心、作業系統類型、記憶體和許多其他系統內容收集粒紋。此外,還可以建立您自己的自訂粒紋資料。
粒紋資料相對靜態。但是,當系統資訊發生變更 (例如網路設定) 或將新值指派給自訂粒紋時,將重新整理粒紋資料。
開啟事件系統 (事件匯流排)
事件系統將用於 Salt 主節點和部屬節點之間的程序間通訊。在事件系統中:
- Salt 主節點和部屬節點都會看到事件。
- 兩者可同時對事件進行監控和評估。
事件匯流排為協調和即時監控奠定了基礎。
所有部屬節點可透過訂閱事件系統上發佈的事件來查看工作和結果。Salt 使用插入式事件系統,其中包括兩層:
- ZeroMQ (0MQ) - 提供彈性傳輸層的目前預設通訊端層級程式庫。
- Tornado - 以 TCP 為基礎的完整傳輸層事件系統。
Salt 最大的優點之一在於執行速度。與執行更高層級的 Web 服務 (HTTP) 相比,事件系統的通訊匯流排更高效。遠端執行系統是構建所有元件所依賴的元件,允許非集中式遠端執行將負載分散在資源之間。
Salt 狀態
除了遠端執行之外,Salt 還提供另一種設定部屬節點的方法,即宣告部屬節點應處於哪種狀態 (稱為 Salt 狀態)。Salt 狀態使組態管理行之有效。可以使用 Salt 狀態,透過簡單的 YAML 檔案部署和管理基礎結構。透過使用狀態,可以自動執行遞迴和可預測的工作,將 Salt 要執行的工作排入佇列,而無需使用者輸入。此外,還可以使用 Jinja 將更複雜的條件式邏輯新增至狀態檔案。
若要說明遠端執行與組態管理之間的細微差異,請使用上一節中關於目標與粒紋的參照命令,即 Salt 在所有部屬節點上安裝應用程式 Vim:
方法 |
實作 |
結果 |
---|---|---|
遠端執行 |
|
|
組態管理 |
|
|
用於確認 Vim 是否已安裝的狀態檔案可能類似以下範例:
# File:/srv/salt/vim_install.sls install_vim_now: pkg.installed: -pkgs: -vim
若要將此狀態套用至部屬節點,需要使用 state.apply
模組,如以下範例所示:
salt '*' state.apply vim_install
此命令將 vim_install
狀態套用至所有部屬節點。
公式是協同工作以設定部屬節點或應用程式的狀態的集合。例如,一個狀態可能會觸發另一個狀態。
Top 檔案
每次手動執行單獨以特定部屬節點為目標的每個狀態是不切實際的。某些環境具有數百個狀態檔案,以上千個部屬節點為目標。
Salt 提供兩個功能來協助解決此縮放問題:
- top.sls 檔案 - 將 Salt 狀態對應至其相應的部屬節點。
- Highstate 執行 - 在單一執行中執行
top.sls
中概述的所有 Salt 狀態。
Top 檔案顯示了在特定環境中將哪些狀態套用至不同的部屬節點。以下是簡單 top 檔案的範例:
# File: /srv/salt/top.sls base: '*': - all_server_setup '01webserver': - web_server_setup
在此範例中,base
指的是 Salt 環境 (此為預設值)。您可以根據需要指定多個環境,例如 prod、dev、QA 等。
將在環境下指定部屬節點群組,並針對每組部屬節點列出狀態。此 top 檔案指示,應將名為 all_server_setup
的狀態套用至所有部屬節點 '*'
,應將名為 web_server_setup
的狀態套用至 01webserver
部屬節點。
若要執行 Salt 命令,可以使用 state.highstate 函數:
salt \* state.highstate
此命令會將 top 檔案套用至目標部屬節點。
Salt pillar
Salt 的 pillar 功能會採用 Salt 主節點上定義的資料,並根據需要將其散佈到部屬節點。Pillar 主要用於儲存密碼或其他高度機密資料,例如帳戶認證、密碼編譯金鑰或密碼。對於儲存您不想直接放在狀態檔案中的非密碼資料 (例如組態資料) 來說,pillar 也很有用。
Salt pillar 從與粒紋相反的方向將資料引入至叢集。雖然粒紋是從部屬節點產生的資料,但 pillar 是從 Salt 主節點產生的資料。
Pillar 的組織方式與 Pillar 狀態樹狀結構中的狀態類似,其中 top.sls
的作用是根據環境與部屬節點對資料的瞭解來協調 pillar 資料。使用 pillar 傳輸的資訊具有針對目標部屬節點產生的字典,該字典使用此部屬節點的金鑰進行加密以確保資料傳輸安全。將按每個部屬節點加密 pillar 資料,這樣有助於儲存特定於特定部屬節點的機密資料。
指標和反應器
指標系統是一種監控工具,可以在部屬節點上接聽各種系統程序。指標可以觸發反應器,這樣一來,便有助於執行變更或對問題進行疑難排解。例如,如果服務回應逾時,則反應器系統會重新啟動服務。
指標可用於多種用途,包括:
- 自動化報告
- 錯誤記錄傳遞
- 微服務監控
- 使用者 Shell 活動
- 資源監控
與反應器結合使用時,指標可以建立對基礎結構和應用程式問題的自動預先寫入回應。反應器使用預先寫入修復狀態擴充 Salt,使其能夠自動回應。
反應器可以在多種情況下套用:
- 基礎結構縮放
- 通知管理員
- 重新啟動失敗的應用程式
- 自動復原
將指標與反應器結合使用時,可以建立根據特定需求自訂的唯一狀態。
Salt 執行器和協調
Salt 執行器是透過 salt-run
命令執行的便利應用程式。Salt 執行器的運作方式與 Salt 執行模組類似。但是,它們執行於 Salt 主節點上,而非部屬節點上。Salt 執行器可以是一個簡單的用戶端呼叫,也可以是一個複雜的應用程式。
Salt 能夠協調整個企業中的系統管理工作。透過協調功能,可以從一個中心位置協調多部機器的活動。它還有一個優點是,能夠控制特定組態事件的發生順序。協調狀態使用狀態執行器模組在 Salt 主節點上執行。
執行多節點安裝時,實際上是在執行協調以安裝 SaltStack Config。在多節點安裝案例中,可以執行由 VMware 設計的 orchestration highstate。高狀態於 Salt 主節點上執行,並設定多節點環境。它會在將要主控 PostgreSQL、Redis 和 RaaS 的其他三個節點上安裝核心 SaltStack Config 架構。