SaltStack(5)—— SaltStack之数据系统Grains、Pillar

本实验是在《SaltStack(1)—— SaltStack》简介以及服务的部署文章基础上进行的,master-minion端已经配置好。

博客链接:https://mp.csdn.net/console/editor/html/104871109

目录

一 、Grains、Pillar的使用方法

  • (一)、Grains实验
  •    1、Grains简介
  •    2、Grains中的查询命令
  •   3、自定义grains项
     
  •      方法一:通过文件的方式来创建grains
  •         步骤一:编辑/etc/salt/minion文件中的内容
  •         步骤二:重启salt-minion服务
  •         步骤三:在server1查看server上的grains角色是否创建成功
  •     方法二:在/etc/salt/grains中定义(在minion端)
  •        步骤一:自己创建的文件
  •        步骤二:同步数据
  •    方法三:在slat-master端创建grains目录
  •       步骤一:创建目录、创建实验文件
  •       步骤二:将数据同步到minion端主机
  •   方法四:在target匹配minion

(二)、Pillar的应用场景

  •     1、Pillar简介
  •     2、自定义pillar
  •        步骤一:编辑web.sls文件
  •        步骤二:
  •          1、同步数据
  •          2、grains各个模块之间的变量的调用
  •          3、编译
  •          4、数据的刷新
  •          5、查看匹配的内容

       

一 、Grains、Pillar的使用方法

实验环境 :

主机名 ip 服务
server1 172.25.6.1 服务端 salt-master
server2 172.25.6.2 客户端 salt-minion
server3 172.25.6.3 客户端 salt-minion
server4 172.25.6.4 客户端 salt-minion

 

(一)、Grains实验

1、Grains简介

Grains是SaltStack的一个组件 、存放在Satltack的minion端口 、

当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有minion重启时才会进行数据的更新

由于granis是静态数据,因此不推荐经常取修改它

应用场景:

  • 信息查询,可用作CMDB
  • 在target中使用 ,匹配minion
  • 在state系统中使用,配置管理模块

2、定义

  • Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。并向master提交。注:重启便会重新收集。
  • 可以理解为Grains记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。

3、特点

  •     存储在minion端,缓存在master端
  •     数据信息相对是静态的
  • 通过 grains 所获取的minion端的主机信息是固定不变的,就是在minion端主机配置发生改变时,这种数据仍然不会发生改变;除非重启服务;当然还有给命令可以刷新,使之生效,

4、功能使用
4.1 grains信息查询

  •     salt server2 grains.ls #grains模块的 ls 方法列出server2主机默认可用的保留字(gains信息)

2、Grains中的查询命令

2.1、查看Grains列表

[root@server1 nginx]# salt server2 grains.ls      ##查看grains列表

2.2、指定显示的内容

格式:salt server2 grains.item  内容

例如:查看server2中的ipv4中的内容

[root@server1 ~]# salt server2 grains.item ipv4     ##查看grains端的ip
server2:
    ----------
    ipv4:
        - 127.0.0.1
        - 172.25.6.2
[root@server1 ~]# 

  • salt server2 grains.items #查看server2主机所有保留字包含的gains变量及其值 (相当于python中的key-value键值对)
  • salt ‘*’ grains.items #查看所有minion主机保留字包含的gains变量及其值

3、自定义grains项

方法一:

通过文件的方式来创建grains

  • 在  /etc/salt/minion 中定义
  • #  vim/etc/salt/minion
  • granis:
  •   roles:
  •     -  apache
  •    -  httpd
  • 重启salt-minion,否则数据不会更新
  • # systemctl restart salt-minion

步骤一 :

编辑/etc/salt/minion文件中的内容

[root@server2 ~]# vim  /etc/salt/minion

...

grains:
  roles:
    - apache           ##创建grains角色

...

步骤二:

重启salt-minion服务

[root@server2 ~]# systemctl restart salt-minion.service     ##重启

步骤三:

在server1查看server上的grains角色是否创建成功

[root@server1 ~]# salt server2 grains.item roles

已经创建成功!!!

方法二 :

在/etc/salt/grains中定义

步骤一:

1、自己创建的文件

[root@server3 ~]# vim /etc/salt/grains     ##自定义文件
roles: nginx

2、测试:

在server1上查看

https://www.baidu.com/baidu?wd=http&tn=monline_4_dg&ie=utf-8

步骤二:

1、同步数据

[root@server1 ~]# salt server3 saltutil.sync_grains       ##同步数据
server3:

2、在server1上进行测试


 

3、查看全部的grains

[root@server1 ~]# salt '*' grains.item roles

方法三:

在slat-master端创建grains目录(只需要在master端进行操作不需要minion端)

步骤一:

1、创建目录、创建实验文件

