saltstack快速入門 saltstack介紹 Salt,一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬台伺服器,速度夠快,伺服器之間秒級通訊 主要功能遠程執行配置管理Stalstack官方文檔 Saltstack原理 Salt使用server-agent通 ...
saltstack快速入門
saltstack介紹
Salt,一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬台伺服器,速度夠快,伺服器之間秒級通訊
主要功能
遠程執行
配置管理
Stalstack官方文檔
Saltstack原理
Salt
使用server-agent
通信模型,服務端組件被稱為Salt master
,agent
被稱為Salt minion
Salt master
主要負責向Salt minions
發送命令,然後聚合併顯示這些命令的結果。一個Salt master
可以管理多個minion
系統Salt server
與Salt minion
通信的連接由Salt minion
發起,這也意味著Salt minion
上不需要打開任何傳入埠(從而減少攻擊)。Salt server
使用埠4505
和4506
,必須打開埠才能接收到訪問連接
- Publisher (埠4505)所有
Salt minions
都需要建立一個持續連接到他們收聽消息的發佈者埠。命令是通過此埠非同步發送給所有連接,這使命令可以在大量系統上同時執行。
- Request Server (埠4506)
Salt minios
根據需要連接到請求伺服器,將結果發送給Salt master
,並安全地獲取請求的文件或特定minion
相關的數據值(稱為Salt pillar
)。連接到這個埠的連接在Salt master
和Salt minion
之間是1:1(不是非同步)。
[root@salt-master ~]# lsof -i:4505 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME salt-mast 81121 root 16u IPv4 304019 0t0 TCP *:4505 (LISTEN) salt-mast 81121 root 18u IPv4 304082 0t0 TCP salt-master:4505->salt-minion03:37240 (ESTABLISHED) salt-mast 81121 root 19u IPv4 307610 0t0 TCP salt-master:4505->salt-minion01:47804 (ESTABLISHED) salt-mast 81121 root 20u IPv4 307611 0t0 TCP salt-master:4505->salt-minion02:58594 (ESTABLISHED)
快速安裝
1.1 配置 yum 倉庫
# 使用官方自帶yum [root@salt-master ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm # 或者使用阿裡雲的yum(建議使用阿裡雲的,速度快一點) [root@salt-master ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm [root@salt-master ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo [root@salt-master ~]# yum clean all [root@salt-master ~]# yum makecache
1.2 安裝Master,並啟動服務
[root@salt-master ~]# yum -y install salt-master [root@salt-master ~]# systemctl enable salt-master [root@salt-master ~]# systemctl start salt-master
1.3 安裝 Salt-Minion 指向 Salt-Master 網路地址
[root@salt-minion01 ~]# yum -y install salt-minion # 可以使用主機名,也可以使用IP地址 [root@salt-minion01 ~]# cp /etc/salt/minion{,.back} [root@salt-minion01 ~]# sed -i '/#master: /c\master: salt-master' /etc/salt/minion [root@salt-minion01 ~]# systemctl enable salt-minion [root@salt-minion01 ~]# systemctl start salt-minion
SaltStack認證方式
Salt
的數據傳輸是通過 AES
加密,Master
和 Minion
之前在通信之前,需要進行認證。Salt
通過認證的方式保證安全性,完成一次認證後,Master 就可以控制 Minion 來完成各項工作了。
1. minion
在第一次啟動時候,會在 /etc/salt/pki/minion/
下自動生成 minion.pem(private key)
和 minion.pub(public key)
, 然後將 minion.pub
發送給 master
2. master
在第一次啟動時,會在 /etc/salt/pki/master/
下自動生成 master.pem
和 master.pub
;並且會接收到 minion
的 public key
, 通過 salt-key
命令接收 minion public key
, 會在 master
的 /etc/salt/pki/master/minions
目錄下存放以 minion id
命令的 public key
;驗證成功後同時 minion
會保存一份 master public key
在 minion 的 /etc/salt/pki/minion/minion_master.pub
里。
Salt認證原理總結
minion將自己的公鑰發送給master
master認證後再將自己的公鑰也發送給minion端
Master端認證示例
1)根據上面提到的認證原理,先看下未認證前的master
和minion
的pki
目錄
# master上查看 [root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ │ └── salt-minion01 │ └── minions_rejected └── minion # minion上查看 [root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion.pem └── minion.pub
2)salt-key
命令解釋:
[root@salt-master ~]# salt-key -L Accepted Keys: #已經接受的key Denied Keys: #拒絕的key Unaccepted Keys: #未加入的key Rejected Keys: #吊銷的key #常用參數 -L #查看KEY狀態 -A #允許所有 -D #刪除所有 -a #認證指定的key -d #刪除指定的key -r #註銷掉指定key(該狀態為未被認證) #配置master自動接受請求認證(master上配置 /etc/salt/master) auto_accept: True
3)salt-key
認證
#列出當前所有的key [root@salt-master ~]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: salt-minion01 Rejected Keys: #添加指定minion的key [root@salt-master ~]# salt-key -a salt-minion01 -y The following keys are going to be accepted: Unaccepted Keys: salt-minion01 Key for minion salt-minion01 accepted. #添加所有minion的key [root@salt-master ~]# salt-key -A -y [root@salt-master ~]# salt-key -L Accepted Keys: salt-minion01 Denied Keys: Unaccepted Keys: Rejected Keys:
4)上面認證完成後再次查看master
和minion
的pki
目錄
# master上 [root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ │ └── salt-minion01 │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ └── minions_rejected └── minion # minion上 [root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion_master.pub ├── minion.pem └── minion.pub
Saltstack遠程執行
遠程執行是 Saltstack
的核心功能之一。主要使用 salt
模塊批量給選定的 minion
端執行相應的命令,並獲得返回結果。
1、判斷 salt
的 minion
主機是否存活
[root@salt-master ~]# salt '*' test.ping salt-minion02: True salt-minion03: True salt-minion01: True # salt saltstack自帶的一個命令 # * 表示目標主機,這裡表示所有目標主機 # test.ping test是saltstack中的一個模塊,ping則是這個模塊下麵的一個方法
2、saltstack
使用 cmd.run
模塊遠程執行shell命令
#在指定目標minion節點運行uptime命令 [root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime' salt-minion02: 18:13:08 up 28 min, 2 users, load average: 0.00, 0.04, 0.13
Saltstack配置管理
Salt
通過State
模塊來進行文件的管理;通過YAML
語法來描述,尾碼是.sls
的文件
1、瞭解 YAML
參考:http://docs.saltstack.cn/topics/yaml/index.html
remove vim:
pkg.removed:
- name: vim
- 帶有ID和每個函數調用的行都以冒號(:)結束。
- 每個函數調用在ID下麵縮進兩個空格。
- 參數作為列表傳遞給每個函數。
- 每行包含函數參數的行都以兩個空格縮進開頭,然後是連字元,然後是一個額外的空格。
- 如果參數採用單個值,則名稱和值位於由冒號和空格分隔的同一行中。
- 如果一個參數需要一個列表,則列表從下一行開始,並縮進兩個空格
2、配置sals
,定義環境 參考文檔
# 定義環境目錄 [root@salt-master ~]# vim /etc/salt/master file_roots: base: - /srv/salt/base dev: - /srv/salt/dev prod: - /srv/salt/prod # 創建上面定義的目錄 [root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod} # 重啟服務 [root@salt-master ~]# systemctl restart salt-master
3、編寫第一個sls
文件
# 在base環境下編寫第一個安裝apache的sls文件 [root@salt-master ~]# cd /srv/salt/base/ [root@salt-master base]# cat apache.sls apache-install: pkg.installed: - name: httpd apache-service: service.running: - name: httpd - enable: True # 在dev環境下編寫一個安裝ftp的sls文件 [root@salt-master base]# cd /srv/salt/dev/ [root@salt-master dev]# cat vsftpd.sls vsftpd-install: pkg.installed: - name: vsftpd vsftpd-service: service.running: - name: vsftpd - enable: True
4、使用salt
命令的state
狀態模塊讓minion
應用配置
# 讓所有的minion都安裝apache(由於salt預設的環境就是base,所以可以直接在後面指定調用的apache.sls文件,不要尾碼sls) [root@salt-master ~]# salt '*' state.sls apache # 讓所有的minion都安裝vsftpd(saltenv指定環境) [root@salt-master ~]# salt '*' state.sls vsftpd saltenv=dev
5、使用salt
的高級狀態使不同主機應用不同的配置
# topfile入口文件只能放在base環境 [root@salt-master ~]# cat /srv/salt/base/top.sls base: 'salt-minion01': - apache 'salt-minion03': - apache dev: 'salt-minion02': - vsftpd 'salt-minion03': - vsftpd
6、使用salt
命令執行高級狀態,會將top.sls
當做入口文件,進行調用
# 將高級狀態應用到所有主機 [root@salt-master ~]# salt '*' state.highstate
Saltstack常用配置
1、Salt Master配置Salt Master
端的配置文件/etc/salt/master
,常用配置如下:
interface: //指定bind 的地址(預設為0.0.0.0) publish_port: //指定發佈埠(預設為4505) ret_port: //指定結果返回埠, 與minion配置文件中的master_port對應(預設為4506) user: //指定master進程的運行用戶,如果調整, 則需要調整部分目錄的許可權(預設為root) timeout: //指定timeout時間, 如果minion規模龐大或網路狀況不好,建議增大該值(預設5s) keep_jobs: //minion執行結果返回master, master會緩存到本地的cachedir目錄,該參數指定緩存多長時間,可查看之間執行結果會占用磁碟空間(預設為24h) job_cache: //master是否緩存執行結果,如果規模龐大(超過5000台),建議使用其他方式來存儲jobs,關閉本選項(預設為True) file_recv : //是否允許minion傳送文件到master 上(預設是Flase) file_roots: //指定file server目錄, 預設為: file_roots: base: - /srv/salt pillar_roots : //指定pillar 目錄, 預設為: pillar_roots: base: - /srv/pillar log_level: //日誌級別 支持的日誌級別有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 預設為’warning’)
2、Salt Minion
端的配置文件/etc/salt/minion
,常用配置如下:
master: //指定master 主機(預設為salt) master_port: //指定認證和執行結果發送到master的哪個埠, 與master配置文件中的ret_port對應(預設為4506) id: //指定本minion的標識, salt內部使用id作為標識(預設為主機名) user: //指定運行minion的用戶.由於安裝包,啟動服務等操作需要特權用戶, 推薦使用root( 預設為root) cache_jobs : //minion是否緩存執行結果(預設為False) backup_mode: //在文件操作(file.managed 或file.recurse) 時, 如果文件發送變更,指定備份目錄.當前有效 providers : //指定模塊對應的providers, 如在RHEL系列中, pkg對應的providers 是yumpkg5 renderer: //指定配置管理系統中的渲染器(預設值為:yaml_jinja ) file_client : //指定file clinet 預設去哪裡(remote 或local) 尋找文件(預設值為remote) loglevel: //指定日誌級別(預設為warning) tcp_keepalive : //minion 是否與master 保持keepalive 檢查, zeromq3(預設為True)