安裝並整合 SaltStack Config 服務後,您還需要在打算使用 SaltStack Config 進行管理的任何節點上安裝、執行和登錄 Salt 部屬節點服務。可以使用 vRealize Automation 雲端範本將 Salt 部屬節點服務部署到您的節點,也可以透過 Secure Shell (SSH) 安裝該服務以進行部署。

Salt 及其與 SaltStack Config 的關係

SaltStack Config 在 Salt 上執行,Salt 是一個以 Python 為基礎的開放原始碼遠端執行架構,用於:

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

Salt 是 SaltStack Config 核心功能的基礎技術。SaltStack Config 可增強並延伸 Salt,從而提供其他功能和特性以提高易用性。

Salt 使用控制器-用戶端模式,在此模式中,控制器向用戶端發出命令,而用戶端負責執行命令。在 Salt 生態系統中,控制器是執行 Salt 主節點服務的伺服器。它會向一或多個 Salt 部屬節點發出命令,這些部屬節點是指執行 Salt 部屬節點服務且已向該特定主節點登錄的節點。

用於說明 Salt 的另一種方式是發佈者-訂閱者模式。主節點發佈需要執行的工作,並且部屬節點訂閱這些工作。當某個特定工作套用至該部屬節點時,即會執行此工作。當部屬節點完成執行工作後,它會將工作傳回資料傳送回主節點。

部屬節點是執行 salt-minion 服務的節點。該服務會接聽 Salt 主節點的命令並執行請求的工作。可以從 vRealize Automation 雲端範本部署部屬節點。

必須先在要管理的所有節點上安裝 Salt 部屬節點服務,才能開始使用 SaltStack Config 進行組態管理。此外,還必須透過向 SaltStack Config 傳送並接受部屬節點的金鑰來登錄部屬節點。

開始之前

  • 安裝並設定 SaltStack Config,然後將其與 vRealize Automation 整合。
  • 透過 SaltStack Config 管理的節點必須能夠連線到 Salt 主節點,並且必須與 SaltStack Config 整合點和 Salt 主節點位於相同的網路上。
  • 部署到私人網路的 vSphere 機器必須能夠起始與 SaltStack Config 整合和 Salt 主節點的連線。

透過 SSH 安裝 Salt 部屬節點服務

使用 SSH 安裝 Salt 部屬節點服務的程序取決於在這些節點上執行的作業系統。

安裝 Salt 部屬節點服務之後:
  1. 透過在 /etc/salt/minion.d 目錄中建立 master.conf 檔案,將每個部屬節點設定為與主節點進行通訊。在此檔案中,提供主節點的 IP 位址。例如: master: 192.0.2.1
  2. 啟動部屬節點服務:

    sudo systemctl enable salt-minion

    sudo systemctl start salt-minion

  3. 針對其餘的所有節點重複上述步驟。

將這些部屬節點檔案設定為指向 Salt 主節點後,在 [部屬節點金鑰] 工作區中接受 SaltStack Config 服務中的部屬節點金鑰。

使用 vRealize Automation 雲端範本安裝 Salt 部屬節點服務

若要使用雲端範本部署 Salt 部屬節點服務,您必須能夠存取並熟練使用 cloud-init (Linux) 或 Cloudbase-init (Windows)。若要將 Salt 部屬節點新增至針對 SaltStack Config 整合設定的 Salt 主節點,雲端範本中的虛擬機器必須支援 cloud-init (Linux) 或 Cloudbase-init (Windows)。

以下章節說明了如何使用雲端範本部署 Salt 部屬節點服務。

SaltStackConfiguration 內容群組

vRealize Suite Lifecycle Manager 中安裝和設定 SaltStack Config 服務的過程中,會建立名為 SaltStackConfigurationvRealize Automation 內容群組。在 vRealize Automation 雲端範本或部署中設定 SaltStack Config 整合時,將使用 SaltStackConfiguration 內容群組值。

也可以在 vRealize Automation 範本 (先前稱為藍圖) 之以 cloud-init 或 Cloudbase-init 為基礎的組態中使用這些值來安裝部屬節點。SaltStackConfiguration 中的兩個內容包括:masterAddress (與 SaltStack Config 整合點上的主機名稱設定相符) 和 masterFingerprint。範例 SaltStackConfiguration 內容群組如下所示。

畫面顯示 vRealize Automation 內容群組頁面以及安裝 SaltStack Config 時所建立的「SaltStackConfiguration」內容群組

將部屬節點新增至針對 vRealize Automation 設定的 Salt 主節點

安裝 SaltStack Config 時,會指定 Salt 主節點 IP 位址。從 vRealize Automation 雲端範本部署部屬節點時,會使用該主節點 IP 位址作為 masterAddress 內容。

可以透過在 vRealize Automation 雲端範本或部署中使用 cloud-init 或 Cloudbase-init 指令碼來安裝和部署部屬節點。也可以使用映像對應表示使用其中一種格式的雲端組態指令碼。若要將 Salt 部屬節點新增至與 vRealize Automation SaltStack Config 整合相關聯的 Salt 主節點,目標機器必須支援 cloud-init (Linux) 或 Cloudbase-init (Windows)。vRealize Automation 雲端組態指令碼支援這兩種格式。

