saltstack簡介
SaltStack是一種新型的基礎設施管理軟件,簡單易部署,可伸縮的足以管理成千上萬的服務器,和足夠快的速度控制,與他們交流,以毫秒為單位。SaltStack提供了一個動態基礎設施通信總線用於編排,遠程執行、配置管理等等。SaltStack項目於2011年啟動,年增長速度較快,五年期固定基礎設施編制和配置管理的開源項目。SaltStack社區致力於保持slat項目集中、友好、健康、開放。
簡單來說它的兩大基礎功能就是:配置管理、遠程命令執行。剩下就是根據你的需求自由組合,實現更復雜的功能和系統管理。
saltstack運行的模式
- local
- master/minion
- salt SSH(可以不依賴客戶端)
saltstack三大功能
- 遠程執行
- 配置管理
- 雲管理(不是特別成熟,不建議生產環境使用)
Salt即可以批量執行命令,也可以單機執行。通常單機執行用於測試:
- 單機(立即)執行。 使用salt-call命令單機執行操作。
- 批量(立即)執行。最常用的操作。使用salt命令,對匹配的minion節點執行操作。
salt 安裝
salt解析基於DNS,如果做實驗發現執行特別慢,可以嘗試配置好域名解析。
vim /etc/hosts
192.168.56.11 linux-node1
192.168.56.12 linux-node2
master 安裝
安裝epel源
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
配置saltstack的官方yum源
vim /etc/yum.repo.d/saltstack-repo
####################
# Enable SaltStack's package repository
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS 7
baseurl=https://repo.saltstack.com/yum/rhel7
enabled=1
gpgcheck=0
gpgkey=https://repo.saltstack.com/yum/rhel7/SALTSTACK-GPG-KEY.pub
服務端安裝salt-master 軟件
yum install salt-master -y
saltstack服務端配置文件
- 配置文件需要頂頭寫,不能有空格。
mkdir /srv/salt/{base,prod,test,pillar} -p
vim /etc/salt/master
default_include: master.d/*.conf
interface: 10.10.0.159
ipv6: False
timeout: 30
max_open_files: 65535
worker_threads: 5
state_verbose: False
file_roots:
base:
- /srv/salt/base/
prod:
- /srv/salt/prod/
test:
- /srv/salt/test/
pillar_roots:
base:
- /srv/salt/pillar
log_file: /var/log/salt/master
log_level: warning
### salt api 相關參數
rest_cherrypy:
port: 8000
disable_ssl: True
external_auth:
pam:
saltapi:
- .*
- '@runner'
- '@wheel'
修改完配置文件后,啟動master服務
systemctl enable salt-master.service
systemctl start salt-master.service
注意:salt的書寫一定要注意格式。基礎環境(base),生產環境(prod),測試環境(test)分三個目錄。通過不同的目錄創建不同的內容。
關於salt-master配置文件更多的內容可以參考salt配置文件詳解
客戶端安裝
安裝salt-minion 軟件
yum install salt-minion -y
配置並啟動saltstack客戶端。
vim /etc/salt/minion
master: 192.168.56.11
id: linux-node2
重啟minion進程
systemctl enable salt-minion.service
systemctl start salt-minion.service
minion 向 master 端注冊
master端操作
shell> salt-key -L
Accepted Keys:
linux-node1
Denied Keys:
Unaccepted Keys:
linux-node2
Rejected Keys:
shell> salt-key - A -y ## 同意所有的未注冊主機
Accepted Keys:
linux-node1
Denied Keys:
Unaccepted Keys:
linux-node2
Rejected Keys:
master的key存放位置:
shell> cd /etc/salt/pki/master/
shell> tree
+-- master.pem
+-- master.pub
+-- minions
| +-- linux-node1 (minion的公鑰)
| +-- linux-node2 (minion的公鑰)
+-- minions_autosign
+-- minions_denied
+-- minions_pre
+-- minions_rejected
5 directories, 4 files
[root@linux-node1 master]#
salt-key命令補充
salt-key -L列出所有的key信息。salt-key -d www.etiantian.org刪除一個key 。salt-key -A -y同意所有未注冊的minion端。salt-key -a www.etiantian.org同意一個機器。
minion端 ID 存放在這個文件中
shell> ls /etc/salt/pki/minion
minion_master.pub minion.pem minion.pub
刪除舊的key文件
cd /etc/salt/pki/minion && rm -f *
salt遠程執行
命令格式:salt 'Traget' module
- 目標:Traget
- 模塊:Module
- 返回:Returners
目標匹配方式
通配符使用:
salt '*' test.ping
salt '*.example.net' test.ping
salt '*.example.*' test.ping
salt 'web?.example.net' test.ping
salt 'web[1-5]' test.ping
salt 'web[1,3]' test.ping
salt 'web-[x-z]' test.ping
正則表達式使用:
salt -E 'web1-(prod|devel)' test.ping
也可以在top.sls中使用正則表示:
base:
'web1-(prod|devel)':
- match: pcre ## 指明匹配方式
- webserver
lists使用:
salt -L 'web1,web2,web3' test.ping
IP地址使用:
[root@centos6 ~]# salt -S '192.168.2.0/24' test.ping
minion.saltstack.com:
True
Grains使用:
salt -G 'os:centos' test.ping
也可以在top.sls中使用Grains表示:
base:
'os:centos':
- match: grain ## 指定匹配方式
- init.env_init
- zabbix-agent-linux.config
- salt.agent
Pillar使用:
salt -I 'master:True' test.ping
salt分組
在使用 SaltStack 對主機進行批量管理的時候,因為不同的服務器組所做的業務功能不同,因此為了更加方便的管理,需要對主機進行分組管理
一. 編輯配置文件
[root@salt-master ~]# vim /etc/salt/master
nodegroups:
group-1: G@os:Ubuntu
二. 分組方式
- G -- 針對 Grains 做單個匹配,例如:G@os:Ubuntu
- E -- 針對 minion 針對正則表達式做匹配,例如:E@web\d+.(dev|qa|prod).loc
- P -- 針對 Grains 做正則表達式匹配,例如:P@os:(RedHat|Fedora|CentOS)
- L -- 針對 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
- I -- 針對 Pillar 做單個匹配,例如:I@pdata:foobar
- S -- 針對子網或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
- R -- 針對客戶端范圍做匹配,例如: R@%foo.bar
salt 異步執行方法
[root@xxx ~]# salt --async test01 cmd.run "echo 'test'"
Executed command with job ID: 20150915151813222323
[root@xxx ~]# salt-run jobs.lookup_jid 20150915151813222323
Fabric:
test
還有個-v參數在返回結果的同時,一同返回本次任務的jid,如果超時還是會返回jid的。
[root@test ~]# salt -v test01 test.ping
Executing job with jid 20150917172323566343
-------------------------------------------
test01:
True
如果是調用saltapi來實現異步執行語句和獲取jid信息,參數可以這樣:
params = {'client':'local_async', 'fun':'test.echo', 'tgt':'test01', 'arg1':'hello'}
params = {'client':'runner', 'fun':'jobs.lookup_jid', 'jid': '20150827163231404925'}
salt-stakck 狀態查詢
- 查看還在運行的程序:
salt-run jobs.active - 查看以前的操作歷史記錄來:
salt-run jobs.list_jobs - 查看minion支持的module列表的命令
salt '*' sys.list_modules - 查看CMD模塊下的所有function。
salt '*' sys.list_functions cmd - 查看cmd 模塊的詳細用法。
salt '*' sys.doc cmd
參考
補充一個線上的配置文件
interface: 192.168.56.11
ipv6: False
max_open_files: 65535
worker_threads: 5
timeout: 30
state_verbose: False
file_roots:
base:
- /data/db/salt/base/
prod:
- /data/db/salt/prod/
test:
- /data/db/salt/test/
pillar_roots:
base:
- /data/db/salt/pillar
log_file: /var/log/salt/master
log_level: warning
mysql.host: '192.168.56.13'
mysql.user: 'salt'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
external_auth:
pam:
saltapi:
- .*
- '@runner'
- '@jobs'
rest_cherrypy:
port: 8088
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key
支持文檔
官方幫助文檔
官方github
saltstack 中文用戶組
Saltstack SLS文件解讀
[官方的 salt-states 倉庫地址] (https://github.com/saltstack/salt-states)
來自於社區的一些salt states例子:
https://github.com/blast-hardcheese/blast-salt-states
https://github.com/kevingranade/kevingranade-salt-state
https://github.com/uggedal/states
https://github.com/mattmcclean/salt-openstack/tree/master/salt
https://github.com/rentalita/ubuntu-setup/
https://github.com/brutasse/states
https://github.com/bclermont/states
https://github.com/pcrews/salt-data
文檔: http://docs.saltstack.com/topics/tutorials/starting_states.html
文檔: http://docs.saltstack.com/ref/states/writing.html
文檔: http://docs.saltstack.com/ref/states/ordering.html
文檔: http://www.ituring.com.cn/article/37783
文檔: http://docs.saltstack.com/topics/tutorials/starting_states.html
