天天看點

SaltStack 基礎

介     

  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 運作方式:

  1. Local (本地運作,單機)
  2. Master/Minion
  3. Salt ssh(不安裝agent,通過ssh 協定來管理)
  4. 多master(配置多個master)

saltstack 三大功能:

  1. 遠端執行
  2. 配置管理
  3. 雲管理 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 擷取所有參數解釋,這裡主要介紹一些常用參數。

SaltStack 基礎
SaltStack 基礎
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。

SaltStack 基礎
SaltStack 基礎
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

  用戶端主要指令。

SaltStack 基礎
SaltStack 基礎
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主配置檔案 。

分組文法:

  

SaltStack 基礎

注意:分組文法與比對類似,注意區分。比對中可以使用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