SaltStack入門


1. SaltStack介紹

1.1 自動化運維工具

作為一個運維人員,很大一部分工作是在業務的配置管理和狀態維護以及版本發布上,而當業務場景及公司規模上了一定規模后,人為手工的去做這些工作將變得極其困難,此時我們將需要利用一些自動化運維的工具來達到批量管理的目的。
常用的自動化運維工具有:
puppet
ansible
saltstack
此三款屬同類工具,皆可用來提高運維管理的效率,但它們又各有優勢,目前主流的自動化運維工具是ansible和saltstack。其中ansible無需安裝客戶端,這是其最大的優勢,而saltstack則需要安裝客戶端工具,類似zabbix的agent。應用場景方面,ansible常用於小型企業,而saltstack則常用於中大型企業,因為ansible無法並行執行而saltstack可以並行。但不論其特點如何,本質上均屬同類,所以只需要掌握一種即可輕松勝任運維工作。

1.2 saltstack的特點

基於python開發的C/S架構配置管理工具
底層使用ZeroMQ消息隊列pub/sub方式通信
使用SSL證書簽發的方式進行認證管理,傳輸采用AES加密

1.3 saltstack服務架構

在saltstack架構中服務器端叫Master,客戶端叫Minion。
在Master和Minion端都是以守護進程的模式運行,一直監聽配置文件里面定義的ret_port(接受minion請求)和publish_port(發布消息)的端口。
當Minion運行時會自動連接到配置文件里面定義的Master地址ret_port端口進行連接認證。
saltstack除了傳統的C/S架構外,其實還有一種叫做masterless的架構,其不需要單獨安裝一台 master 服務器,只需要在每台機器上安裝 Minion端,然后采用本機只負責對本機的配置管理機制服務的模式。

2. SaltStack四大功能與四大運行方式

SaltStack有四大功能,分別是:
遠程執行
配置管理/狀態管理
雲管理(cloud)
事件驅動
SaltStack可以通過遠程執行實現批量管理,並且通過描述狀態來達到實現某些功能的目的。

SaltStack四大運行方式:
local本地運行
Master/Minion傳統方式
Syndic分布式
Salt ssh

3. SaltStack組件介紹

組件 功能
Salt Master 用於將命令和配置發送到在受管系統上運行的Salt minion
Salt Minions 從Salt master接收命令和配置
Execution Modules 從命令行針對一個或多個受管系統執行的臨時命令。對...有用:

  1. 實時監控,狀態和庫存
  2. 一次性命令和腳本
  3. 部署關鍵更新
    Formulas (States) 系統配置的聲明性或命令式表示
    Grains Grains是有關底層受管系統的靜態信息,包括操作系統,內存和許多其他系統屬性。
    Pillar 用戶定義的變量。這些安全變量被定義並存儲在Salt Master中,然后使用目標“分配”給一個或多個Minion。
    Pillar數據存儲諸如端口,文件路徑,配置參數和密碼之類的值。
    Top File 將Formulas (States)和Salt Pillar數據與Salt minions匹配。
    Runners 在Salt master上執行的模塊,用於執行支持任務。Salt runners報告作業狀態,連接狀態,從外部API讀取數據,查詢連接的Salt minions等。
    Returners 將Salt minions返回的數據發送到另一個系統,例如數據庫。Salt Returners可以在Salt minion或Salt master上運行。
    Reactor 在SaltStack環境中發生事件時觸發反應。
    Salt Cloud / Salt Virt 在雲提供商/虛擬機管理程序上提供系統,並立即將其置於管理之下。
    Salt SSH 在沒有Salt minion的系統上通過SSH運行Salt命令。

4. SaltStack安裝與最小化配置

4.1 在控制機上安裝saltstack主控端軟件

