大多數使用者發現,在開始安裝程序前瞭解 Salt 是什麼以及如何運作會非常有用。Salt 使用主節點-用戶端模式,在此模式中,Salt 主節點向用戶端發出命令,而用戶端負責執行命令。

備註: 作為 VMware 移除有問題術語計劃的一部分,Salt 主節點一詞將在 SaltStack Config 及相關產品和說明文件中取代為更貼切的詞。此術語更新可能需要幾個發行週期才能全面完成。

什麼是 Salt?

SaltStack Config 由 Salt 提供支援,Salt 是一個以 Python 為基礎的開放原始碼遠端執行架構,用於:

  • 組態管理
  • 自動化
  • 佈建
  • 協調

Salt 是 SaltStack Config 核心功能的基礎技術。SaltStack Config 可增強並延伸 Salt,從而提供其他功能和特性以提高易用性。如需概要瞭解 SaltStack Config 基礎結構,請參閱〈SaltStack Config 系統架構〉

下圖顯示了基本 Salt 架構的主要元件:


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:

方法

實作

結果

遠端執行

  • 從終端機執行 salt-v'*'pkg.installvim
  • 在目標部屬節點上遠端安裝 Vim

組態管理

  • 寫入 YAML 狀態檔案,以檢查是否已安裝 Vim
  • 然後,此狀態檔案會套用至目標部屬節點
  • 確保 Vim 始終安裝在目標部屬節點上
  • Salt 分析狀態檔案,並確定需要採取哪些動作來確保部屬節點符合狀態宣告
  • 如果未安裝 Vim,則會自動執行在目標部屬節點上安裝 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 架構。