介
SaltStack是基于Python開發的一套C/S架構配置管理工具。它的底層使用ZeroMQ消息隊列pub/sub方式通信,使用SSL證書簽發的方式進行認證管理。号稱世界上最快的消息隊列ZeroMQ使得saltstack能工快速在成千上萬台機器上進行操作,而且使用RSA Key方式确認身份,傳輸采用AES加密,安全性高。
在傳統的C/S架構中,用戶端發送請求給伺服器端,伺服器端接收到請求并且處理完後再傳回給用戶端。在SaltStack架構中不僅有傳統的C/S架構服務模式,而且有消息隊列中的釋出與訂閱(pub/sub)服務模式。一般
使用C/S架構進行配置管理。
在Master和Minion端都是以守護程序的模式運作,一直監聽配置檔案裡面定義的re_port(接受minion請求)和publish_port(釋出消息)的端口。當Minion運作時會自動連接配接到配置檔案裡Master的ret_port端口進行連接配接
認證。預設用戶端請求id是socket.getfqdn()取到的值,也可以修改minion配置檔案。
Master 4505端口:ZeroMQ的publish_port(釋出消息);
4506端口:接受minion消息請求。
Masterless架構,如果采用Masterless架構,就不需要單獨安裝一台Master機器。隻需要在每台機器上安裝Minion,然後采用本機隻負責對本機的配置管理工作機制服務模式。
saltstack 運作方式:
- Local (本地運作,單機)
- Master/Minion
- Salt ssh(不安裝agent,通過ssh 協定來管理)
- 多master(配置多個master)
saltstack 三大功能:
- 遠端執行
- 配置管理
- 雲管理 salt-cloud
安裝:
點選檢視安裝方式
Master 端指令
# rpm -ql salt-master
/etc/salt/master # salt-master 主配置檔案
/etc/salt/master.d # salt-master 擴充配置檔案目錄
/etc/salt/pki/master # master key
/usr/bin/salt # master 核心指令
/usr/bin/salt-cp # salt 檔案傳輸指令
/usr/bin/salt-key # salt 證書管理指令
/usr/bin/salt-master # salt-master 服務指令(start,stop,restart)
/usr/bin/salt-run # salt-master runner指令
/usr/bin/salt-unity
(1)salt 指令
在指令可以通過salt -h 擷取所有參數解釋,這裡主要介紹一些常用參數。

Options:
--version #檢視saltstack程式的版本号
--versions-report #檢視SaltStack程式以及依賴包的版本号
-h #檢視幫助資訊
-c CONFIG_DIR ,--config-dir=CONFIG_DIR #指定配置檔案目錄(預設是/etc/salt/)
-t TIMEOUT, --timeout=TIMEOUT #指定逾時時間(預設是5秒)
--hard-crash #捕捉到original異常不退出(預設關閉)
-s, --static #以組的形式傳回所有Minion的資料
--async #異步執行
-v, --verbose #verbose模式
--show-timeout #顯示minion timeout狀态
--show-jid 顯示任務jid
-b BATCH, --batch=BATCH #按照百分比執行任務
-a EAUTH, --auth=EAUTH,--eauth=EAUTH,--external-auth=EAUTH #指定外部認證
-T, --make-token #生成Master token
--return=RETURNER #指定saltstack return (mysql/redis), 将執行結果存儲到mysql/redis,需要在配置檔案中指定位址賬号密碼等
-d, --doc #檢視指定子產品或者所有子產品文檔
--args-separator=ARGS_SEPARATOR #設定多個傳參指定分隔符(同時執行多個子產品)
--summary #顯示彙總資訊
--username=USERNAME #指定外部認證使用者名
--password=PASSWORD #指定外部認證密碼
salt 指令參數
(2)salt-key 指令
在master端管理minion key。

