一榜配、saltstack是什么否纬?
saltstack是一個(gè)開(kāi)源異構(gòu)平臺(tái)基礎(chǔ)設(shè)置管理工具。
二蛋褥、saltstack能干什么临燃?
如果你是一個(gè)管理成百上千臺(tái)服務(wù)器的管理員,你是否會(huì)遇到如下幾個(gè)場(chǎng)景烙心?
1.需要在每臺(tái)服務(wù)器上部署agent膜廊,幾百臺(tái)服務(wù)器難道一個(gè)一個(gè)部署?
2.agent配置需要變更淫茵,也需要一個(gè)一個(gè)配置爪瓜?
3.0day漏洞爆出,需要檢查服務(wù)器版本匙瘪,安裝對(duì)應(yīng)補(bǔ)丁铆铆,怎么辦蝶缀?
- 配置管理系統(tǒng),能夠維護(hù)預(yù)定義狀態(tài)的遠(yuǎn)程節(jié)點(diǎn)(比如薄货,確保指定的包被安裝翁都,指定的服務(wù)在運(yùn)行)。
- 分布式遠(yuǎn)程執(zhí)行系統(tǒng)谅猾,用來(lái)在遠(yuǎn)程節(jié)點(diǎn)(可以是單個(gè)節(jié)點(diǎn)柄慰,也可以是任意規(guī)則挑選出來(lái)的節(jié)點(diǎn))上執(zhí)行命令和查詢數(shù)據(jù)。
為什么要使用salt?
- 簡(jiǎn)單税娜,非常容易設(shè)置和維護(hù)坐搔,不用考慮項(xiàng)目的大小。幾乎不改動(dòng)配置就可以工作敬矩。
- 并行執(zhí)行概行,命令發(fā)送到遠(yuǎn)程系統(tǒng)是并行的而不是串行的,使用安全的加密協(xié)議谤绳,使用最小最快的網(wǎng)絡(luò)載荷占锯,提供簡(jiǎn)單的編程接口。
- 靈活易擴(kuò)展缩筛,使用python開(kāi)發(fā),可以從簡(jiǎn)單的Python API調(diào)用堡称,或者從命令行被調(diào)用瞎抛,可以用來(lái)執(zhí)行一次性命令,也可以作為一個(gè)更大的應(yīng)用程序的一個(gè)組成部分却紧。
三桐臊、saltstack運(yùn)行方式?
saltstack三種運(yùn)行方式
- Local
- Master/Minion
- Salt SSH
最傳統(tǒng)的運(yùn)行方式還是C/S模式晓殊,管理端安裝Master断凶,被管理節(jié)點(diǎn)上安裝Minion客戶端。
下面主要介紹Master/Minion運(yùn)行方式巫俺。
四认烁、saltstack基本安裝和配置
這里采用repo源,在線安裝介汹。請(qǐng)參考官方文檔
分別在管理端和被管理節(jié)點(diǎn)使用yum命令進(jìn)行安裝却嗡。
yum install salt-master
yum install salt-minion
安裝完成之后,首先啟動(dòng)master
service salt-master start
#或者
/etc/init.d/salt-master start
打開(kāi)minion節(jié)點(diǎn)嘹承,編輯配置文件
vim /etc/salt/minion
#添加下面配置窗价,注意分號(hào)后面有空格!
master: 192.168.252.136 #master端ip叹卷,有dns解析也可以填寫(xiě)域名撼港。
id: web137 #本節(jié)點(diǎn)名稱坪它,填好之后盡量不要更改。
啟動(dòng)minion
service salt-minion start
切換到master
#查看minion
salt-key -L
#會(huì)列如下信息
[root@localhost ~]# salt-key #省略-L也行帝牡。
Accepted Keys:
Denied Keys:
Unaccepted Keys:
web137
Rejected Keys:
#接受minion
salt-key -a web137 -y # -a 后面指定要接受的id名稱
或者
salt-key -A # -A表示接受所有哟楷,同理,可以使用 -d 否灾,-D拒絕掉卖擅。
#再次查看
[root@localhost ~]# salt-key -L
Accepted Keys:
web137
Denied Keys:
Unaccepted Keys:
Rejected Keys:
至此,一個(gè)簡(jiǎn)單的saltstack環(huán)境就已經(jīng)搭建好了墨技。
一些注意事項(xiàng)和說(shuō)明:
a) master使用兩個(gè)端口和minion通信惩阶,要確保這兩個(gè)端口通信正常。
- 4505 publish_port 消息發(fā)布系統(tǒng)端口
- 4506 ret_port 客戶端與服務(wù)端通信端口
可以關(guān)閉掉防火墻扣汪,或者將端口添加至INPUT鏈表断楷。
#iptables鏈表規(guī)則是自上而下,這里插入在REJECT ALL之前崭别。
iptables -I INPUT 5 -p tcp --dport 4505 -j ACCEPT -m comment --comment "salt_publish_port"
iptables -I INPUT 5 -p tcp --dport 4506 -j ACCEPT -m comment --comment "salt_ret_port"
當(dāng)然也可以在配置文件自定義端口冬筒。
#master配置文件
vim /etc/salt/master
#修改如下配置,注意空格茅主!
publish_port: 1505
ret_port: 1506
#修改成自定義的端口即可舞痰,注意,minion節(jié)點(diǎn)也需要指定master端口诀姚。
#minion配置文件
vim /etc/salt/minion
#配置如下
master_port: 1506 #指定master通信端口即可
b) minion和master認(rèn)證過(guò)程
1.minion在首次啟動(dòng)時(shí)响牛,會(huì)在/etc/salt/pki/minion/下自動(dòng)生成公鑰和私鑰
minion.pub(public key)和minion.pem(private key),并將公鑰(minion.pub)發(fā)送給master
2.master在接收到minion的公鑰后赫段,通過(guò)salt-key命令接受minion呀打,并將minion公鑰
放在/etc/salt/pki/master/minions下,以minion id命名糯笙。這個(gè)時(shí)候贬丛,master就可以對(duì)minion發(fā)送指令了。
也可以配置為自動(dòng)接受
#master配置
vim /etc/salt/master
#配置如下
auto_accept: True #修改為自動(dòng)接受
五给涕、saltstack簡(jiǎn)單應(yīng)用
salt命令格式
salt '<操作目標(biāo)>' <模塊.方法> [參數(shù)]
引號(hào)中的操作目標(biāo)豺憔,可以使用正則和通配符過(guò)濾、篩選稠炬。
salt 'shell正則' 命令
//使用通配符salt -E 'prel正則' 命令
//使用正則表達(dá)式-
salt -N $group 命令
//使用分組名稱
可以在配置文件進(jìn)行分組#編輯master文件 vim /etc/salt/master #配置如下 nodegroups: group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com' group2: 'G@os:Debian and foo.domain.com'
salt -L 'server_id1,server_id2,server_id3' 命令
//指定多個(gè)目標(biāo)idsalt -G 'osrelease:6.9' 命令
//指定os版本為6.9
示例:test.ping焕阿、cmd.run
#檢測(cè)通訊是否正常
salt '*' test.ping
#test.ping
[root@localhost ~]# salt '*' test.ping
web137:
True
mysql138:
True
#執(zhí)行命令
salt '*' cmd.run 'df -Th'
#cmd.run
[root@localhost ~]# salt '*' cmd.run 'df -Th'
mysql138:
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
ext4 18G 968M 16G 6% /
tmpfs tmpfs 491M 12K 491M 1% /dev/shm
/dev/sda1 ext4 477M 52M 400M 12% /boot
web137:
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
ext4 18G 968M 16G 6% /
tmpfs tmpfs 491M 12K 491M 1% /dev/shm
/dev/sda1 ext4 477M 52M 400M 12% /boot
怎么知道有哪些模塊可用?怎么知道模塊有哪些方法可以用首启、怎么用暮屡?
#獲取所有支持的模塊
salt 'web137' sys.list_modules
#
[root@localhost ~]# salt 'web137' sys.list_modules
web137:
- acl
- aliases
- alternatives
- archive
- artifactory
后面部分省略
#獲取模塊說(shuō)明文檔
salt 'web137' sys.doc test
#
[root@localhost ~]# salt 'web137' sys.doc test
'test.arg:'
Print out the data passed into the function ``*args`` and ```kwargs``, this
is used to both test the publication data and cli argument passing, but
also to display the information available within the publication data.
Returns {"args": args, "kwargs": kwargs}.
CLI Example:
salt '*' test.arg 1 "two" 3.1 txt="hello" wow='{a: 1, b: "hello"}'
'test.arg_repr:'
Print out the data passed into the function ``*args`` and ```kwargs``, this
is used to both test the publication data and cli argument passing, but
also to display the information available within the publication data.
Returns {"args": repr(args), "kwargs": repr(kwargs)}.
CLI Example:
salt '*' test.arg_repr 1 "two" 3.1 txt="hello" wow='{a: 1, b: "hello"}'
后面部分省略
軟件包的安裝
#pkg.install
salt 'web137' pkg.install tree
#
[root@localhost ~]# salt 'web137' pkg.install tree
web137:
----------
tree:
----------
new:
1.5.3-3.el6
old:
pkg 函數(shù)會(huì)自動(dòng)將本地系統(tǒng)包管理器映射到相同的salt函數(shù)。這意味著 pkg.install 在基于Red Hat系統(tǒng)上將使用 yum 而在Debian系統(tǒng)上則使用 apt 來(lái)安裝包毅桃。
grains模塊說(shuō)明
grains 是在 minion(客戶端)啟動(dòng)時(shí)收集到的一些信息褒纲,比如操作系統(tǒng)類型准夷、網(wǎng)卡ip等。
#列出所有的 grains 項(xiàng)目名字
[root@localhost ~]# salt 'web137' grains.ls
web137:
- SSDs
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
#列出所有的 grains 項(xiàng)目名以及值
[root@localhost ~]# salt 'web137' grains.items
web137:
----------
SSDs:
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
#也可以在minion配置自定義信息
#編輯minion配置莺掠,注意空格衫嵌!
vim /etc/salt/minion
grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15
有了這些信息之后,在遠(yuǎn)程執(zhí)行命令時(shí)就很方便彻秆。我們可以按照 grains 的一些指標(biāo)來(lái)操作楔绞。如上面提到,salt -G 'osrelease:6.9' 命令唇兑。
pillar模塊說(shuō)明
pillar 和 grains 不一樣酒朵,是在 master 上定義的,并且是針對(duì) minion 定義的一些信息扎附。像一些比較重要的數(shù)據(jù)(密碼)可以存在 pillar 里蔫耽,還可以定義變量等。
#編輯配置文件
vim /etc/salt/master
#添加
pillar_roots:
base:
- /srv/pillar
#如果pillar文件夾不存在留夜,新建文件夾
mkdir -p /srv/pillar
#修改配置文件后匙铡,重啟一下master
service salt-master restart
#新建入口文件top.sls
vim /srv/pillar/top.sls
#添加內(nèi)容
base:
'web137': #指定minion節(jié)點(diǎn)
- web137_info
#新建web137_info.sls文件
vim /srv/pillar/web137_info.sls
#添加內(nèi)容,注意分號(hào)后面有空格碍粥!
conf: /etc/web137.conf
myname: webserver
#刷新一下pillar狀態(tài)
salt '*' saltutil.refresh_pillar
#查看一下
salt 'web137' pillar.items
#
[root@localhost pillar]# salt 'web137' pillar.items
web137:
----------
conf:
/etc/web137.conf
myname:
webserver
#可以指定單個(gè)
salt 'web137' pillar.item conf
#
[root@localhost pillar]# salt 'web137' pillar.item conf
web137:
----------
conf:
/etc/web137.conf
#通過(guò) -I 也可以作為匹配信息
salt -I 'myname:webserver' test.ping
#
[root@localhost pillar]# salt -I 'myname:webserver' test.ping
web137:
True
其他雜項(xiàng)
#遠(yuǎn)程傳輸文件鳖眼,將本地文件copy到節(jié)點(diǎn)
root@localhost:~# salt-cp '' ./abc.txt /opt/
{'ftp138': {'/opt/abc.txt': True}, 'web137': {'/opt/abc.txt': True}}
#磁盤(pán)使用
[root@salt-master /]# salt '' disk.usage
#網(wǎng)絡(luò)接口
[root@salt-master /]# salt '' network.interfaces
#文件壓縮
root@localhost:~# salt '' archive.gzip /opt/abc.txt
#文件解壓縮
root@localhost:~# salt '' archive.gunzip /opt/abc.txt.gz
#拷貝文件到客戶端
salt '' cp.get_file salt://apache.txt /tmp/cp.txt
#拷貝目錄到客戶端
salt '' cp.get_dir salt://test /tmp
#顯示存活的客戶端
salt-run manage.up
#執(zhí)行服務(wù)端腳本
salt '' cmd.script salt://test/shell.sh
六、saltstack高級(jí)應(yīng)用
1即纲、配置管理安裝apache
#編輯配置文件
vim /etc/salt/master
#添加下面配置
file_roots:
base:
- /srv/salt
#環(huán)境: base具帮、dev(開(kāi)發(fā)環(huán)境)、test(測(cè)試環(huán)境)低斋、prod(生產(chǎn)環(huán)境)。
#新建目錄salt
mkdir -p /srv/salt
#新建top.sls文件
vim /srv/salt/top.sls
#添加內(nèi)容
base:
'web137':
- apache
#新建apache.sls文件
vim /srv/salt/apache.sls
#添加匪凡,特別要注意空格!
apache-service: #自定義id名稱
pkg.installed: #包安裝函數(shù)
- names: #如果只有一個(gè)服務(wù) - name:httpd
- httpd #包名
- httpd-devel
file.managed:
- name: /etc/httpd/conf/httpd.conf #目標(biāo)文件位置
- source: salt://httpd.conf #源文件膊畴,將配置文件放在/srv/salt/目錄下
- user: root #文件所屬用戶
- group: root #文件所屬組
- mode: 644 #文件權(quán)限
service.running: #指定服務(wù)運(yùn)行
- name: httpd #服務(wù)名稱
- enable: True #設(shè)置開(kāi)機(jī)自啟
#
salt 'web137' state.highstate
#或者直接指定文件
salt 'web137' state.sls apache #不需要.sls
2、目錄操作
#編輯top.sls文件
vim /srv/salt/top.sls
base:
'mysql138' :
- diroper
#新建diroper文件
vim /srv/salt/diroper.sls
diroper:
file.recurse:
- name: /tmp/diroper
- source: salt://diroper
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True #刪除源文件則目標(biāo)也會(huì)跟著刪除
#應(yīng)用
salt 'mysql138' state.highstate
3病游、遠(yuǎn)程執(zhí)行腳本
#添加
cmdexe:
- onlyif: test -f /tmp/123.txt
- names:
- touch /tmp/cmdtest.txt
- mkdir /tmp/cmdtest
- user: root
#添加
shell-test:
cmd.script:
- source: salt://test/1.sh
- user: root
4唇跨、管理crontab
#添加
cron-test:
cron.present: #把 cron.present: 改成 cron.absent為刪除
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '' #注意星號(hào)要使用單引號(hào)
- hour: 20
- daymonth: 1-10
- month: '3,5'
- dayweek: ''
七、saltstack開(kāi)發(fā)
import salt.client
client = salt.client.LocalClient()
ret = client.cmd('*','test.ping')
print ret
八衬衬、總結(jié)和參考
配置文件都是鍵值對(duì)的形式买猖,需要特別注意空格。
以上演示的是都在linux環(huán)境下部署滋尉,saltstack是可以支持多環(huán)境玉控,但需要注意的是master不支持安裝在windows環(huán)境。
-
筆記未涉及到部分
- windows配置狮惜、云配置
- web界面
- 架構(gòu)中還有一個(gè)類似代理層的syndic
參考網(wǎng)址