004-SaltStack入门篇之数据系统Grains、Pillar
1、什么是Grains?
Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。可以理解为Grains记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。我们可以通过grains.items来查看某台Minion的所有Grains信息。
Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。
Grains功能:1.收集资产信息 2.信息查询
官方文档:https://docs.saltstack.com/en/getstarted/overview.html
2、Grains的功能使用
(1)Grains查询信息

- [root@linux-node1 ~]# salt '*' grains.items #查看所有grains的key和values
- [root@linux-node1 ~]# salt '*' grains.get saltversion #查看salt的版本
- linux-node2.example.com:
- 2016.11.8
- linux-node1.example.com:
- 2016.11.8
- [root@linux-node1 ~]# salt '*' grains.get ip4_interface #查看ip
- [root@linux-node1 ~]# salt '*' grains.get ip4_interface:eth0

(2)Grains目标匹配
grains可以用于进行目标匹配,比如让所有的centos系统进行某个操作。使用salt -G

- #(1)对os系统为centos系统执行一个uptime的命令:
- [root@linux-node1 ~]# salt -G 'os:Centos' cmd.run 'uptime' #查看负载
- linux-node2.example.com:
- 14:17:06 up 13 days, 8:51, 2 users, load average: 0.00, 0.01, 0.05
- linux-node1.example.com:
- 14:17:06 up 22 days, 8:23, 2 users, load average: 0.01, 0.02, 0.05
- #(2)在init为systemd的系统上执行查看负载:
- [root@linux-node1 ~]# salt -G 'init:systemd' cmd.run 'uptime'
- linux-node1.example.com:
- 14:21:00 up 22 days, 8:27, 2 users, load average: 0.00, 0.01, 0.05
- linux-node2.example.com:
- 14:21:00 up 13 days, 8:55, 2 users, load average: 0.00, 0.01, 0.05

(3)Grains在top file中进行匹配

- #在top.sls中定义对系统是CentOS的服务执行web.apached定义的状态信息
- [root@linux-node1 ~]# vim /srv/salt/base/top.sls
- base:
- 'os:CentOS':
- - match: grain
- - web.apache
- [root@linux-node1 ~]# salt '*' state.highstate
- linux-node2.example.com:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd
- Result: True
- Comment: All specified packages are already installed
- Started: 14:28:57.612549
- Duration: 2490.712 ms
- Changes:
- ----------
- ID: apache-service
- Function: service.running
- Name: httpd
- Result: True
- Comment: The service httpd is already running
- Started: 14:29:00.104396
- Duration: 41.901 ms
- Changes:
- Summary for linux-node2.example.com
- ------------
- Succeeded: 2
- Failed: 0
- ------------
- Total states run: 2
- Total run time: 2.533 s
- linux-node1.example.com:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd
- Result: True
- Comment: All specified packages are already installed
- Started: 14:29:12.061257
- Duration: 11458.788 ms
- Changes:
- ----------
- ID: apache-service
- Function: service.running
- Name: httpd
- Result: True
- Comment: The service httpd is already running
- Started: 14:29:23.520720
- Duration: 46.868 ms
- Changes:
- Summary for linux-node1.example.com

(4)Grains自定义
Grains的四种存在形式:
①Core grains.
②在 /etc/salt/grains 自定义grains。
③在 /etc/salt/minion 自定义grains。
④在 _grains 目录自定义grain,同步到minions。

- #生产环境使用自定义一个grains
- [root@linux-node1 ~]# vim /etc/salt/grains
- test-grains: linux-node2 #冒号后面有空格
- [root@linux-node1 ~]# systemctl restart salt-minion
- [root@linux-node1 ~]# salt '*' grains.get test-grains
- linux-node1.example.com:
- linux-node2
- linux-node2.example.com:
- [root@linux-node1 ~]# vim /etc/salt/grains
- test-grains: linux-node2
- hehe: haha
- [root@linux-node1 ~]# salt '*' saltutil.sync_grains
- [root@linux-node1 ~]# salt '*' grains.get hehe
- linux-node1.example.com:
- haha
- linux-node2.example.com:

