天天看點

56. Python saltstack 二次開發(1)

Saltstack簡介

Salt 是:

一個配置管理系統,能夠維護預定義狀态的遠端節點(比如,確定指定的報被安裝,指定的服務在運作);

一個分布式遠端執行系統,用來在遠端節點(可以是單個節點,也可以是任意規則挑選出來的節點)上執行指令和查詢資料;

開發其的目的是為遠端執行提供最好的解決方案,并使遠端執行變得更好,更快,更簡單。

Saltstack(中國使用者組 www.saltstack.cn )基于python開發,c/s架構,支援多平台,比puppet輕量,在遠端執行指令時非常快捷,配置和使用比puppet容易,能實作puppet幾乎所有的功能。

Saltstack的優勢:

有master端和minion端,執行的資訊比較穩定,不容易丢失資訊,或者出現失聯主機的情況

有封裝好的http-api,我們可以直接啟動salt-api就可以通過http協定進行調用。不需要自己進行第二次的封裝

基于centos6和centos7的差異,在兩個不同的作業系統中安裝saltstack也是不一樣的。

參考網址:

https://docs.saltstack.com/en/latest/topics/installation/rhel.html

Centos6需要先安裝擴充源,然後在進行安裝:

Master端

yum install –y salt-master
yum install –y salt-api      

Minion端:

yum install  -y salt-minion      

Saltstack的秘鑰安裝

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發送指令了。

salt-key -L 或者salt-key 		#顯示所有的key
salt-key -D 				#删除所有認證主機id證書
salt-key -d keys_values -y
salt-key -A				#接收所有id證書請求
salt-key -a id 				#接受單個id證書請求      

1.-E, --pcre,通過正規表達式進行比對:

salt -E 'web(9|10)*' test.ping -t 1

2. -L, --list, 主機id進行過濾:

salt -L "*app*" cmd.run "df -h"

3. -G, --grain, 根據被控主機的grains資訊進行過濾

salt -G 'role:nginx' cmd.run "ls /export"

4. -I, --pillar, 根據被控主機的pillar資訊進行過濾

salt -I 'myname:xiang' test.ping -t 5

5. -S, --ipcidr, 根據minion的ip位址進行比對

salt -S 192.168.1.1 test.ping

salt -S 192.168.1.0/24 test.ping

salt -S 192.168.0.0/16 test.ping

salt -S 192.0.0.0/8 test.ping

6.檢查用戶端是否挂掉:

salt-run manage.status |head

salt-run manage.down

Saltstack配置檔案詳解

Saltstack占用兩個端口4505和4506

1. 確定master端的4505和4506端口開通

2. Minion的key确實别master接受

3. 通過test.ping 子產品,雙方都可以ping通

配置檔案詳解:

http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&sub=wcp1478526434731795

Saltstack的幾種子產品介紹

在二次開發中開發的子產品有2個,如下(Runner、Module):

Runner 子產品     在master端執行的  salt-run

Module 子產品    通過master同步到minion端, 在minion執行

salt-call saltutil.sync_modules
salt-call saltutil.sync_all      

包括:

beacons:

clouds: engines: grains: log_handlers: modules:

output: proxymodules: renderers: returners: sdb:

states: utils:

Grins 子產品 記錄minion的屬性key:value

Pillar子產品 記錄所有minion通用的屬性,然後同步到minion端

salt-call saltutil.refresh_pillar
salt ‘*’ saltutil.refresh_pillar      

1. cmd子產品

salt  ‘*’ cmd.run “df -h”      

2. ping子產品

salt ‘*’ test.ping -t 5		#-t 逾時時間,秒      

3. cp 子產品

file_roots:
base:
- /export/salt/root      

salt根目錄:

    在master中file_roots定義的路徑

    salt://test.txt 相當于 /export/salt/root/test.txt

用法:

salt  '172.17.23.11'  cp.get_file  salt://nscd.conf   /tmp/xiang.txt	(拷貝檔案)      

4. cron子產品:

salt '*' cron.raw_cron root     (檢視定時任務)
salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh (設定定時任務)
salt '*' cron.rm_job root /export/scripts/rm_log.sh   (删除定時任務,寫全沒效果)      

5.dnsutil子產品

salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com
salt '*' dnsutil.hosts_remove /etc/hosts xiang.com      

6.file子產品:

salt '*' file.chown /etc/passwd root root
salt '*' file.copy /path/to/src /path/to/dst
salt '*' file.file_exists /etc/hosts
salt '*' file.directory_exists /etc/
salt '*' file.get_mod /etc/passwd
salt '*' file.set_mod /etc/passwd 0644
salt '*' file.mkdir /tmp/test
salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'
salt '*' file.append /tmp/test.txt "welcome xiang"
salt '*' file.remove /tmp/1.txt      

7.network子產品:

salt '*' network.dig www.qq.com
salt '*' network.ping www.qq.com
salt '*' network.ip_addrs      

8.pkg包管理子產品:

管理yum, apt-get等

salt '*' pkg.install php(安裝應用)
salt '*' pkg.remove php(移除應用)
salt '*' pkg.upgrade    (更新所有的軟體包)      

9.service子產品(centos6)

salt '*' service.enable nginx
salt '*' service.disable nginx
salt '*' service.restart nginx      

Grains

自定義grians(是在minion上定義的)

記錄的是用戶端上的

grains是在minion啟動時搜集一些資訊,如作業系統類型,網卡,核心版本,cpu架構等

salt "*" grains.ls    				列出所有grains項目名字
salt "*app.*" grains.items  		列出所有grains項目以及值
salt "*" grans.item serialnumber	檢視伺服器的sn碼
(其他以此類推)      

grains的資訊并不是動态的,并不會實時變化,它隻是在minion啟動時收集到的

我們可以根據grains收集到的一些資訊,做一些配置管理工作

在minion上:

vim /etc/salt/grains
role: nginx
env: test      

重新開機

service salt-minion restart      

擷取grians:

salt "*" grains.item role env      

或者:

salt -G "*" role:nginx cmd.run "hostname“
salt ‘*’grains.items      

(雖然也挺好用,但是很少用,要用也是用pillar)

Pillar

(記錄的是服務端上的資訊)

pillar(在master上定義)

(yaml文法)

在配置檔案中找pillar的檔案路勁:建立目錄

mkdir  /export/salt/pillar      

在目錄内定義檔案:

vim top.sls
base:
"*":
- test      
vim test.sls
conf: xiang      

然後

重新整理pillar:

salt '*' saltutil.refresh_pillar      
salt '*' pillar.items conf      
salt -I  'conf:xiang' test.ping