新聞中心
SaltStack是一個服務器基礎架構集中化管理平臺,具備配置管理、遠程執(zhí)行、監(jiān)控等功能,基于Python語言實現(xiàn),結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建。

成都創(chuàng)新互聯(lián)公司長期為1000多家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為高郵企業(yè)提供專業(yè)的成都網(wǎng)站設計、做網(wǎng)站,高郵網(wǎng)站改版等技術服務。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
而且采用RSA Key方式確認身份,傳輸采用AES加密,這使得它的安全性得到了保障。SaltStack經(jīng)常被描述為Func加強版+Puppet精簡版。
為什么選擇SaltStack?
目前市場上主流的開源自動化配置管理工具有puppet、chef、ansible、saltstack等等。到底選擇那個比較好?可以從以下幾方面考慮:
語言的選擇(puppet/chef vs ansible/saltstack)
Puppet、Chef基于Ruby開發(fā),ansible、saltstack基于python開發(fā)的
運維開發(fā)語言熱衷于python(后期可做二次開發(fā)),排除Puppet、Chef
速度的選擇 (ansible vs saltstack)
ansible基于ssh協(xié)議傳輸數(shù)據(jù),SaltStack使用消息隊列zeroMQ傳輸數(shù)據(jù)。從網(wǎng)上數(shù)據(jù)來看,SaltStack比ansible快大約40倍。
對比ansible,Saltstack缺點是需要安裝客戶端。為了速度建議選擇SaltStack
SaltStack github地址:https://github.com/saltstack/salt
SaltStack官網(wǎng)文檔地址:https://docs.saltstack.com
SaltStack架構
在SaltsStack架構中服務端叫作Master,客戶端叫作Minion,都是以守護進程的模式運行,一直監(jiān)聽配置文件中定義的ret_port(saltstack客戶端與服務端通信的端口,負責接收客戶端發(fā)送過來的結果,默認4506端口)和publish_port(saltstack的消息發(fā)布系統(tǒng),默認4505端口)的端口。當Minion運行時會自動連接到配置文件中定義的Master地址ret_port端口進行連接認證。
-
Master:控制中心,salt命令運行和資源狀態(tài)管理
-
Minion : 需要管理的客戶端機器,會主動去連接Mater端,并從Master端得到資源狀態(tài)
-
信息,同步資源管理信息
-
States:配置管理的指令集
-
Modules:在命令行中和配置文件中使用的指令模塊,可以在命令行中運行
-
Grains:minion端的變量,靜態(tài)的
-
Pillar:minion端的變量,動態(tài)的比較私密的變量,可以通過配置文件實現(xiàn)同步minions定義
-
highstate:為minion端下發(fā)永久添加狀態(tài),從sls配置文件讀取.即同步狀態(tài)配置
-
salt_schedule:會自動保持客戶端配置
SaltStack安裝配置
默認以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開啟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 #個人習慣使用IP,默認主機名
service salt-minion start
Master與Minion認證
minion在第一次啟動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion里面設置)下自動生成minion.pem(private key)和 minion.pub(public key),然后將 minion.pub發(fā)送給master。master在接收到minion的public key后,通過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,然后master就能對minion發(fā)送指令了。 認證命令如下:
[root@10.252.137.14 ~]# salt-key -L #查看當前證書簽證情況
Accepted Keys:
Unaccepted Keys:
10.252.137.141
Rejected Keys:
[root@10.252.137.14 ~]# salt-key -A -y #同意簽證所有沒有接受的簽證情況
The following keys are going to be accepted:
Unaccepted Keys:
10.252.137.141
Key for minion 10.252.137.141 accepted.
[root@10.252.137.14 ~]# salt-key -L
Accepted Keys:
10.252.137.141
Unaccepted Keys:
Rejected Keys:
SaltStack遠程執(zhí)行
[root@10.252.137.14 ~]# salt '*' test.ping
10.252.137.141:
True
[root@10.252.137.14 ~]# 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命令的目標,可以使用正則表達式
function:方法,由module提供
arguments:function的參數(shù)
target可以是以下內容:
\1. 正則表達式
salt -E 'Minion*' test.ping #主機名以Minion開通
\2. 列表匹配
salt -L Minion,Minion1 test.ping
\3. Grians匹配
salt -G 'os:CentOS' test.ping
os:CentOS(默認存在)是Grains的鍵值對,數(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. 復合匹配
salt -C 'G@os:CentOS or L@Minion' test.ping
\6. Pillar值匹配
salt -I 'key:value' test.ping
/etc/salt/master設置pillar_roots,數(shù)據(jù)以yaml保存在Master上
\7. CIDR匹配
salt -S '10.252.137.0/24' test.ping
10.252.137.0/24是一個指定的CIDR網(wǎng)段
function是module提供的方法
通過下面命令可以查看所有的function: salt ‘10.252.137.141’ sys.doc cmd
function可以接受參數(shù):
salt '10.252.137.141' cmd.run 'uname -a'
并且支持關鍵字參數(shù):
在所有minion上切換到/目錄以salt用戶運行uname -a命令。
salt '10.252.137.141' cmd.run 'uname -a' cwd=/ user=salt
SaltStack配置管理
states文件
salt states的核心是sls文件,該文件使用YAML語法定義了一些k/v的數(shù)據(jù)。
sls文件存放根路徑在master配置文件中定義,默認為/srv/salt,該目錄在操作系統(tǒng)上不存在,需要手動創(chuàng)建。
在salt中可以通過salt://代替根路徑,例如你可以通過salt://top.sls訪問/srv/salt/top.sls。
在states中top文件也由master配置文件定義,默認為top.sls,該文件為states的入口文件。
一個簡單的sls文件如下:
apache:
pkg.installed
service.running
- require:
- pkg: apache
說明:此SLS數(shù)據(jù)確保叫做”apache”的軟件包(package)已經(jīng)安裝,并且”apache”服務(service)正在運行中。
-
第一行,被稱為ID說明(ID Declaration)。ID說明表明可以操控的名字。
-
第二行和第四行是State說明(State Declaration),它們分別使用了pkg和service states。pkg state通過系統(tǒng)的包管理其管理關鍵包,service state管理系統(tǒng)服務(daemon)。 在pkg及service列下邊是運行的方法。方法定義包和服務應該怎么做。此處是軟件包應該被安裝,服務應該處于運行中。
-
第六行使用require。本方法稱為”必須指令”(Requisite Statement),表明只有當apache軟件包安裝成功時,apache服務才啟動起來。
state和方法可以通過點連起來,上面sls文件和下面文件意思相同。
apache:
pkg.installed
service.running
- require:
- pkg: apache
將上面sls保存為init.sls并放置在sal://apache目錄下,結果如下:
/srv/salt
├── apache
│ └── init.sls
└── top.sls
top.sls如何定義呢?
master配置文件中定義了三種環(huán)境,每種環(huán)境都可以定義多個目錄,但是要避免沖突,分別如下:
# 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
說明:
第一行,聲明使用base環(huán)境
第二行,定義target,這里是匹配所有
第三行,聲明使用哪些states目錄,salt會尋找每個目錄下的init.sls文件。
運行states
一旦創(chuàng)建完states并修改完top.sls之后,你可以在master上執(zhí)行下面命令:
[root@10.252.137.14 ~]# 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
上面命令會觸發(fā)所有minion從master下載top.sls文件以及其中定一個的states,然后編譯、執(zhí)行。執(zhí)行完之后,minion會將執(zhí)行結果的摘要信息匯報給master。
名稱欄目:快速上手SaltStack
文章出自:http://www.dlmjj.cn/article/djsceih.html


咨詢
建站咨詢