3、什么是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处理。
4、Pillar的功能使用
(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
- linux-node2.example.com:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd
- Result: True
- Comment: All specified packages are already installed
- Started: 15:15:13.424547
- Duration: 940.333 ms
- Changes:
- ----------
- ID: apache-service
- Function: service.running
- Name: httpd
- Result: True
- Comment: The service httpd is already running
- Started: 15:15:14.366780
- Duration: 55.706 ms
- Changes:
- Summary for linux-node2.example.com
- ------------
- Succeeded: 2
- Failed: 0
- ------------
- Total states run: 2
- Total run time: 996.039 ms
- linux-node1.example.com:
- ----------
- ID: apache-install
- Function: pkg.installed
- Name: httpd
- Result: True
- Comment: All specified packages are already installed
- Started: 15:15:14.648492
- Duration: 8242.769 ms
- Changes:
- ----------
- ID: apache-service
- Function: service.running
- Name: httpd
- Result: True
- Comment: The service httpd is already running
- Started: 15:15:22.891907
- Duration: 42.651 ms
- Changes:
- Summary for linux-node1.example.com
- ------------
- Succeeded: 2
- Failed: 0
- ------------
- Total states run: 2
- Total run time: 8.285 s

总结:
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的语法
5、Grains VS Pillar
- 名称 存储位置 类型 采集方式 场景
- Grains minion 静态 minion启动时,可以刷新 1.获取信息 2.匹配
- Pillar master 动态 指定,实时生效 1.匹配 2.敏感数据配置
6.微服务 配置中心需学习:微服务框架:Spring的Cloud config 开源的和阿里的Diamond等,jsf京东的
配置中心:
zookeeper
extcd
pillar
004-SaltStack入门篇之数据系统Grains、Pillar的更多相关文章
- SaltStack入门篇(三)之数据系统Grains、Pillar
1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...
- SaltStack 数据系统 Grains Pillar
grains 先来一个很好用的命令 # salt '*' grains.items \\基本上输出了所有你想要的信息 192.168.100.138: ---------- SSDs: biosrel ...
- SaltStack入门篇(四)之深入理解SaltStack远程执行
1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...
- SaltStack入门篇(七)之架构部署实战
模块:https://docs.saltstack.com/en/2016.11/ref/states/all/index.html 实战架构图: 实验环境设置: 主机名 IP地址 角色 linux- ...
- SaltStack入门篇(六)之部署Redis主从实现和Job管理
一.部署Redis主从 需求: 192.168.56.11是主,192.168.56.12是从 redis监听自己的ip地址,而不是0.0.0.0 分析: linux-node1 安装 配置 启动 l ...
- SaltStack入门篇(五)之salt-ssh的使用以及LAMP状态设计部署
1.salt-ssh的使用 官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html ()安装salt-ssh [root@li ...
- SaltStack入门篇(二)之远程执行和配置管理
1.远程执行 第一条命令: [root@linux-node1 master]# salt '*' test.ping linux-node2.example.com: True linux-node ...
- SaltStack入门篇(一)之SaltStack部署
一.SaltStack概述 Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, ...
- 2. SaltStack数据系统: Grains、Pillar
1. SaltStack数据系统 Grains (谷物) Pillar (支柱) 2.Grains Grains存放着Salt命令启动时收集的信息,运行时不收集 2.1 信息查询 收集资产 网卡,i ...
随机推荐
- TODO C++ 高级篇
http://c.biancheng.net/view/439.html
- Serializable 和 Parcelable 的区别?
1.在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类.2.Serializable 在序列化的时候会产生大量的临时变量,从而引起频 ...
- Jmeter(六)事务
事务是性能测试之必不可少的关注点, Jmeter默认把每一个请求都统计成了一个事务, 但有时候我们根据业务需求, 会把多个操作统计成一个事务, Jmeter当然也考虑到了这个需求, 因此我们可以通过逻 ...
- OpenStack 启动虚拟机 Booting from Hard Disk
问题 OpenStack 启动虚拟机 Booting from Hard Disk-GRUB 环境 OpenStack RUNNING IN vSphere 6.0.0 VM 开启了 CPU 虚拟化支 ...
- HttpRunnerManager(二)--使用
参考资料:https://sutune.me/2018/08/05/httprunner/
- LoadRunner 技巧之 自动关联
LoadRunner 技巧之 自动关联 这一节讲loadunner 关联的问题,其实这个东西理解起来简单,但说起来比较麻烦. 关联的原理: ...
- Delphi DBGridEh导出Excel
unit Unit_DBGridEhToExcel; interface uses SysUtils, Variants, Classes, Graphics, Controls, Forms, Ex ...
- Google Home Mini配置失败解决办法
Google Home Mini配置到最后一步时失败: There was a problem setting up Google Home Mini For help resolving this ...
- unity快捷放置物体操作
https://connect.unity.com/p/zui-jia-shi-jian-dui-xiang-fang-zhi-he-wu-li-xiao-guo 最佳实践系列文章将探讨我们在与客户合 ...
- ElasticSearch 7.3.0 查询、修改、删除 文档操作
PUT chuyuan/_doc/ { "name":"xiaolin", , "sex":"F", "lov ...