快速入門SaltStack

來源:互聯網
上載者:User

標籤:

導讀 SaltStack是基於Python開發的一套C/S架構組態管理工具(功能不僅僅是組態管理,如使用salt-cloud配置AWS EC2執行個體),它的底層使用ZeroMQ訊息佇列pub/sub方式通訊,使用SSL認證簽發的方式進行認證管理。號稱世界上最快的訊息佇列ZeroMQ使得SaltStack能快速在成千上萬台機器上進行各種操作。

而且採用RSA Key方式確認身份,傳輸採用AES加密,這使得它的安全性得到了保障。SaltStack經常被描述為Func加強版+Puppet精簡版。

為什麼選擇SaltStack?

目前市場上主流的開源自動化組態管理工具有puppet、chef、ansible、saltstack等等。到底選擇那個比較好?可以從以下幾方面考慮:

語言的選擇(puppet/chef vs ansible/saltstack)

Puppet、Chef基於Ruby開發,ansible、saltstack基於python開發的

營運開發語言熱衷於python(後期可做二次開發),排除Puppet、Chef

速度的選擇 (ansible vs saltstack)

ansible基於ssh協議傳輸資料,SaltStack使用訊息佇列zeroMQ傳輸資料。從網上資料來看,SaltStack比ansible快大約40倍。

對比ansible,Saltstack缺點是需要安裝用戶端。為了速度建議選擇SaltStack

SaltStack github地址:https://github.com/saltstack/salt

SaltStack官網文檔地址:https://docs.saltstack.com

SaltStack架構

在SaltsStack架構中服務端叫作Master,用戶端叫作Minion,都是以守護進程的模式運行,一直監聽設定檔中定義的ret_port(saltstack用戶端與服務端通訊的連接埠,負責接收用戶端發送過來的結果,預設4506連接埠)和publish_port(saltstack的訊息發布系統,預設4505連接埠)的連接埠。當Minion運行時會自動連接到設定檔中定義的Master地址ret_port連接埠進行串連認證。

  1. Master:控制中心,salt命令運行和資源狀態管理
  2. Minion : 需要管理的用戶端機器,會主動去串連Mater端,並從Master端得到資源狀態
  3. 資訊,同步資源管理資訊
  4. States:組態管理的指令集
  5. Modules:在命令列中和設定檔中使用的指令模組,可以在命令列中運行
  6. Grains:minion端的變數,靜態
  7. Pillar:minion端的變數,動態比較私密的變數,可以通過設定檔實現同步minions定義
  8. highstate:為minion端下發永久添加狀態,從sls設定檔讀取.即同步狀態配置
  9. 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-masterservice salt-master start

註:需要iptables開啟master端4505、4506連接埠

安裝被管理端
yum -y install salt-minionsed -i ‘[email protected]#manster:.*@manster: [email protected]‘ /etc/salt/minion  #master_ipaddress為管理端IPecho 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發送給master。master在接收到minion的public key後,通過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,然後master就能對minion發送指令了。
認證命令如下:

[[email protected] ~]# salt-key -L    #查看當前認證簽證情況Accepted Keys:Unaccepted Keys:10.252.137.141Rejected Keys:[[email protected] ~]# salt-key -A -y   #同意簽證所有沒有接受的簽證情況The following keys are going to be accepted:Unaccepted Keys:10.252.137.141Key for minion 10.252.137.141 accepted.[[email protected] ~]# salt-key -LAccepted Keys:10.252.137.141Unaccepted Keys:Rejected Keys:
SaltStack遠程執行
[[email protected] ~]# salt ‘*‘ test.ping10.252.137.141:True[[email protected] ~]# salt ‘*‘ cmd.run ‘ls -al‘10.252.137.141:total 40drwx------  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 .bashrcdrwx------  2 root root 4096 Jan 30  2015 .cachedrwxr-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執行命令的格式如下:

salt ‘‘  [arguments]

target:執行salt命令的目標,可以使用Regex

function:方法,由module提供

arguments:function的參數

target可以是以下內容:

1. Regex

salt -E ‘Minion*‘ test.ping  #主機名稱以Minion開通

2. 列表匹配

salt -L Minion,Minion1 test.ping

3. Grians匹配

salt -G ‘os:CentOS‘ test.ping

os:CentOS(預設存在)是Grains的索引值對,資料以yaml儲存在minion上,可在minion端直接編輯/etc/salt/grains,yaml格式。或者在master端執行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 ‘[email protected]:CentOS or [email protected]‘ test.ping

6. Pillar值匹配

salt -I ‘key:value‘ test.ping

/etc/salt/master設定pillar_roots,資料以yaml儲存在Master上

7. CIDR匹配

salt -S ‘10.252.137.0/24‘ test.ping

10.252.137.0/24是一個指定的CIDR網段

function是module提供的方法

通過下面命令可以查看所有的function:
salt ‘10.252.137.141‘ sys.doc cmd

function可以接受參數:

salt ‘10.252.137.141‘ cmd.run ‘uname -a‘

並且支援關鍵字參數:

在所有minion上切換到/目錄以salt使用者運行uname -a命令。salt ‘10.252.137.141‘ cmd.run ‘uname -a‘ cwd=/ user=salt
SaltStack組態管理states檔案

salt states的核心是sls檔案,該檔案使用YAML文法定義了一些k/v的資料。

sls檔案存放根路徑在master設定檔中定義,預設為/srv/salt,該目錄在作業系統上不存在,需要手動建立。

在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資料確保叫做"apache"的軟體包(package)已經安裝,並且"apache"服務(service)正在運行中。

  • 第一行,被稱為ID說明(ID Declaration)。ID說明表明可以操控的名字。
  • 第二行和第四行是State說明(State Declaration),它們分別使用了pkg和service states。pkg state通過系統的包管理其管理關鍵包,service state管理系統服務(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設定檔中定義了三種環境,每種環境都可以定義多個目錄,但是要避免衝突,分別如下:

# 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環境

第二行,定義target,這裡是匹配所有

第三行,聲明使用哪些states目錄,salt會尋找每個目錄下的init.sls檔案。

運行states

一旦建立完states並修改完top.sls之後,你可以在master上執行下面命令:

[[email protected] ~]# salt ‘*‘ state.highstatesk2:----------State: - pkgName:      httpdFunction:  installedResult:    TrueComment:   The following packages were installed/updated: httpd.Changes:----------httpd:----------new:2.2.15-29.el6.centosold:----------State: - serviceName:      httpdFunction:  runningResult:    TrueComment:   Service httpd has been enabled, and is runningChanges:----------httpd:TrueSummary------------Succeeded: 2Failed:    0------------Total:     2

上面命令會觸發所有minion從master下載top.sls檔案以及其中定一個的states,然後編譯、執行。執行完之後,minion會將執行結果的摘要資訊彙報給master。

快速入門SaltStack

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.