Saltstack数据系统Grains和Pillar
Posted jimmy_xuli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 # 列出所有主机的系统版本 [[email protected] ~]# 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 [[email protected] ~]# salt ‘*‘ pillar.items linux-node1.example.com: ---------- linux-node2.example.com: ---------- [[email protected] ~]# vim /etc/salt/master #pillar_opts: False 打开该项,修改成True pillar_opts: True [[email protected] ~]# systemctl restart salt-master [[email protected] ~]# salt ‘*‘ pillar.items
- b.使用SLS文件定义Pillar
Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:
[[email protected] ~]# vim /etc/salt/master pillar_roots: base: - /srv/pillar/base prod: - /srv/pillar/prod #此段代码定义了base环境下的Pillar文件保存在/srv/pillar/base目录下。prod环境下的Pillar文件保存在/srv/pillar/prod下。 [[email protected] ~]# mkdir -p /srv/pillar/{base,prod} [[email protected] ~]# tree /srv/pillar/ /srv/pillar/ ├── base └── prod [[email protected] ~]# systemctl restart salt-master #创建base环境下的pillar文件为apache [[email protected] ~]# vim /srv/pillar/base/apache.sls {% if grains[‘os‘] == ‘CentOS‘ %} apache: httpd {% elif grains[‘os‘] == ‘Debian‘ %} apache: apache2 {% endif %} #与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下: [[email protected] ~]# vim /srv/pillar/base/top.sls base: ‘*‘: - apache [[email protected] ~]# salt ‘*‘ pillar.items linux-node1.example.com: ---------- apache: httpd linux-node2.example.com: ---------- apache: httpd #在base环境下,引用pillar [[email protected] ~]# vim /srv/salt/base/web/apache.sls apache-install: pkg.installed: - name: {{ pillar[‘apache‘] }} apache-service: service.running: - name: {{ pillar[‘apache‘] }} - enable: True [[email protected] ~]# 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的主要内容,如果未能解决你的问题,请参考以下文章
Saltstack handbook:Grains and Pillar