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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.敏感数据配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值