七天學會 SALT STACK 自動化運維 (1)

七天學會 SALT STACK 自動化運維 (1)

  • 簡單理解 SALTSTACK
  • 安裝與配置
  • 基本的使用方法
  • 結束語
  • 引用資源

簡單理解 SALT STACK

筆者是初次接觸 自動化運維 這一技術領域,也是初次接觸SALT STACK這一自動化運維工具, 因此這裏的 簡單理解 SALTSTACK 之意爲 筆者的簡單理解,能夠看作是做者的學習筆記,文中較多記述筆者在配置安裝過程當中遇到的問題,可能會有紕漏以及錯誤的地方,具體的新手指南,最好是參見這裏.css

SALTSTACK是一款自動化運維軟件,使用python編寫,使用ZEROMQ用做通訊協議,主要功能包括命令批量執行,服務器環境批量配置,配置文件託管,服務器狀態監控,配合強大的 Grains&Pillar 和自定義SLS配置文件,能夠實現複雜功能,筆者會從最簡單的場景開始着手學習而且記錄配置過程, 簡單使用事後,筆者的觀點是,即便只是使用 SALTSTACK 管理單臺vps,也比SSH要好用一些,稍後會說到緣由。同類產品有 PuppetChef,由於沒有使用過因此沒法進行比較.html


安裝與配置

這裏有詳細的安裝指南,由於該產品的更新迭代速度很快,因此不建議你們去看他人的中文教程,今天筆者安裝的是pypi上的最新穩定版本,和網上的大部分中文教程的安裝方法有所出入,因此筆者認爲最好的方法就是直接參考官方的安裝指南。python

筆者使用ubuntu桌面版系統,安裝指南建議的安裝方式是添加SALTSTACK的軟件源,使用apt進行安裝,能夠自動處理依賴,可是筆者沒法連接到該源,因此採用了最直接的python setup.py install的安裝方法. 根據安裝指南,須要安裝 salt-master, salt-minion, salt-syndic 與ZeroMQ.nginx

安裝:

在Pypi上下載 tarball, 解壓以後建立虛擬環境而且執行安裝腳本,筆者使用的是python 2.7.9, 直接執行一下命令安裝相關依賴和saltstack自己.git

python setup.py install
pip install -r _requirements.txt
pip install -r  pip install -r zeromq-requirements.txt

在安裝的過程當中可能會遇到一個swig的bug:github

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從而跳過這個錯誤的。web

從新編譯swig 3.0.4版本以後,安裝完畢.apache

配置

在安裝指南中,默認的配置文件位置是ubuntu

/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

官方文檔: http://docs.saltstack.com/en/latest/

相關文章
相關標籤/搜索