//配置yum源
[root@node1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@node1 yum.repos.d]# sed -i 's#\$releasever#7#g' /etc/yum.repos.d/CentOS-Base.repo
[root@node1 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

//安裝saltstack主控端
[root@node1 ~]# yum -y install salt-master salt-minion

//修改主控端的配置文件
[root@node1 ~]# vim /etc/salt/minion 
···
# Set the location of the salt master server. If the master server cannot be
# resolved, then the minion will fail to start.
master: 192.168.136.158   //設置本段

# If multiple masters are specified in the 'master' setting, the default behavior
···

//啟動主控端的salt-master和salt-minion,並設置開機自啟
[root@node1 ~]# systemctl start salt-master
[root@node1 ~]# systemctl start salt-minion
[root@node1 ~]# systemctl enable salt-master
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
[root@node1 ~]# systemctl enable salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@node1 ~]# ss -antl
State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN      0      128                         *:22                                      *:*                  
LISTEN      0      100                         *:4505                                    *:*                  
LISTEN      0      100                 127.0.0.1:25                                      *:*                  
LISTEN      0      100                         *:4506                                    *:*                  
LISTEN      0      25                          *:514                                     *:*                  
LISTEN      0      128                        :::22                                     :::*                  
LISTEN      0      100                       ::1:25                                     :::*                  
LISTEN      0      25                         :::514                                    :::*         

4.2 在被控機上安裝salt-minion客戶端

//配置yum源
[root@node2 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@node2 yum.repos.d]# sed -i 's#\$releasever#7#g' /etc/yum.repos.d/CentOS-Base.repo
[root@node2 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@node2 yum.repos.d]# yum -y install salt-minion

//修改被控端的配置文件,將master設為主控端的IP
[root@node2 yum.repos.d]# vim /etc/salt/minion
···
# Set the location of the salt master server. If the master server cannot be
# resolved, then the minion will fail to start.
master: 192.168.136.158   //設置本段

# If multiple masters are specified in the 'master' setting, the default behavior
···

//啟動受控端的salt-minion並設置開機自啟
[root@node2 ~]# systemctl start salt-minion
[root@node2 ~]# systemctl enable salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.

4.3 saltstack配置文件

saltstack的配置文件在/etc/salt目錄

saltstack配置文件說明:

配置文件 說明
/etc/salt/master 主控端(控制端)配置文件
/etc/salt/minion 受控端配置文件
配置文件/etc/salt/master默認的配置就可以很好的工作,故無需修改此配置文件。

配置文件/etc/salt/minion常用配置參數

master:設置主控端的IP
id:設置受控端本機的唯一標識符,可以是ip也可以是主機名或自取某有意義的單詞
在日常使用過程中,經常需要調整或修改Master配置文件,SaltStack大部分配置都已經指定了默認值,只需根據自己的實際需求進行修改即可。下面的幾個參數是比較重要的

max_open_files:可根據Master將Minion數量進行適當的調整
timeout:可根據Master和Minion的網絡狀況適當調整
auto_accept和autosign_file:在大規模部署Minion時可設置自動簽證
master_tops和所有以external開頭的參數:這些參數是SaltStack與外部系統進行整合的相關配置參數

5. SaltStack認證機制

saltstack主控端是依靠openssl證書來與受控端主機認證通訊的,受控端啟動后會發送給主控端一個公鑰證書文件,在主控端用salt-key命令來管理證書。

salt-minion與salt-master的認證過程:

minion在第一次啟動時,會在/etc/salt/pki/minion/下自動生成一對密鑰,然后將公鑰發給master
master收到minion的公鑰后,通過salt-key命令接受該公鑰。此時master的/etc/salt/pki/master/minions目錄將會存放以minion id命名的公鑰,然后master就能對minion發送控制指令了

//salt-key常用選項
    -L      //列出所有公鑰信息
    -a minion    //接受指定minion等待認證的key
    -A      //接受所有minion等待認證的key
    -r minion    //拒絕指定minion等待認證的key
    -R      //拒絕所有minion等待認證的key
    -f minion   //顯示指定key的指紋信息
    -F      //顯示所有key的指紋信息
    -d minion   //刪除指定minion的key
    -D      //刪除所有minion的key
    -y      //自動回答yes

//接受指定minion的新證書
[root@node1 salt]# salt-key -a 'node*'
The following keys are going to be accepted:
Unaccepted Keys:
node1
node2
Proceed? [n/Y] Y
Key for minion node1 accepted.
Key for minion node2 accepted.

//查看當前證書情況
[root@node1 salt]# salt-key -L
Accepted Keys:
node1
node2
Denied Keys:
Unaccepted Keys:
Rejected Keys:

6. SaltStack遠程執行

//測試指定受控端主機是否存活
[root@node1 salt]# salt 'node2' test.ping
node2:
    True

//測試所有受控端主機是否存活
[root@node1 salt]# salt 'node*' test.ping
node2:
    True
node1:
    True

7. salt命令使用

//語法:salt [options] '<target>' <function> [arguments]

//常用的options
    --version       //查看saltstack的版本號
    --versions-report   //查看saltstack以及依賴包的版本號
    -h      //查看幫助信息
    -c CONFIG_DIR   //指定配置文件目錄(默認為/etc/salt/)
    -t TIMEOUT      //指定超時時間(默認是5s)
    --async     //異步執行
    -v      //verbose模式,詳細顯示執行過程
    --username=USERNAME     //指定外部認證用戶名
    --password=PASSWORD     //指定外部認證密碼
    --log-file=LOG_FILE     //指定日志記錄文件
    
//常用target參數
    -E      //正則匹配
    -L      //列表匹配 
    -S      //CIDR匹配網段
    -G      //grains匹配
    --grain-pcre    //grains加正則匹配
    -N      //組匹配
    -R      //范圍匹配
    -C      //綜合匹配(指定多個匹配)
    -I      //pillar值匹配

//示例
[root@node1 salt]# salt -E 'node*' test.ping
node2:
    True
node1:
    True
[root@node1 salt]# salt -L node1,node2 test.ping
node1:
    True
node2:
    True


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM