1. 程式人生 > >Saltstack數據系統Grains和Pillar(三)

Saltstack數據系統Grains和Pillar(三)

centos服務器 items har zabb ini highstate fqdn clas deb

  • Saltstack數據系統

分為Grains和Pillar


SaltStack 數據系統

Grains (谷粒)
Pillar (柱子)

一.Grains
Grains:靜態數據 當Minion啟動的時候收集的Minion本地的相關信息
操作系統版本,內核版本,CPU,內存,硬盤。設備型號。序列號
備註:不重啟minion,這些信息數據是不會改變的。例如可以根據系統是centos服務器跟系統是redhat環境的安裝不同的軟件包。

Grains功能:1.收集資產信息 2.信息查詢
官方文檔:https://docs.saltstack.com/en/getstarted/overview.html

1)信息管理,包括資產管理;

salt ‘linux-node1*‘ grains.ls  # 列出ID為linux-node1的主機,grains的所有key
salt ‘linux-node1*‘ grains.items  # 列出主機的詳細信息,可用於資產管理
salt ‘*‘ grains.item os  # 列出所有主機的系統版本
[root@7mini-node1 ~]# salt ‘*‘ grains.item fqdn_ip4   # 列出所有主機的IP地址
7mini-node1:
----------
fqdn_ip4:
- 10.0.0.11
7mini-node2:
----------
fqdn_ip4:
- 10.0.0.12

2)用於目標選擇;(查詢具體id的主機,查詢系統版本為centos的主機 等場景)  

salt -G ‘os:Centos‘ test.ping  # 所有主機系統為centos版本ping測試
salt -G ‘os:Centos‘ cmd.run ‘echo 123‘  # 所有主機系統為centos版本執行命令‘echo 123‘

3)配置管理中使用

方式一: 修改配置文件 vim /etc/salt/minion

重啟 systemctl restart salt-minion

技術分享圖片

通過自定義的item,可以實現重啟所有角色為apache的主機

salt ‘*‘ grains.item roles  # 獲取所有主機的roles
salt -G ‘roles:apache‘ cmd.run ‘systemctl restart httpd‘  # 所有主機roles為apache的執行命令systemctl restart httpd

方式二:(生產環境使用,也是常用的配置)  

修改配置文件 vim /etc/salt/grains,寫法

cloud: openstack

重啟 systemctl restart salt-minion

salt ‘*‘ grains.item cloud  # 獲取所有主機的cloud

修改/etc/salt/grains不重啟服務的方法,刷新命令如下(備註:方式一和方式二修改配置文件,通過此命令都可以不用重啟服務)  

salt ‘*‘ saltutil.sync_grains

  

二.Pillar

Pillar是Salt最重要的系統之一,它跟grains的結構一樣,也是一個字典格式,數據通過key/value的格式進行存儲。在Salt的設計中,Pillar使用獨立的加密sessiion。可用於提供開發接口,用於在master端定義數據,然後再minion中使用,一般傳輸敏感的數據,例如ssh key,加密證書等。

pillar和states建立方式類似,由sls文件組成,有一個入口文件top.sls,通過這個文件關聯其他sls文件,默認路徑在/srv/pillar,可通過/etc/salt/master裏面pillar_roots:指定位置。

pillar到底什麽作用呢?那麽下面介紹一個簡單的例子,你就明白了。

用zabbix監控新上架的服務器(10臺),需要將zabbix_agentd.conf分發到被監控主機,這個文件中hostname的ip每臺都不同,我們不可能寫10分配置文件吧!那麽如何讓hostname在分發的時候就根據被監控主機IP,修改成自己的呢?這時就用到渲染了,默認渲染器是jinja,支持for in循環判斷,格式是{%...%}{% end* %},這樣一來salt會先讓jinja渲染,然後交給yaml處理。

(1)如何定義Pillar數據

  • a.master配置文件中定義pillar:
    默認情況下,master配置文件中的所有數據都添加到Pillar中,且對所有minion可用。如果要禁用這一默認值,可以在master配置文件中添加如下數據,重啟服務後生效:
#默認的pillar的items為空,需要修改/etc/salt/master
[root@linux-node1 ~]# salt ‘*‘ pillar.items
linux-node1.example.com:
    ----------
linux-node2.example.com:
    ----------
[root@linux-node1 ~]# vim /etc/salt/master
#pillar_opts: False   打開該項,修改成True
pillar_opts: True
[root@linux-node1 ~]# systemctl restart salt-master
[root@linux-node1 ~]# salt ‘*‘ pillar.items
  • b.使用SLS文件定義Pillar
    Pillar使用與State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定義的目錄下。示例如下:
[root@linux-node1 ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar/base
  prod:
    - /srv/pillar/prod

#此段代碼定義了base環境下的Pillar文件保存在/srv/pillar/base目錄下。prod環境下的Pillar文件保存在/srv/pillar/prod下。

[root@linux-node1 ~]# mkdir -p /srv/pillar/{base,prod}
[root@linux-node1 ~]# tree /srv/pillar/
/srv/pillar/
├── base
└── prod
[root@linux-node1 ~]# systemctl restart salt-master

#創建base環境下的pillar文件為apache
[root@linux-node1 ~]# vim /srv/pillar/base/apache.sls
{% if grains[‘os‘] == ‘CentOS‘ %}
apache: httpd
{% elif grains[‘os‘] == ‘Debian‘ %}
apache: apache2
{% endif %}

#與State相似,Pillar也有top file,也使用相同的匹配方式將數據應用到minion上。示例如下:
[root@linux-node1 ~]# vim /srv/pillar/base/top.sls 
base:
  ‘*‘:
    - apache
[root@linux-node1 ~]# salt ‘*‘ pillar.items
linux-node1.example.com:
    ----------
    apache:
        httpd
linux-node2.example.com:
    ----------
    apache:
        httpd

#在base環境下,引用pillar
[root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls 
apache-install:
  pkg.installed:
    - name: {{ pillar[‘apache‘] }}

apache-service:
  service.running:
    - name: {{ pillar[‘apache‘] }}
    - enable: True
[root@linux-node1 ~]# salt ‘*‘ state.highstate

總結:
1.pillar和狀態一樣,有pillar_roots,在master中配置
2.到配置的地方/srv/pillar/base下寫一個apache.sls
3.pillar必須在top file指定才能使用,在top.sls中指定所有的minion,都需要執行在base環境下的apache.sls
4.用之前查看是否能獲取到pillar值:salt ‘*‘ pillar.items
5.更改狀態配置,把name改為一個pillar的引用,這是一個jinja的語法

三、Grains VS Pillar

技術分享圖片

  

  

 

Saltstack數據系統Grains和Pillar(三)