自動化運維工具SaltStack(1)
目錄
- 1. SaltStack介紹
- 2. SaltStack四大功能與四大執行方式
- 3. SaltStack元件介紹
- 4. SaltStack安裝與最小化配置
- 5. SaltStack認證機制
- 6. SaltStack遠端執行
- 7. salt命令使用
1. SaltStack介紹
1.1 自動化運維工具
作為一個運維人員,很大一部分工作是在業務的配置管理和狀態維護以及版本釋出上,而當業務場景及公司規模上了一定規模後,人為手工的去做這些工作將變得極其困難,此時我們將需要利用一些自動化運維的工具來達到批量管理的目的。
常用的自動化運維工具有:
- puppet
- ansible
- saltstack
此三款屬同類工具,皆可用來提高運維管理的效率,但它們又各有優勢,目前主流的自動化運維工具是ansible
和saltstack
。其中ansible
無需安裝客戶端,這是其最大的優勢,而saltstack
則需要安裝客戶端工具,類似zabbix
的agent。應用場景方面,ansible
常用於小型企業,而saltstack
則常用於中大型企業,因為ansible
無法並行執行而saltstack
可以並行。但不論其特點如何,本質上均屬同類,所以只需要掌握一種即可輕鬆勝任運維工作。
可以將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
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。 |
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安裝與最小化配置
環境說明:
主機型別 | IP地址 | 所需應用 |
---|---|---|
控制機 | 192.168.159.136 | salt salt-cloud salt-master salt-minion salt-ssh salt-syndic |
被控機 | 192.168.159.137 | salt-minion |
4.1 在控制機上安裝saltstack主控端軟體
//配置yum源
[root@node01 ~]# wget https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
--2020-08-04 20:11:08-- https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
正在解析主機 repo.saltstack.com (repo.saltstack.com)... 143.204.131.116, 143.204.131.17, 143.204.131.6, ...
正在連線 repo.saltstack.com (repo.saltstack.com)|143.204.131.116|:443... 已連線。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:5748 (5.6K) [application/octet-stream]
正在儲存至: “salt-repo-latest-2.el7.noarch.rpm”
100%[============================================>] 5,748 --.-K/s 用時 0s
2020-08-04 20:11:19 (494 MB/s) - 已儲存 “salt-repo-latest-2.el7.noarch.rpm” [5748/5748])
[root@node01 ~]# ls
anaconda-ks.cfg salt-repo-latest-2.el7.noarch.rpm
//安裝saltstack主控端
[root@node01 ~]# yum -y install salt salt-cloud salt-master salt-minion salt-ssh salt-syndic
//修改主控端的配置檔案
[root@node01 ~]# sed -i '/^#master:/a master: 192.168.159.136' /etc/salt/minion
[root@node01 ~]# sed -n '/^master/p' /etc/salt/minion
master: 192.168.159.136
//啟動主控端的salt-master和salt-minion,並設定開機自啟
[root@node01 ~]# systemctl enable --now salt-master salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@node01 ~]# ss -anlt
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 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
4.2 在被控機上安裝salt-minion客戶端
//配置yum源
[root@node02 ~]# wget wget https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
--2020-07-31 18:09:54-- http://wget/
Resolving wget (wget)... failed: Name or service not known.
wget: unable to resolve host address ‘wget’
--2020-07-31 18:10:09-- https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
Resolving repo.saltstack.com (repo.saltstack.com)... 13.225.146.4, 13.225.146.26, 13.225.146.60, ...
Connecting to repo.saltstack.com (repo.saltstack.com)|13.225.146.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5748 (5.6K) [application/octet-stream]
Saving to: ‘salt-repo-latest-2.el7.noarch.rpm’
100%[============================================>] 5,748 --.-K/s in 0s
2020-07-31 18:10:10 (1.76 GB/s) - ‘salt-repo-latest-2.el7.noarch.rpm’ saved [5748/5748]
FINISHED --2020-07-31 18:10:10--
Total wall clock time: 16s
Downloaded: 1 files, 5.6K in 0s (1.76 GB/s)
//安裝saltstack備控端
[root@node02 ~]# yum -y install salt-minion
//修改被控端的配置檔案,將master設為主控端的IP
[root@node02 ~]# sed -i '/^#master:/a master: 192.168.159.136' /etc/salt/minion
[root@node02 ~]# sed -n '/^master/p' /etc/salt/minion
master: 192.168.159.136
//啟動受控端的salt-minion並設定開機自啟
[root@node02 ~]# systemctl enable --now 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
//接受所有的key
[root@node01 salt]# salt-key -Ay
The following keys are going to be accepted:
Unaccepted Keys:
node01
node02
Key for minion node01 accepted.
Key for minion node02 accepted.
//檢視當前證書情況
[root@node01 salt]# salt-key -L
Accepted Keys:
node01
node02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
6. SaltStack遠端執行
//測試指定受控端node02主機是否存活
[root@node01 ~]# salt 'node02' test.ping
node02:
True
[root@node01 ~]# salt 'node02' cmd.run hostname
node02:
node02
//測試所有受控端主機是否存活
[root@node01 ~]# salt '*' test.ping
node02:
True
node01:
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@node01 ~]# salt -E 'node*' test.ping
node02:
True
node01:
True
[root@node01 ~]# salt -L node01,node02 test.ping
node02:
True
node01:
True
[root@node01 ~]# salt -S '192.168.159.0/24' test.ping
node02:
True
node01:
True