為雲端範本中的機器資源設定 minionId 值和 cloudConfig 值,並參考內容群組 SaltStackConfiguration。將在 vRealize Suite Lifecycle Manager 中安裝和設定 SaltStack Config 服務期間建立 SaltStackConfiguration 內容群組。其中包含 masterAddressmasterFingerprint 內容。

minionId 值必須與在雲端範本代碼的 cloudConfig 區段中為機器 /salt/minion_id 指定的值相符。

Windows 系統和 Linux 系統的 vRealize Automation 雲端範本代碼範例如下所示。請注意,可以使用下列任一方法指定雲端組態指令碼:
  • 從雲端範本代碼呼叫的 vRealize Automation 映像
  • 從雲端範本代碼呼叫的雲端組態指令碼
  • 直接新增至雲端範本代碼的雲端組態指令碼內容

附注:部署包含 Salt 部屬節點的雲端範本時,如果部署在 vRealize Automation Cloud Assembly 中不可見,您可以使用 vRealize Automation Service Broker 服務來顯示部署。

範例 - Linux 系統的部署和 cloud-init

用於為支援 cloud-init 的 Linux 系統的機器部署部屬節點的雲端範本組態範例如下所示:
resources:
  Salt-Minion:
    type: Cloud.Machine
    properties:
      image: Ubuntu-18
      flavor: medium
      constraints:
        - tag: 'env:vsphere'
      cloudConfig: |
        #cloud-config
        hostname: ${input.saltminionhostname}
        users:
          - name: ${input.user}
            sudo: ['ALL=(ALL) NOPASSWD:ALL']
            groups: sudo
            shell: /bin/bash
        runcmd:
          - PASS=${input.password}
          - USER=${input.user}
          - echo $USER:$PASS | /usr/sbin/chpasswd
          - sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
          - service ssh reload
          - curl -L https://bootstrap.saltstack.com -o install_salt.sh
          - sudo sh install_salt.sh -A ${propgroup.SaltStackConfiguration.masterAddress}

範例 - Windows 系統的部署和 Cloudbase-init

用於為支援 Cloudbase-init 的 Windows 系統的機器部署部屬節點的雲端範本組態範例如下所示:
formatVersion: 1
inputs: {}
resources:
  WindowsVM-Minion:
    type: Cloud.vSphere.Machine
    properties:
      image: win2016
      flavor: medium
      customizationSpec: Windows
      minionId: '${resource.WindowsVM-Minion.resourceName}'
      networks:
        - network: '${resource.wpnet.id}'
          name: '${wpnet.name}'
          assignPublicIpAddress: true
      cloudConfig: |
        #ps1_sysnative
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -OutFile C:\Salt-Minion-3002.2-Py3-AMD64-Setup.exe -Uri https://repo.saltstack.com/windows/Salt-Minion-3002.2-Py3-AMD64-Setup.exe
        Start-Process -Wait -FilePath "C:\Salt-Minion-3002.2-Py3-AMD64-Setup.exe" -ArgumentList "/S" -PassThru
        ((Get-Content -path C:\salt\conf\minion -Raw) -replace "#master: salt", "master: ${propgroup.SaltStackConfiguration.masterAddress}") | Set-Content -Path C:\salt\conf\minion
        ((Get-Content -path C:\salt\conf\minion -Raw) -replace "#master_finger: ''", "master_finger: '${propgroup.SaltStackConfiguration.masterFingerPrint}'") | Set-Content -Path C:\salt\conf\minion
        Set-Content -Path C:\salt\conf\minion_id -Value '${resource.WindowsVM-Minion.resourceName}'
        C:\salt\salt-call.bat service.restart salt-minion
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: existing

如何設定 PowerShell 命令

您可以在雲端範本的 cloudConfig 部分中設定 PowerShell 命令。

啟用 PowerShell 命令之前,請從 Salt 存放庫網站下載 Salt 部屬節點套件。然後完成下列步驟:
  1. 在 Windows 虛擬機器中安裝 Salt 部屬節點服務。
  2. 更新部屬節點組態中的 Salt 主節點主機名稱值。
  3. 更新部屬節點組態中的 Salt 主節點指紋值。
  4. minion_id 設定為將用於接受 Salt 主節點上的部屬節點的虛擬機器資源名稱。
  5. 重新啟動部屬節點。

有關部署 Salt 部屬節點的詳細資訊

如需有關使用整合式 SaltStack ConfigvRealize Automation 雲端範本部署 Salt 部屬節點的替代方法,請參閱〈Cloud Assembly 和 ABX 密碼 (以及如何將其用於安裝 vRealize SaltStack 部屬節點代理程式)〉

如需通常定義和部署 vRealize Automation Cloud Assembly 範本的相關資訊,尤其是您在熟悉 SaltStack 但不熟悉 vRealize Automation 的情況下,請參閱〈設計 vRealize Automation Cloud Assembly 部署〉