saltstack第二波《數據系統》

第2章 saltstack數據系統

2.1 Grains

2.1.1 什麼是Grains?

Grainssaltstack一個組件,它存放着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的應用場景

Grains以在state系統中使用,用配置管理模塊。

Grains以在target使用,再用來匹配minion比如匹配操作系統,使用-G選項

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

小結

會有延時,需要耐心等待與測試

使用這種方式定義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,必須 -選項

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 GrainsPillar命令彙總

命令含義

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都要寫,但中間沒有空格


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章