掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
SaltStack是一個(gè)服務(wù)器基礎(chǔ)架構(gòu)集中化管理平臺(tái),具備配置管理、遠(yuǎn)程執(zhí)行、監(jiān)控等功能,基于Python語(yǔ)言實(shí)現(xiàn),結(jié)合輕量級(jí)消息隊(duì)列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構(gòu)建。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為高郵企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,高郵網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
而且采用RSA Key方式確認(rèn)身份,傳輸采用AES加密,這使得它的安全性得到了保障。SaltStack經(jīng)常被描述為Func加強(qiáng)版+Puppet精簡(jiǎn)版。
目前市場(chǎng)上主流的開(kāi)源自動(dòng)化配置管理工具有puppet、chef、ansible、saltstack等等。到底選擇那個(gè)比較好?可以從以下幾方面考慮:
語(yǔ)言的選擇(puppet/chef vs ansible/saltstack)
Puppet、Chef基于Ruby開(kāi)發(fā),ansible、saltstack基于python開(kāi)發(fā)的
運(yùn)維開(kāi)發(fā)語(yǔ)言熱衷于python(后期可做二次開(kāi)發(fā)),排除Puppet、Chef
速度的選擇 (ansible vs saltstack)
ansible基于ssh協(xié)議傳輸數(shù)據(jù),SaltStack使用消息隊(duì)列zeroMQ傳輸數(shù)據(jù)。從網(wǎng)上數(shù)據(jù)來(lái)看,SaltStack比ansible快大約40倍。
對(duì)比ansible,Saltstack缺點(diǎn)是需要安裝客戶端。為了速度建議選擇SaltStack
SaltStack github地址:https://github.com/saltstack/salt
SaltStack官網(wǎng)文檔地址:https://docs.saltstack.com
在SaltsStack架構(gòu)中服務(wù)端叫作Master,客戶端叫作Minion,都是以守護(hù)進(jìn)程的模式運(yùn)行,一直監(jiān)聽(tīng)配置文件中定義的ret_port(saltstack客戶端與服務(wù)端通信的端口,負(fù)責(zé)接收客戶端發(fā)送過(guò)來(lái)的結(jié)果,默認(rèn)4506端口)和publish_port(saltstack的消息發(fā)布系統(tǒng),默認(rèn)4505端口)的端口。當(dāng)Minion運(yùn)行時(shí)會(huì)自動(dòng)連接到配置文件中定義的Master地址ret_port端口進(jìn)行連接認(rèn)證。
默認(rèn)以CentOS6為例,采用yum安裝,還有其它安裝方式,如pip、源碼、salt-bootstrap
EPEL源配置
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-6.noarch.rpm
安裝、配置管理端(master)
yum -y install salt-master
service salt-master start
注:需要iptables開(kāi)啟master端4505、4506端口
安裝被管理端
yum -y install salt-minion
sed -i 's@#manster:.*@manster: master_ipaddress@' /etc/salt/minion #master_ipaddress為管理端IP
echo 10.252.137.141 > /etc/salt/minion_id #個(gè)人習(xí)慣使用IP,默認(rèn)主機(jī)名
service salt-minion start
Master與Minion認(rèn)證
minion在第一次啟動(dòng)時(shí),會(huì)在/etc/salt/pki/minion/(該路徑在/etc/salt/minion里面設(shè)置)下自動(dòng)生成minion.pem(private key)和 minion.pub(public key),然后將 minion.pub發(fā)送給master。master在接收到minion的public key后,通過(guò)salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會(huì)存放以minion id命名的 public key,然后master就能對(duì)minion發(fā)送指令了。 認(rèn)證命令如下:
[[email protected] ~]# salt-key -L #查看當(dāng)前證書(shū)簽證情況
Accepted Keys:
Unaccepted Keys:
10.252.137.141
Rejected Keys:
[[email protected] ~]# salt-key -A -y #同意簽證所有沒(méi)有接受的簽證情況
The following keys are going to be accepted:
Unaccepted Keys:
10.252.137.141
Key for minion 10.252.137.141 accepted.
[[email protected] ~]# salt-key -L
Accepted Keys:
10.252.137.141
Unaccepted Keys:
Rejected Keys:
SaltStack遠(yuǎn)程執(zhí)行
[[email protected] ~]# salt '*' test.ping
10.252.137.141:
True
[[email protected] ~]# salt '*' cmd.run 'ls -al'
10.252.137.141:
total 40
drwx------ 4 root root 4096 Sep 7 15:01 .
drwxr-xr-x 22 root root 4096 Sep 3 22:10 ..
-rw------- 1 root root 501 Sep 7 14:49 .bash_history
-rw-r--r-- 1 root root 3106 Feb 20 2014 .bashrc
drwx------ 2 root root 4096 Jan 30 2015 .cache
drwxr-xr-x 2 root root 4096 Apr 22 13:57 .pip
-rw-r--r-- 1 root root 140 Feb 20 2014 .profile
-rw-r--r-- 1 root root 64 Apr 22 13:57 .pydistutils.cfg
-rw------- 1 root root 4256 Sep 7 15:01 .viminfo
salt執(zhí)行命令的格式如下:
salt '' [arguments]
target:執(zhí)行salt命令的目標(biāo),可以使用正則表達(dá)式
function:方法,由module提供
arguments:function的參數(shù)
target可以是以下內(nèi)容:
\1. 正則表達(dá)式
salt -E 'Minion*' test.ping #主機(jī)名以Minion開(kāi)通
\2. 列表匹配
salt -L Minion,Minion1 test.ping
\3. Grians匹配
salt -G 'os:CentOS' test.ping
os:CentOS(默認(rèn)存在)是Grains的鍵值對(duì),數(shù)據(jù)以yaml保存在minion上,可在minion端直接編輯/etc/salt/grains,yaml格式?;蛘咴趍aster端執(zhí)行salt ‘*’ grains.setval key “{‘sub-key’: ‘val’, ‘sub-key2’: ‘val2’}” ,具體文檔(命令salt * sys.doc grains查看文檔)
\4. 組匹配
salt -N groups test.ping
如,在master新建/etc/salt/master.d/nodegroups.conf ,yaml格式
\5. 復(fù)合匹配
salt -C 'G@os:CentOS or L@Minion' test.ping
\6. Pillar值匹配
salt -I 'key:value' test.ping
/etc/salt/master設(shè)置pillar_roots,數(shù)據(jù)以yaml保存在Master上
\7. CIDR匹配
salt -S '10.252.137.0/24' test.ping
10.252.137.0/24是一個(gè)指定的CIDR網(wǎng)段
function是module提供的方法
通過(guò)下面命令可以查看所有的function: salt ‘10.252.137.141’ sys.doc cmd
function可以接受參數(shù):
salt '10.252.137.141' cmd.run 'uname -a'
并且支持關(guān)鍵字參數(shù):
在所有minion上切換到/目錄以salt用戶運(yùn)行uname -a命令。
salt '10.252.137.141' cmd.run 'uname -a' cwd=/ user=salt
states文件
salt states的核心是sls文件,該文件使用YAML語(yǔ)法定義了一些k/v的數(shù)據(jù)。
sls文件存放根路徑在master配置文件中定義,默認(rèn)為/srv/salt,該目錄在操作系統(tǒng)上不存在,需要手動(dòng)創(chuàng)建。
在salt中可以通過(guò)salt://代替根路徑,例如你可以通過(guò)salt://top.sls訪問(wèn)/srv/salt/top.sls。
在states中top文件也由master配置文件定義,默認(rèn)為top.sls,該文件為states的入口文件。
一個(gè)簡(jiǎn)單的sls文件如下:
apache:
pkg.installed
service.running
- require:
- pkg: apache
說(shuō)明:此SLS數(shù)據(jù)確保叫做”apache”的軟件包(package)已經(jīng)安裝,并且”apache”服務(wù)(service)正在運(yùn)行中。
state和方法可以通過(guò)點(diǎn)連起來(lái),上面sls文件和下面文件意思相同。
apache:
pkg.installed
service.running
- require:
- pkg: apache
將上面sls保存為init.sls并放置在sal://apache目錄下,結(jié)果如下:
/srv/salt
├── apache
│ └── init.sls
└── top.sls
top.sls如何定義呢?
master配置文件中定義了三種環(huán)境,每種環(huán)境都可以定義多個(gè)目錄,但是要避免沖突,分別如下:
# file_roots:
# base:
# - /srv/salt/
# dev:
# - /srv/salt/dev/services
# - /srv/salt/dev/states
# prod:
# - /srv/salt/prod/services
# - /srv/salt/prod/states
top.sls可以這樣定義:
base:
'*':
- apache
說(shuō)明:
第一行,聲明使用base環(huán)境
第二行,定義target,這里是匹配所有
第三行,聲明使用哪些states目錄,salt會(huì)尋找每個(gè)目錄下的init.sls文件。
運(yùn)行states
一旦創(chuàng)建完states并修改完top.sls之后,你可以在master上執(zhí)行下面命令:
[[email protected] ~]# salt '*' state.highstate
sk2:
----------
State: - pkg
Name: httpd
Function: installed
Result: True
Comment: The following packages were installed/updated: httpd.
Changes:
----------
httpd:
----------
new:
2.2.15-29.el6.centos
old:
----------
State: - service
Name: httpd
Function: running
Result: True
Comment: Service httpd has been enabled, and is running
Changes:
----------
httpd:
True
Summary
------------
Succeeded: 2
Failed: 0
------------
Total: 2
上面命令會(huì)觸發(fā)所有minion從master下載top.sls文件以及其中定一個(gè)的states,然后編譯、執(zhí)行。執(zhí)行完之后,minion會(huì)將執(zhí)行結(jié)果的摘要信息匯報(bào)給master。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流