天天看點

【01】Saltstack:從零開始 Saltstack

寫在前面的話

最近一直都在整理以前的亂七八糟的筆記,是以會有很多老舊的東西都會被拉出來重新遛遛。算是再度系統的進行學習。

關于 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 依賴包,這就是不推薦源碼安裝的主要原因:

【01】Saltstack:從零開始 Saltstack

至此,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 節點:

【01】Saltstack:從零開始 Saltstack

Minion 節點:

【01】Saltstack:從零開始 Saltstack

可以看到,在 Master 和 Minion 節點的 pki/minion 目錄下都生成了公鑰私鑰檔案。同時,Minion 都會把自己的公鑰檔案發給 Master 節點。并更名為我們設定的 id 名字。我們可以通過 MD5 檢視兩個檔案是否為同一個。

在 Master 節點檢視 node3 的公鑰:

【01】Saltstack:從零開始 Saltstack

在 node3 檢視 pub 檔案:

【01】Saltstack:從零開始 Saltstack

可以看到兩個 MD5 值是相同的,是以這其實是同一個檔案。

注意:在其他資料上可能見到生成 minion_id 檔案,原因是沒配置 minion 配置中的 id ,如果有配置是不會生成的。

5. 在 Master 上面檢視 Key:

啟動了 Minion 并不就能代表着能夠連入 Master,這還牽扯到授權,我們可以檢視目前授權的主機狀态:

salt-key      

如下圖:

【01】Saltstack:從零開始 Saltstack

6. 允許授權:

salt-key -a saltstack-node-01      
【01】Saltstack:從零開始 Saltstack

這裡可以使用通配符,如:

salt-key -a saltstack-node-*      

那麼剩下的都會被添加授信:

【01】Saltstack:從零開始 Saltstack

此時再度檢視 Master 節點的目錄結構:

【01】Saltstack:從零開始 Saltstack

可以發現,被授權的 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      

使用單引号的目的是轉義,我們向所有授權的發起狀态檢測,結果如圖: 

【01】Saltstack:從零開始 Saltstack

8. 遠端執行指令:

salt 'saltstack-node-03' cmd.run 'ip a'      

執行效果如圖:

【01】Saltstack:從零開始 Saltstack

其它示例:

1. 通配符使用的時候,如選擇 node1,node2,可以寫成 node[12]

2. 選擇多台的時候可以使用逗号隔開,但是需要 -L 參數,如:salt -L 'node1,node2' test.ping

3. 相同字首也可以使用豎線分割,但是必須要 -E 參數,如:salt -E 'node(1|2)' test.ping

小結

至此,我們算是簡單得了解了安裝 Saltstack 之後一些簡單的配置,接下來我們将慢慢的正式開始談及 Saltstack 的一些更進階的用法。 

繼續閱讀