[root@server1 ~]# mkdir  /srv/salt/_grains/                ##创建目录 
[root@server1 ~]# vim /srv/salt/_grains/my_grian.py        ##创建一个grain文件

def my_grain():                        ##定义一个空字典,往字典中添加下边的信息 
    grains = {}
    grains['salt'] = 'stack'
    grains['hello'] = 'world'
    return grains

注:创建目录时一定要是_grains 不然编译的时候不生效  !!!)

步骤二:

1、在server1上:

将数据同步到minion端主机

[root@server1 _grains]# salt '*' saltutil.sync_grains      ##将数据同步到minion主机上 

2、在server1 上查询相关的key和value值

[root@server1 _grains]# salt '*' grains.item salt     ##输入key值

3、在server2上查看数据同步的情况

[root@server2 ~]# tree /var/cache/salt/

(数据已经同步到server2主机上 !!!)

方法四:

1、在target匹配minion:

[root@server1 ~]# salt -G roles:apache cmd.run hostname      ##匹配相应的值

2、在top.sls文件中匹配相应的值

[root@server1 ~]# cat /srv/salt/top.sls 
base:
  'roles:apache':              
    - match: grain   
    - apache
  'roles:nginx':
    - match: grain
    - nginx
[root@server1 salt]# salt '*' state.highstate        ##高级推

3、测试:

会自动识别所指的内容

https://www.baidu.com/baidu?wd=http&tn=monline_4_dg&ie=utf-8

(二)、Pillar的应用场景

1、Pillar简介
1、定义

Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。

在Salt的设计中,Pillar使用独立的加密sessiion。可用于提供开发接口,用于在master端定义数据,然后再minion中使用,

一般传输敏感的数据,例如ssh key,加密证书等。

pillar和states建立方式类似,由sls文件组成,有一个入口文件top.sls,通过这个文件关联其他sls文件。

默认路径在/srv/pillar,可通过/etc/salt/master里面pillar_roots:指定位置。

pillar和grains一样也是一个数据系统,但是应用的场景不一样

pillar是将信息动态的存放在 master端,主要存放私密、敏感信息(如用户名秘密等),而且可以指定某个minion才可以看到对应的信息

pillar更加适合在配置管理中运用

grains目标匹配

1、查看Pillar的主配置文件

piller 的主配置文件在/etc/salt/master

[root@server1 ~]# vim  /etc/salt/master     

(注:一般情况下不用修改除非要再其他目录下定义此文件)

2、自定义pillar

Grains的四种存在形式及minion端读取grains变量的优先级:
①Core grains. #核心的grains变量,包含(minion端)系统的一些环境信息。
②在 /etc/salt/grains (minion端)自定义grains变量。
③在 /etc/salt/minion (minion主配置文件)自定义grains变量。
④在master端的 _grains 目录自定义grain,写到.py文件中,同步到minions。

注:方式③minion主配置文件 /etc/salt/minion变量定义方式

##单个变量
grains:
   roles: nginx

##多个变量
grains:
  roles:
    - webserver
    - memcache

注:方式④同步grains变量,当以下命令被执行的时候被触发

   state.highstate
saltutil.sync_grains
saltutil.sync_all

创建实验目录

步骤一 :

1、编辑web.sls文件

https://www.baidu.com/baidu?wd=http&tn=monline_4_dg&ie=utf-8

2、编辑top.sls的内容

[root@server1 pillar]# cat top.sls 
base:
  '*':                 
    - web                                 ##执行的是web.sls文件中的内容 

步骤二:

1、同步数据

[root@server1 pillar]# salt '*'  pillar.items         ##同步数据 

2、grains各个模块之间的变量的调用

2.1、修改web.sls文件

[root@server1 pillar]# vim web.sls 
{% if grains['fqdn'] == 'server3' %}
webserver: nginx
{% elif grains['fqdn'] == 'server2' %}
webserver: httpd                        ##将在server2上执行的内容修改为httpd
{% endif %}

port: 80                                                                                                            

2.2、编辑apache模块主配置文件

[root@server1 ~]# vim /srv/salt/apache/init.sls 
install-apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['webserver'] }}          ##将此模块将此内容改为pillar的变量调用
      - httpd-tools
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/httpd.conf

3、编译

将数据推送给sertver2节点

[root@server1 pillar]# salt server2  state.sls apache 

(没有报错说明调用成功!!!)

4、数据的刷新

[root@server1 apache]# salt '*' saltutil.refresh_pillar      ##数据刷新
server2:
    True
server4:
    True
server3:
    True

5、查看匹配的内容

查看webserver:httpd匹配到的内容

[root@server1 apache]# salt -I 'webserver:httpd' test.ping 
server2:
    True
[root@server1 apache]# 

发布了93 篇原创文章 · 获赞 1 · 访问量 1907

猜你喜欢

转载自blog.csdn.net/dghfttgv/article/details/104928375