博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SaltStack入门篇(三)之数据系统Grains、Pillar
阅读量:5054 次
发布时间:2019-06-12

本文共 7212 字,大约阅读时间需要 24 分钟。

1、什么是Grains?

Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。可以理解为Grains记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。我们可以通过grains.items来查看某台Minion的所有Grains信息。 

Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。 
Grains功能:1.收集资产信息 2.信息查询 
官方文档:

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.8linux-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.05linux-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.05linux-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.highstatelinux-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: 2Failed:    0------------Total states run:     2Total run time:   2.533 slinux-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-grainslinux-node1.example.com:    linux-node2linux-node2.example.com:[root@linux-node1 ~]# vim /etc/salt/grains test-grains: linux-node2hehe: haha[root@linux-node1 ~]# salt '*' saltutil.sync_grains[root@linux-node1 ~]# salt '*' grains.get hehelinux-node1.example.com:    hahalinux-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.itemslinux-node1.example.com:    ----------linux-node2.example.com:    ----------[root@linux-node1 ~]# vim /etc/salt/master#pillar_opts: False   打开该项,修改成Truepillar_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/masterpillar_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.itemslinux-node1.example.com: ---------- apache: httpdlinux-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.highstatelinux-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: 2Failed: 0------------Total states run: 2Total run time: 996.039 mslinux-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: 2Failed: 0------------Total states run: 2Total 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.敏感数据配置

 

 

 

 

 

转载于:https://www.cnblogs.com/linuxk/p/9273342.html

你可能感兴趣的文章
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
关于js sort排序方法
查看>>
JAVA面试常见问题之Redis篇
查看>>
javascript:二叉搜索树 实现
查看>>
网络爬虫Heritrix源码分析(一) 包介绍
查看>>
__int128的实现
查看>>
Problem - 1118B - Codeforces(Tanya and Candies)
查看>>
jdk1.8 api 下载
查看>>
svn 图标不显示
查看>>
getElement的几中属性介绍
查看>>
iOS 使用Quartz 2D画虚线 【转】
查看>>
平面最接近点对
查看>>
HTML列表,表格与媒体元素
查看>>
PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
查看>>
感谢青春
查看>>
Jquery Uploadify4.2 falsh 实现上传
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>