SaltStack(三)之数据系统Grains、Pillar

本文详细介绍了SaltStack中的Grains和Pillar组件。Grains用于收集和展示salt-minion的静态信息,如CPU、内存、磁盘等,支持自定义并在执行sls时用于目标匹配。Pillar则用于存储敏感数据和动态配置,通过SLS文件定义,支持加密传输,适用于如SSH key、加密证书等敏感信息的管理。

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

Grains的功能使用

(1)Grains查询信息

[root@server1 _grains]# salt '*' grains.items         #查看所有grains的key和values
[root@server1 _grains]# salt '*' grains.get saltversion           #查看salt的版本
server1:
    2019.2.0
server2:
    2019.2.0
[root@server1 _grains]# salt '*' grains.get ip4_interface    #查看ip
[root@server1 _grains]# salt '*' grains.get ip4_interface:eth0

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

#(1)对os系统为centos系统执行一个uptime的命令:
[root@server1 salt]# salt -G 'os:Centos' cmd.run 'uptime'
server1:
     16:17:14 up 14:54,  1 user,  load average: 0.03, 0.08, 0.07
server2:
     16:17:14 up 15:04,  1 user,  load average: 0.00, 0.01, 0.05
#(2)在init为systemd的系统上执行查看负载:
[root@server1 salt]# salt -G 'init:systemd' cmd.run 'uptime'
server1:
     16:17:25 up 14:54,  1 user,  load average: 0.03, 0.08, 0.07
server2:
     16:17:25 up 15:04,  1 user,  load average: 0.00, 0.01, 0.05

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

server1
#生产环境使用自定义一个grains
[root@server1 _grains]# pwd
/srv/salt/_grains

[root@server1 _grains]# vim my_grains.py 
#!/usr/bin/env python
#-*- coding: utf-8 -*-

def my_grains():
    #初始化一个grains字典
    grains = {}
    #设置字典中的key-value
    grains['iaas'] = 'openstack'
    grains['bbb'] = 'lll'
    return grains
[root@server1 _grains]# salt '*' saltutil.sync_grains
server1:
    - grains.my_grains
server2:
    - grains.my_grains
[root@server1 _grains]# salt '*' grains.item iaas
server1:
    ----------
    iaas:
        openstack
server2:
    ----------
    iaas:
        openstack

同步文件目录
[root@server2 salt]# cd /var/cache/salt/minion/
[root@server2 minion]# tree
.
├── accumulator
├── extmods
│   └── grains
│       ├── my_grains.py
│       └── my_grains.pyc
├── files
│   └── base
│       ├── _grains
│       │   └── my_grains.py
│       ├── top.sls
│       └── web
│           └── apache.sls
├── highstate.cache.p
├── module_refresh
├── pkg_refresh
├── proc
└── sls.p

grains优先级:

  • 系统自带
  • grains文件写的
  • minion配置文件
  • 自己写的

2、什么是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处理

Pillar的功能使用

1)如何定义Pillar数据

a.master配置文件中定义pillar:
默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:

[root@server1 ~]# salt '*' pillar.items
server1:
    ----------
server2:
    ----------
[root@server1 ~]# vim /etc/salt/master
#pillar_opts: False   打开该项,修改成True
pillar_opts: True
[root@server1 ~]# systemctl restart salt-master.service 
[root@server1 ~]# salt '*' pillar.items

b.使用SLS文件定义Pillar
Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:

[root@server1 ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar

[root@server1 ~]# mkdir /srv/pillar
[root@server1 ~]# tree /srv/
/srv/
|-- pillar
`-- salt
    |-- _grains
    |   `-- my_grains.py
    |-- top.sls
    `-- web
        `-- apache.sls

#创建web环境下的pillar文件为apache
[root@server1 pillar]# vim /srv/pillar/web/apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

#与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下:
[root@server1 srv]# vim /srv/pillar/top.sls
base:
  'server2':
    - web.apache
[root@server1 srv]# salt '*' pillar.items apache
server1:
    ----------
    apache:
server2:
    ----------
    apache:
[root@server1 srv]# salt '*' saltutil.refresh_pillar
server1:
    True
server2:
    True
[root@server1 srv]# salt '*' pillar.items apache
server1:
    ----------
    apache:
server2:
    ----------
    apache:
        httpd
总结: 
1.pillar和状态一样,有pillar_roots,在master中配置 
2.到配置的地方/srv/pillar/下写一个apache.sls 
3.pillar必须在top file指定才能使用,在top.sls中指定所有的minion,都需要执行在base环境下的apache.sls 
4.用之前查看是否能获取到pillar值:salt ‘*’ pillar.items 
5.更改状态配置,把name改为一个pillar的引用,这是一个jinja的语法

Grains VS Pillar

名称      存储位置    类型        采集方式          场景
Grains    minion    静态    minion启动时,可以刷新    1.获取信息 2.匹配
Pillar    master    动态    指定,实时生效         1.匹配 2.敏感数据配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值