寫在前面的話
最近一直都在整理以前的亂七八糟的筆記,是以會有很多老舊的東西都會被拉出來重新遛遛。算是再度系統的進行學習。
關于 Saltstack 的一些概念
Saltstack 是基于 Python 開發的,和其類似的東西還有 Puppet(基于 rubby,更早),Ansible(基于 Python)。
Saltstack 主要包含 3 大功能:遠端執行 / 配置管理(狀态管理) / 雲管理。
Saltstack 的四種運作方式:Local,C/S(Master / Minion),Syndic,SSH。
一般我們用的最多的就是 C/S 的方式。
我們會在很多資料上面看到這樣一個說法:Saltstack 就是簡化版的 Puppet + 強化版的 Func。
至于為啥叫 Saltstack,據說 Salt 來源于作者所在的城市是美國的鹽湖城,而 Stack 來源則是因為所有 Stack 的都火了,如 OpenStack。
最後,Saltstack 消息釋出系統監聽端口為 4505,用戶端與服務端通信端口為 4506。
安裝 Saltstack
我們這裡實作準備了 3 台 CentOS 7 的虛拟機,資訊如下:
IP位址 | 主機名 | 說明 |
---|---|---|
192.168.100.111 | demo-node1 | Master 節點,CentOS Linux release 7.5 |
192.168.100.112 | demo-node2 | Minion 節點,CentOS Linux release 7.5 |
192.168.100.113 | demo-node3 |
Saltstack 本身在 epel 源中就存在,但我們這裡還是使用官方給我們提供的源安裝:
http://repo.saltstack.com/#rhel
我們可以從官方的源找到對應的系統,我這裡采用的都是 CentOS7。
1. 在三個節點都安裝源:
yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
完成以後在 /etc/yum.repos.d/ 目錄會生成一個 salt-latest.repo 的源檔案。我們這裡建議 Saltstack 采用 yum 安裝的方式而非源碼安裝,後者容易出現各種問題。
2. 在主節點安裝 Salt master 和 minion:
yum -y install salt-master salt-minion
3. 在其他節點上隻需要按照 Salt minion:
yum -y install salt-minion
從按照過程我們可以看到會安裝很多 Python 依賴包,這就是不推薦源碼安裝的主要原因:

至此,Saltstack 安裝完成!
配置 Saltstack
安裝完成後不代表我們就能使用了,還需要對服務進行配置,具體方法如下:
1. 主節點啟動 Master:
systemctl start salt-master
2. 所有節點配置 Minion:配置檔案為 /etc/salt/minion
# 第 16 行,一般寫 Master 的域名最好,沒用域名寫 IP
master: 192.168.100.111
# 第 112 行,配置每台主機的 id,要求唯一且具有意義,用于區分主機
id: saltstack-node-01
3. 所有節點啟動 Minion:
systemctl start salt-minion
4. 此時檢視目錄變化(這裡我們做個拓展,幫助我們更好的了解 saltsatck):
tree /etc/salt/
如果沒有 tree 指令 yum 安裝一個即可,檢視目前的目錄結構變化:
Master 節點:
Minion 節點:
可以看到,在 Master 和 Minion 節點的 pki/minion 目錄下都生成了公鑰私鑰檔案。同時,Minion 都會把自己的公鑰檔案發給 Master 節點。并更名為我們設定的 id 名字。我們可以通過 MD5 檢視兩個檔案是否為同一個。
在 Master 節點檢視 node3 的公鑰:
在 node3 檢視 pub 檔案:
可以看到兩個 MD5 值是相同的,是以這其實是同一個檔案。
注意:在其他資料上可能見到生成 minion_id 檔案,原因是沒配置 minion 配置中的 id ,如果有配置是不會生成的。
5. 在 Master 上面檢視 Key:
啟動了 Minion 并不就能代表着能夠連入 Master,這還牽扯到授權,我們可以檢視目前授權的主機狀态:
salt-key
如下圖:
6. 允許授權:
salt-key -a saltstack-node-01
這裡可以使用通配符,如:
salt-key -a saltstack-node-*
那麼剩下的都會被添加授信:
此時再度檢視 Master 節點的目錄結構:
可以發現,被授權的 Key 都從 minions_pre 下移動到了 minions 目錄,同時在 minion 目錄下新增了 minion_master.pub 檔案,這樣就實作了互相通信。
同時這也意味着我們之前配置 id 的重要性,因為你修改 id,意味着這個公鑰就失效了。
同時在 id 設計的時候,我們應該讓他具有意義,比如我們現在有兩個項目,一個叫 erp,一個叫 mall,那麼針對 erp 的主機群的 id 設計就應該是 erp-xxxx,mall 的 id 就應該是是 mall-xxxx,這樣我們就能使用通配符對主機群組進行批量管理。
當然還有一下常見的參數,通過 salt-key -h 檢視,如:
salt-key 參數 | |
---|---|
-L | 顯示所有 |
-A | 接受所有授權 |
-d | 删除某個 Key |
-D | 删除所有 |
7. 測試節點通信:
salt '*' test.ping
使用單引号的目的是轉義,我們向所有授權的發起狀态檢測,結果如圖:
8. 遠端執行指令:
salt 'saltstack-node-03' cmd.run 'ip a'
執行效果如圖:
其它示例:
1. 通配符使用的時候,如選擇 node1,node2,可以寫成 node[12]
2. 選擇多台的時候可以使用逗号隔開,但是需要 -L 參數,如:salt -L 'node1,node2' test.ping
3. 相同字首也可以使用豎線分割,但是必須要 -E 參數,如:salt -E 'node(1|2)' test.ping
小結
至此,我們算是簡單得了解了安裝 Saltstack 之後一些簡單的配置,接下來我們将慢慢的正式開始談及 Saltstack 的一些更進階的用法。