七天學會 SALT STACK 自動化運維 (1)
- 簡單理解 SALTSTACK
- 安裝與配置
- 基本的使用方法
- 結束語
- 引用資源
簡單理解 SALT STACK
筆者是初次接觸 自動化運維 這一技術領域,也是初次接觸SALT STACK這一自動化運維工具, 所以這里的 簡單理解 SALTSTACK 之意為 筆者的簡單理解,可以看做是作者的學習筆記,文中較多記述筆者在配置安裝過程中遇到的問題,可能會有紕漏以及錯誤的地方,具體的新手指南,最好是參見這里.
SALTSTACK是一款自動化運維軟件,使用python編寫,使用ZEROMQ用作通信協議,主要功能包括命令批量執行,服務器環境批量配置,配置文件托管,服務器狀態監控,配合強大的 Grains&Pillar 和自定義SLS配置文件,可以實現復雜功能,筆者會從最簡單的場景開始着手學習並且記錄配置過程, 簡單使用過后,筆者的觀點是,即使只是使用 SALTSTACK 管理單台vps,也比SSH要好用一些,稍后會說到原因。同類產品有 Puppet 和 Chef,因為沒有使用過所以無法進行比較.
安裝與配置
這里有詳細的安裝指南,因為該產品的更新迭代速度很快,所以不建議大家去看他人的中文教程,今天筆者安裝的是pypi上的最新穩定版本,和網上的大部分中文教程的安裝方法有所出入,所以筆者認為最好的方法就是直接參考官方的安裝指南。
筆者使用ubuntu桌面版系統,安裝指南建議的安裝方式是添加SALTSTACK的軟件源,使用apt進行安裝,可以自動處理依賴,但是筆者無法鏈接到該源,所以采用了最直接的python setup.py install的安裝方法. 根據安裝指南,需要安裝 salt-master, salt-minion, salt-syndic 與ZeroMQ.
安裝:
在Pypi上下載 tarball, 解壓之后創建虛擬環境並且執行安裝腳本,筆者使用的是python 2.7.9, 直接執行一下命令安裝相關依賴和saltstack本身.
python setup.py install
pip install -r _requirements.txt
pip install -r pip install -r zeromq-requirements.txt
在安裝的過程中可能會遇到一個swig的bug:
AttributeError: 'module' object has no attribute 'PKCS5_SALT_LEN'
由於Pyzmq引用了 M2crypto這個包,而這個包需要使用swig,我安裝的swig版本是3.0.5,當你的swig是3.0.5的時候便會報上面的錯誤,詳細的Issue參見這里, 不過這個帖子也是重新編譯了3.0.4版本的swig從而跳過這個錯誤的。
重新編譯swig 3.0.4版本之后,安裝完畢.
配置
在安裝指南中,默認的配置文件位置是
/etc/salt/master
/etc/salt/minion
但是在我安裝完畢 saltstack之后並沒有這2個配置文件,但是使用如下命令
sudo salt-master -d
sudo salt-minion -l debug -d
服務也是可以成功開啟,所以我的安裝是沒有問題的,但是文檔中並沒有說明在通過PIP手動編譯安裝的情況下需要手動復制配置文件,
跳過這個坑的方法就是執行如下命令:
sudo cp ./conf/* /etc/salt/ #如果沒有相關目錄就手動建立目錄
然后編輯
sudo vi /etc/salt/minion
# master: salt
把第16行 master: salt 前的注釋去掉,然后把salt換成master節點的IP地址就可以了,由於筆者使用的是單機,所以把salt換成 0.0.0.0即可.
minion授權
在我們的配置文件修改完畢,服務也正常啟動之后, 還需要給minion服務器做授權,關於權限一節會在后面深入研究,只有經過授權的minion才可以接受master節點的控制,最基本的授權操作也是非常簡單的,畢竟SALTSTACK是以簡單使用而著稱的.
sudo salt-key -L
# 打印出所有授權或未授權的minion節點
sudo salt-key -A
# 授權所有節點
sudo salt-key -a name
# 授權name節點
授權完成之后,我們就可以通過master節點進行進行對minion節點的控制了.
基本的使用方法
和最經常使用的ssh做對比,那就是執行命令的功能了,最簡單的一條命令,參見如下代碼
salt -e 'youngershen.com' cmd.run 'ifconfig'
# 或者
salt '*' cmd.run 'ifconfig'
# 或者
salt 'webserver*' cmd.run 'service apache restart'
salt 'webserver*' cmd.run 'sudo nginx -s reload'
# 對於這類命令,多台服務器切換起來真的是非常方便
關於 服務器通配符和SLS配置文件的編寫,這里先不說,不過我已經覺得SALTSTACK非常了不起了,配置文件管理非常整潔(Yaml),一條命令批量更新,對各種服務的機器篩選有強大的正則支持.即使是對單節點VPS的命令管理來說,不用打密碼的salt確實比ssh方便的多,而且你可能有很多VPS要管理,這樣就不需要來回切換了,而且有通配符支持,所以文章開頭的時候筆者就說即使是管理單節點
VPS,相對於SSH來說SALT還是很有優勢的,不足之處就是配置方面,如果出門在外的話,還是需要SSH密碼直接登陸的.
然后是稍微復雜一點的例子.
更改 master 配置文件
file_roots:
base:
- /srv/salt
注意格式是yaml,小心縮進哦!
然后執行:
sudo pkill salt-master
sudo salt-master -d
增加新的SLS配置文件
# /srv/salt/ 目錄下 top.sls
base:
'*':
- testconfig
#/srv/salt/ 目錄下 testconfig.sls
myconfig:
file.managed:
- name: /etc/config.cnf
- source: salt://config.cnf
xchat:
pkg.installed:
- watch:
-file :myconfig
由於配置文件的信息量略大,所以只按照我的理解來簡單說明,用以增強自己的理解之用, SLS文件全部采用yaml格式,語法是必須小心的,master中的 file_roots 的值,實際上就是salt文件服務器的路徑值,在minion像master請求文件的時候,讀取的就是這個路徑的下的文件,base下的 * ,是說這個testconfig的配置可以用於任何minion節點,通配符就是體現在這里的,可以任意配置,而testconfig.sls文件中,定義了兩個符號,一個是myconfig,一個是xchat,myconfig是一個隨意的配置文件,xchat是一個聊天程序,意思是說當xchat被installed函數檢測為安裝完成狀態的時候,在每次執行命令時就watch myconfig對應的文件,也就是可以達到配置文件更新的效果,見如下命令
sudo salt '*' state.highstate
# 執行完畢之后會發現 /etc目錄下多了一個文件名為 config.cnf的文件,而且更新該文件之后,再
# 執行命令,該文件也會更新
結束語
而關於眾多的function和配置的編寫規則,只能在以后討論了,不過我已經大致了解了如何編寫SLS,配合grains,使salt即能管理配置文件,又可以進行服務器監控,grains的值也可以隨意編寫函數來處理監控信息.
(本文完)
引用資源
中文用戶組知識庫: http://www.saltstack.cn/projects/cssug-kb/wiki/Dive-into-saltstack