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.
linux-node1.example.com:
2016.11.
[root@linux-node1 ~]# salt '*' grains.get ip4_interface #查看ip
[root@linux-node1 ~]# salt '*' grains.get ip4_interface:eth0

(2)Grains目标匹配

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

#()对os系统为centos系统执行一个uptime的命令:
[root@linux-node1 ~]# salt -G 'os:Centos' cmd.run 'uptime' #查看负载
linux-node2.example.com:
:: up days, :, users, load average: 0.00, 0.01, 0.05
linux-node1.example.com:
:: up days, :, users, load average: 0.01, 0.02, 0.05 #()在init为systemd的系统上执行查看负载:
[root@linux-node1 ~]# salt -G 'init:systemd' cmd.run 'uptime'
linux-node1.example.com:
:: up days, :, users, load average: 0.00, 0.01, 0.05
linux-node2.example.com:
:: up days, :, 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: ::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: ::00.104396
Duration: 41.901 ms
Changes: Summary for linux-node2.example.com
------------
Succeeded:
Failed:
------------
Total states run:
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: ::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: ::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: ::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: ::14.366780
Duration: 55.706 ms
Changes: Summary for linux-node2.example.com
------------
Succeeded:
Failed:
------------
Total states run:
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: ::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: ::22.891907
Duration: 42.651 ms
Changes: Summary for linux-node1.example.com
------------
Succeeded:
Failed:
------------
Total states run:
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启动时,可以刷新 .获取信息 .匹配
Pillar master 动态 指定,实时生效      .匹配 .敏感数据配置

SaltStack入门篇(三)之数据系统Grains、Pillar的更多相关文章

  1. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  2. SaltStack 数据系统 Grains Pillar

    grains 先来一个很好用的命令 # salt '*' grains.items \\基本上输出了所有你想要的信息 192.168.100.138: ---------- SSDs: biosrel ...

  3. SaltStack入门篇(四)之深入理解SaltStack远程执行

    1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...

  4. SaltStack入门篇(七)之架构部署实战

    模块:https://docs.saltstack.com/en/2016.11/ref/states/all/index.html 实战架构图: 实验环境设置: 主机名 IP地址 角色 linux- ...

  5. SaltStack入门篇(六)之部署Redis主从实现和Job管理

    一.部署Redis主从 需求: 192.168.56.11是主,192.168.56.12是从 redis监听自己的ip地址,而不是0.0.0.0 分析: linux-node1 安装 配置 启动 l ...

  6. SaltStack入门篇(一)之SaltStack部署

    一.SaltStack概述 Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, ...

  7. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]

    三.使用Azure AD管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信息 ...

  8. SaltStack入门篇(五)之salt-ssh的使用以及LAMP状态设计部署

    1.salt-ssh的使用 官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html ()安装salt-ssh [root@li ...

  9. SaltStack入门篇(二)之远程执行和配置管理

    1.远程执行 第一条命令: [root@linux-node1 master]# salt '*' test.ping linux-node2.example.com: True linux-node ...

随机推荐

  1. 使用highmaps制作中国地图

    Highmaps 所需文件 http://code.highcharts.com/maps/highmaps.js(地图渲染的核心文件 必须引用)http://code.highcharts.com/ ...

  2. vue2.* 绑定属性 绑定Class 绑定style 03

    <template> <div id="app"> <!-- 绑定属性 --> <div v-bind:title="title ...

  3. [转]TortoiseSVN客户端的安装

    TortoiseSVN是windows平台下Subversion的免费开源客户端. 一般我们都是先讲讲服务器的配置,然后再讲客户端的使用,但是在TortoiseSVN上,却可以反过来.因为,如果你的要 ...

  4. iostat查看系统的IO负载情况

    1.安装iostat工具: [root@localhost ~]# yum -y install sysstat 2.通过命令查看IO情况: %idle如果小于%70的话,说明磁盘的IO负载压力已经很 ...

  5. 基于.net core 微服务的另类实现

    基于.net core 的微服务,网上很多介绍都是千篇一律基于类似webapi,通过http请求形式进行访问,但这并不符合大家使用习惯.如何像形如[ GetService<IOrderServi ...

  6. CABasicAnimation使用总结

    CABasicAnimation使用总结 实例化 使用方法animationWithKeyPath:对 CABasicAnimation进行实例化,并指定Layer的属性作为关键路径进行注册. //围 ...

  7. [JLOI2014]松鼠的新家(线段树,树链剖分)

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...

  8. C++的前置++、后置++和前置--、后置--

    一.C++的前置++和后置++ 在C++中,运算符重载是你必须要掌握的重点,而前置++和后置++有什么区别呢?其实前置++和后置++是有关于 影响效率的问题,前置++比后置++的效率要高,原因是因为前 ...

  9. Linux基础练习题之(四)

    Linux基础练习题 请详细总结vim编辑器的使用并完成以下练习题 1.复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的 ...

  10. CentOS7.6离线安装Redis5.0.4

    安装gcc-c++: 检查是否存在gcc-c++:rpm -qa|grep gcc-c++ 如果不存在就下载Linux-GC-C++文件: 访问镜像网站:http://mirrors.aliyun.c ...