saltstack數據系統Grains和Pillar

一.Grains簡介

grains是Saltstack最重要的組件之一,grains的作用是收集被控主機的基本信息,這些信息通常都是一些靜態的數據,包括CPU、內核、操作系統、虛擬化等,在服務器端可以根據這些信息進行靈活定製,管理員可以利用這新信息對不同業務進行個性化配置。

grains是SaltStack當中的一個數據系統,當Minion啓動時Grains會把Minion的數據收集起來,比如操作系統版本、CPU 位數等。由於採用的是靜態收集,只有當Minion發生重啓時數據纔會發生變化,在Grains的實際運用中常用於對多臺Minion做操作時進行一些條件匹配,比如有上百臺Minion服務器,只需要對操作系統爲CentOS的做一些操作等

二.Grains模塊的應用

1.羅列出所有Minion的所有信息

[root@server1 salt]# salt '*' grains.items

在這裏插入圖片描述
通過grains來做信息過濾,使用-G選項:

[root@server1 salt]# salt -G 'cpuarch:x86_64' cmd.run 'uptime'      在所有64位CPU服務器上執行uptime 

在這裏插入圖片描述

[root@server1 nginx]# salt server2 grains.item
[root@server1 nginx]# salt server2 grains.item os
[root@server1 nginx]# salt server2 grains.item fqdn
[root@server1 nginx]# salt server2 grains.item nodename

在這裏插入圖片描述

2.當grains.items裏的模塊不滿足當前情況,還可以自定義Grains,比如在server2(minion)添加一個apache模塊

[root@server2 ~]# vim /etc/salt/minion
[root@server2 ~]# systemctl restart salt-minion

在這裏插入圖片描述

[root@server1 nginx]# salt server2 grains.item roles
server2:
    ----------
    roles:
        - apache
[root@server1 salt]# salt -G 'roles:apache' test.ping
server2:
    True

在這裏插入圖片描述
3.如果不想在minion上的/etc/salt/minion添加模塊,那麼也可以在master上創建/etc/salt/_grains目錄並且編輯文件添加模塊

[root@server1 salt]# mkdir /etc/salt/_grains
[root@server1 salt]# ls
apache  _grains  nginx  pkgs  top.sls
[root@server1 salt]# cd _grains/
[root@server1 _grains]# ls
my_grains.py
[root@server1 _grains]# cat my_grains.py 
def my_grains():
     grains = {}
     grains['hello'] = 'world'
     grains['salt'] = 'stack'
     return grains
[root@server1 _grains]# salt '*' saltutil.sync_grains       ##刷新

在這裏插入圖片描述

在這裏插入圖片描述

4.測試:在/srv/salt裏面有top.sls文件在裏面可以使用grains匹配的模塊對已經添加的minion服務器進行相應的服務推送

[root@server1 salt]# ls
apache  _grains  nginx  pkgs  top.sls
[root@server1 salt]# vim top.sls 
[root@server1 salt]# cat top.sls 
base:
  'roles:apache':
    - match: grain
    - apache.install
  'roles:nginx':
    - match: grain
    - nginx.service
[root@server1 salt]# salt '*' state.highstate

在這裏插入圖片描述

三.pillar的應用

pillar簡介:

  • Pillar是Salt非常重要的一個組件,它用於給特定的minion定義任何你需要的數據,這些數據可以被Salt的其他組件使用。

  • 給minion指定它想要的數據,給哪個minion指定,哪個minion能看到,,其他minion看不到,安全性得到了保障,在master端設置的

[root@server1 salt]# vim /etc/salt/master		##打開pillar模塊
828 pillar_roots:
829   base:
830     - /srv/pillar
 
[root@server1 salt]# systemctl restart salt-master
[root@server1 salt]# cd /srv/pillar/
[root@server1 pillar]# ls
top.sls  web
[root@server1 pillar]# cat top.sls 
base:
  '*':
    - web.vars
[root@server1 pillar]# cat web/vars.sls 
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 pillar]# salt '*' saltutil.refresh_pillar
server3:
    True
server2:
    True

[root@server1 pillar]# salt '*' pillar.items
server3:
    ----------
    webserver:
        nginx
server2:
    ----------
    webserver:
        httpd

四.grains和Pillar的區別

1.存儲位置

grains:minion端
pillar:master端

2.數據類型

grains:靜態數據
pillar:動態數據

3.數據採集更新方式

grains:minion啓動時收集,也可以使用saltutil.sync_grains進行刷新

pillar:在master端定義,指定給對應minion,
可以使用saltutil.sync_pillar刷新。

4.應用

grains:存儲minion基本數據。比如用於匹配minion,自身數據可以用來做資產管理等。
pillar:存儲master指定的數據,只有指定的minion可以看到,用於敏感。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章