快速入門SaltStack

 SaltStack是基於Python開發的一套C/S架構配置管理工具(功能不單單是配置管理,如使用salt-cloud配置AWS EC2實例),它的底層使用ZeroMQ消息隊列pub/sub方式通訊,使用SSL證書籤發的方式進行認證管理。號稱世界上最快的消息隊列ZeroMQ使得SaltStack能快速在成千上萬臺機器上進行各類操做。html

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

爲何選擇SaltStack?

目前市場上主流的開源自動化配置管理工具備puppet、chef、ansible、saltstack等等。到底選擇那個比較好?能夠從如下幾方面考慮:python

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

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

運維開發語言熱衷於python(後期可作二次開發),排除Puppet、Chefgit

速度的選擇 (ansible vs saltstack)

ansible基於ssh協議傳輸數據,SaltStack使用消息隊列zeroMQ傳輸數據。從網上數據來看,SaltStack比ansible快大約40倍。github

對比ansible,Saltstack缺點是須要安裝客戶端。爲了速度建議選擇SaltStack正則表達式

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

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

SaltStack架構

在SaltsStack架構中服務端叫做Master,客戶端叫做Minion,都是以守護進程的模式運行,一直監聽配置文件中定義的ret_port(saltstack客戶端與服務端通訊的端口,負責接收客戶端發送過來的結果,默認4506端口)和publish_port(saltstack的消息發佈系統,默認4505端口)的端口。當Minion運行時會自動鏈接到配置文件中定義的Master地址ret_port端口進行鏈接認證。vim

  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-master
service salt-master start

注:須要iptables開啓master端450五、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發送給master。master在接收到minion的public key後,經過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,而後master就能對minion發送指令了。
認證命令以下:

[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遠程執行
[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執行命令的格式以下:

salt ''  [arguments]

target:執行salt命令的目標,能夠使用正則表達式

function:方法,由module提供

arguments:function的參數

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的鍵值對,數據以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 'G@os:CentOS or L@Minion' 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上執行下面命令:

[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

上面命令會觸發全部minion從master下載top.sls文件以及其中定一個的states,而後編譯、執行。執行完以後,minion會將執行結果的摘要信息彙報給master。

 

本文轉載地址:https://www.linuxprobe.com/saltstack-quick.html

相關文章
相關標籤/搜索