歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> SaltStack簡明教程

SaltStack簡明教程

日期:2017/2/27 15:43:14   编辑:Linux教程

SaltStack簡介

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源配置

  1. rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-6.noarch.rpm

安裝、配置管理端(master)

  1. yum -y install salt-master
  2. service salt-master start

注:需要iptables開啟master端4505、4506端口

安裝被管理端(minion)

  1. yum -y install salt-minion
  2. sed -i 's@#manster:.*@manster: master_ipaddress@' /etc/salt/minion #master_ipaddress為管理端IP
  3. echo 10.252.137.141 > /etc/salt/minion_id #個人習慣使用IP,默認主機名
  4. 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發送指令了。

認證命令如下:

  1. [[email protected] ~]# salt-key -L #查看當前證書簽證情況
  2. Accepted Keys:
  3. Unaccepted Keys:
  4. 10.252.137.141
  5. Rejected Keys:
  6. [[email protected] ~]# salt-key -A -y #同意簽證所有沒有接受的簽證情況
  7. The following keys are going to be accepted:
  8. Unaccepted Keys:
  9. 10.252.137.141
  10. Key for minion 10.252.137.141 accepted.
  11. [[email protected] ~]# salt-key -L
  12. Accepted Keys:
  13. 10.252.137.141
  14. Unaccepted Keys:
  15. Rejected Keys:

SaltStack遠程執行

  1. [[email protected] ~]# salt '*' test.ping
  2. 10.252.137.141:
  3. True
  4. [[email protected] ~]# salt '*' cmd.run 'ls -al'
  5. 10.252.137.141:
  6. total 40
  7. drwx------ 4 root root 4096 Sep 7 15:01 .
  8. drwxr-xr-x 22 root root 4096 Sep 3 22:10 ..
  9. -rw------- 1 root root 501 Sep 7 14:49 .bash_history
  10. -rw-r--r-- 1 root root 3106 Feb 20 2014 .bashrc
  11. drwx------ 2 root root 4096 Jan 30 2015 .cache
  12. drwxr-xr-x 2 root root 4096 Apr 22 13:57 .pip
  13. -rw-r--r-- 1 root root 140 Feb 20 2014 .profile
  14. -rw-r--r-- 1 root root 64 Apr 22 13:57 .pydistutils.cfg
  15. -rw------- 1 root root 4256 Sep 7 15:01 .viminfo

salt執行命令的格式如下:

  1. salt '<target>' <function> [arguments]

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

function: 方法,由module提供

arguments:function的參數

target可以是以下內容:

1. 正則表達式

  1. salt -E 'Minion*' test.ping #主機名以Minion開通

2. 列表匹配

  1. salt -L Minion,Minion1 test.ping

3. Grians匹配

  1. 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. 組匹配

  1. salt -N groups test.ping

如,在master新建/etc/salt/master.d/nodegroups.conf ,yaml格式

5. 復合匹配

  1. salt -C 'G@os:CentOS or L@Minion' test.ping

6. Pillar值匹配

  1. salt -I 'key:value' test.ping

/etc/salt/master設置pillar_roots,數據以yaml保存在Master上

7. CIDR匹配

  1. salt -S '10.252.137.0/24' test.ping

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

function是module提供的方法

通過下面命令可以查看所有的function:

  1. salt '10.252.137.141' sys.doc cmd

function可以接受參數:

  1. salt '10.252.137.141' cmd.run 'uname -a'

並且支持關鍵字參數:

  1. #在所有minion上切換到/目錄以salt用戶運行uname -a命令。
  2. 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文件如下:

  1. apache:
  2. pkg:
  3. - installed
  4. service:
  5. - running
  6. - require:
  7. - 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文件和下面文件意思相同。

  1. apache:
  2. pkg.installed
  3. service.running
  4. - require:
  5. - pkg: apache

將上面sls保存為init.sls並放置在sal://apache目錄下,結果如下:

  1. /srv/salt
  2. ├── apache
  3. │ └── init.sls
  4. └── top.sls

top.sls如何定義呢?

master配置文件中定義了三種環境,每種環境都可以定義多個目錄,但是要避免沖突,分別如下:

  1. # file_roots:
  2. # base:
  3. # - /srv/salt/
  4. # dev:
  5. # - /srv/salt/dev/services
  6. # - /srv/salt/dev/states
  7. # prod:
  8. # - /srv/salt/prod/services
  9. # - /srv/salt/prod/states

top.sls可以這樣定義:

  1. base:
  2. '*':
  3. - apache

說明:

第一行,聲明使用base環境

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

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

運行states

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

  1. [[email protected] ~]# salt '*' state.highstate
  2. sk2:
  3. ----------
  4. State: - pkg
  5. Name: httpd
  6. Function: installed
  7. Result: True
  8. Comment: The following packages were installed/updated: httpd.
  9. Changes:
  10. ----------
  11. httpd:
  12. ----------
  13. new:
  14. 2.2.15-29.el6.centos
  15. old:
  16. ----------
  17. State: - service
  18. Name: httpd
  19. Function: running
  20. Result: True
  21. Comment: Service httpd has been enabled, and is running
  22. Changes:
  23. ----------
  24. httpd:
  25. True
  26. Summary
  27. ------------
  28. Succeeded: 2
  29. Failed: 0
  30. ------------
  31. Total: 2

上面命令會觸發所有minion從master下載top.sls文件以及其中定一個的states,然後編譯、執行。執行完之後,minion會將執行結果的摘要信息匯報給master。
原文:https://blog.linuxeye.com/450.html

Copyright © Linux教程網 All Rights Reserved