Saltstack數據系統Grains和Pillar(三)
- 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(三)