Options:
-l ARG, --list=ARG # 顯示指定狀态的key(支援正則)
-L, #顯示所有public keys
-a # 接受指定等待的key(支援正則)
-A # 接受所有等待認證的key
-r key # 拒絕指定等待認證的key(支援正則)
-R # 拒絕所有
--include-all # 顯示所有狀态的key(包含non-pending狀态)
-p key # 列印指定key(支援正則),顯示key内容
-P # 列印所有key
-d key # 删除指定key
-D # 删除所有key
-f key # 顯示指定key的指紋資訊(支援正則)
-F # 顯示所有key的指紋資訊
salt-key 指令參數
Minion 用戶端指令
# rpm -ql salt-minion
/etc/salt/minion # 主配置檔案
/etc/salt/minion.d # 擴充配置檔案目錄
/etc/salt/pki/minion # key
/etc/salt/proxy
/usr/bin/salt-call # salt minion 端主指令,類似于master端的salt
/usr/bin/salt-minion # salt minion 服務指令
/usr/bin/salt-proxy
(1)salt-call
用戶端主要指令。

Options:
--version # 檢視SaltStack程式的版本号
--versions-report # 檢視SaltStack程式以及依賴包的版本号
-h, --help # 幫助資訊
-c CONFIG_DIR # 指定配置檔案目錄(預設/etc/salt/)
--hard-crash # 捕捉到original異常不退出(預設關閉)
-g # 傳回的資訊生成grains
-m MODULE_DIRS #指定自定義子產品目錄
-d #檢視指定子產品所有子產品文檔
--master=MASTER # 指定saltstack MASTER
--return=RETURNER # 指定return
--local # 運作masterless模式(不需要master端,隻對本機負責的一種工作機制)
--file-root=FILE_ROOT # 指定file-root目錄
--pillar-root=PILLAR_ROOT # 指定pillar-root目錄
--retcode-passthrough # 顯示salt-call指令傳回狀态
--id=ID # 指定一個minion ID
--metadata # 列印metadata資訊
--skip-grains # 不加載grains資訊
--refresh-grains-cache # 強制重新整理grains資訊
salt-call 指令參數
Master 端比對minion 方式
在SaltStack系統中的管理對象叫做Target。簡寫: tgt
(1)正規表達式
# 正規表達式比對的是 Minion端的 ID 值
salt -E 'min*' test.ping
(2)list 清單比對
# 清單比對也是比對的Minion端的 ID 值
salt -L minion1,minion2 test.ping
salt -L minion1, test.ping
salt -L minion1 test.ping
(3)Grains 比對
# 通過minions的grains item 來比對
salt -G 'os:CentOS' test.ping
(4)組比對
# 通過對minion分組,對整個組進行比對,操作,groups是組名
# 組是需要人為劃分的
salt -N groups test.ping
(5)複合比對
# 複合比對支援使用and和or關聯多個條件
salt -C 'G@os:Centos or L@Minion1' test.ping
(6)Pillar值比對
# key:value 是Pillar系統中定義的一組鍵值對,跟Grains的鍵值對類似。
salt -I 'key:value' test.ping
(7)CIDR比對
# 通過一個指定的CIDR網段,這裡CIDR比對的IP位址是Minion連接配接Master 4505端口的來源位址
salt -S '192.168.1.0/24' test.ping
對Minions 進行分組
通過對minion id 進行分組,可以通過組這個概念來批量操作受控主機。分組資訊預設儲存在 /etc/salt/master。可以通過建立子配置檔案的方式來修改存放分組資訊的檔案。在master的主配置檔案中有include配置檔案(子配置檔案)的設定: default_include: master.d/*.conf , 目錄和檔案都需要自己來建立。這樣可以避免直接操作Master主配置檔案 。
分組文法:
注意:分組文法與比對類似,注意區分。比對中可以使用and, or 及not等boolean 型操作。
分組配置檔案示例
# /etc/salt/master.d/group.conf
nodegroups:
group1: '[email protected],bar.domain.com,baz.domain.com or bl*.domain.com'
group2: 'G@os:Debian and foo.domain.com'
group3: 'G@os:Debian and N@group1'
group4:
- 'G@foo:bar'
- 'or'
- 'G@foo:baz
分組後記得需要重新開機salt-master,才能加載新的分組資訊。
Salt 批處理執行方式
# 每次同時執行10台執行,就是每10台一組執行cmd.run
[root@salt-master ~]# salt '*' -b 10 cmd.run 'whoami'
Executing run on ['salt-master ']
salt-master :
root
jid:
20171222160450456555
retcode:
0