第2章 saltstack數據系統
2.1 Grains
2.1.1 什麼是Grains?
Grains是saltstack的一個組件,它存放着minion啓動時收集到的系統底層的詳細信息,每次minion啓動時,就會進行Grains的採集並保存下來,在以後的生命週期裏面,除非你再次重啓minion,否則Grains是不會重新收集的。Grains的信息是靜態信息。
那麼Grains會收集哪些信息呢?最好詳細瞭解它的內容!grains與遠程執行走的更近一些。
Grains are collected for the operating system, domain name, IP address, kernel, OS type, memory, and many other system properties(屬性).
2.1.1.1 Grains的應用場景
r Grains可以在state系統中使用,用於配置管理模塊。
r Grains可以在target中使用,再用來匹配minion,比如匹配操作系統,使用-G選項。
r Grains可以用於信息查詢,Grains保存着收集到的客戶端的詳細信息。
2.1.2 Grains常用操作
2.1.2.1 列出可用的Grains名稱
~ Available grains can be listed by using the 'grains.ls' module
salt 'saltstack-node1*' grains.ls
2.1.2.2 列出Grains詳細數據
~ Grains data can be listed by using the 'grains.items' module(超級詳細)
salt 'saltstack-node1*' grains.items
~ 只顯示item 裏的os值,注意item後面沒有s
salt '*' grains.item os
2.1.2.3 獲取指定的Grains信息
~ fqdn
salt 'saltstack-node1*' grains.get fqdn
~ domain
salt 'saltstack-node1*' grains.get domain
~ ip4_interfaces
salt 'saltstack-node1*' grains.get ip4_interfaces
2.1.3 自定義Grains
有三種方式,建議使用第2種,自定義grains文件,而不是在minion的配置文件中修改。
2.1.3.1 grains in the minion config(不建議)
在minion配置文件中,支持配置grains。比如說,給一臺機器打一個標籤,標籤內容是webserver,這樣以後在做管理時,比如說,重啓所有的webserver服務時,那麼我們就可以使用這個標籤(即grains的值)來獲取。
不建議在這裏配置,因爲會比較混亂,需要在每一個minion端配置,工作量大並且不好統一。
~ 修改minion配置文件
[root@saltstack-node1 ~]# vim /etc/salt/minion#在minion配置文件中定義grains grains: role: webserver env: test # key: value # key是關鍵字,查詢時輸入key,返回的值是value。 # role代表機器扮演的角色是什麼(key),webserver代表是一臺webserver服務器(value) # env代表環境(key),test代表測試環境(value)
~ 驗證命令:驗證時,會有延時,要耐心等待,最好先用test.ping 來測試連通性。
salt 'saltstack-node1*' grains.get role salt 'saltstack-node1*' grains.get env
~ 官網案例
grains: roles:#第1個key - webserver#這樣寫代表列表形式,即這臺機器扮演多個角色(value1) - memcache#這樣寫代表列表形式,即這臺機器扮演多個角色(value2) deployment: datacenter4#第2個key,只有1個value cabinet: 13 cab_u: 14-15
~ 小結
r 會有延時,需要耐心等待與測試。
r 不建議使用這種方式定義grains。
2.1.3.2 grains in /etc/salt/grains(推薦※)
第2種配置方式有個優點,可以把自定義的grains抽取出來,把配置寫好後,再批量分發給不同的minion端,這樣就可以統一自定義的grains,而且配置還特別簡單。
~ 創建並修改grains文件
#注意寫法!test代表測試環境。 [root@saltstack-node1 ~]# vim /etc/salt/grains cloud: openstack roles: - nginx - php env: test #配置完成後,必須要重啓minion服務。
~ 驗證命令
salt 'saltstack-node1*' grains.get cloud salt 'saltstack-node1*' grains.get roles salt 'saltstack-node1*' grains.get env
如果出現下面的報錯,可以先test.ping,看是否有問題。服務端推送的時候,經常會有延時。
2.1.3.3 matching grains in the top file
第3種用法,是在top file裏面編寫。
~ 創建並編寫top file
[root@saltstack-node1 ~]# vim /etc/salt/top.sls base: 'role:nginx' - match: grain - web.nginx # 一定要加上match關鍵字,匹配grain這個詞。
~ 和原來寫好的對比
[root@saltstack-node1 salt]# cat /srv/salt/top.sls base: '*':# 就是在這個地方,有改變,可以用grains來匹配minion端,還行下面一行有改變 - apache
2.1.4 使用Grains來遠程執行
用於信息查詢,或執行命令都可以,在target中匹配minion,必須加 -G 選項。
2.1.4.1 命令
salt -G cloud:openstack cmd.run 'df -h' salt -G env:test cmd.run 'ifconfig eth0|awk NR==2' salt -G roles:php cmd.run 'uname -r' salt -G os:CentOS cmd.run 'whoami'
2.2 Pillar
2.2.1 什麼是Pillar?
Pilla也是saltstack的一個重要組件,在salt0.9.8版本增加了Pilla(動態數據)。
存儲位置:存儲在master端,存放需要提供給minion的信息。
應用場景:用來存儲敏感的信息,每個minion只能訪問master分配給自己的Pilla。
它比較安全,grains比較不安全。
它的好處是,可以指定,只能在master端指定。
Pilla和配置管理,走的更近一些,而grains與遠程執行走的更近一些。
2.2.2 定義Pillar數據
~ Step1:指定pillar的根
[root@saltstack-node1 salt]# vim /etc/salt/master#去掉註釋 pillar_roots: base: - /srv/pillar [root@saltstack-node1 salt]# mkdir -p /srv/pillar#創建pillar的根目錄 [root@saltstack-node1 salt]# cd /srv/pillar [root@saltstack-node1 pillar]# /etc/init.d/salt-master restart#重啓服務
~ Step2:自定義pillar的標籤
[root@saltstack-node1 pillar]# vim zabbix.sls Zabbix_Server: 10.0.0.22 #第1個是key,第2個是value
~ Step3:配置top file
[root@saltstack-node1 pillar]# vim top.sls base: 'saltstack-node2.example.com': - zabbix
~ Step4:刷新
[root@saltstack-node1 pillar]# salt '*' saltutil.refresh_pillar saltstack-node2.example.com: True saltstack-node1.example.com: True
~ 驗證
[root@saltstack-node1 pillar]# salt '*' pillar.item Zabbix_Server saltstack-node1.example.com: ---------- saltstack-node2.example.com: ---------- Zabbix_Server: 10.0.0.22
2.2.3 Pillar常用操作
2.2.3.1 查看系統內置的pillar
salt '*' pillar.items
2.2.3.2 獲取pillar
salt '*' pillar.item Zabbix_Server salt '*' pillar.get Zabbix_Server
2.2.3.3 使用Pillar來遠程執行
salt -I 'Zabbix_Server:10.0.0.22' test.ping salt -I 'Zabbix_Server:10.0.0.22' cmd.run 'getenforce'
2.3 Grains和Pillar區別
名稱,存儲位置,數據類型,數據採集更新方式,應用
grains,minion端,靜態數據,minion啓動時收集,也可以使用saltutil.sync_grains進行刷新。,存儲minion基本數據。比如用於匹配minion,自身數據可以用來做資產管理等。
pillar,master端,動態數據,在master端定義,指定給對應的minion,也可以使用saltutil.sync_pillar刷新。,存儲master指定的數據,只有指定的minion可以看到,用於存儲敏感數據。
2.4 Grains和Pillar命令彙總
命令:含義
salt '*' grains.ls#列出所有可用的grains(key) salt '*' grains.items#列出所有grains的數據(key && value) salt '*' grains.item os#只列出grains的os數據(key && value) salt '*' grains.get os#獲取指定的grains值(value) salt -G cloud:openstack cmd.run 'df -h'#grains配合遠程執行,匹配target #注意:key和value都要寫,但中間沒有空格 , salt '*' pillar.items#查看系統內置的pillar salt '*' pillar.item Zabbix_Server#只查看指定的pillar(key && value) salt '*' pillar.get Zabbix_Server#獲取指定的pillar值(key) salt -I 'Zabbix_Server:10.0.0.22' test.ping#pillar配合遠程執行,匹配target #注意:key和value都要寫,但中間沒有空格