SaltStack中的数据系统grains、pillar

grains与pillar相关概念

grains与pillar是saltstack两个重要的数据系统组件,用来取客户端(minion)基本信息数据或者主控端(master)数据,两者的主要区别在于:
grains:
1、grains是在minion第一次启动时采集的静态数据,在后面的生命周期中是不会发生变化的(minion重启时会重新收集),所以是静态数据,grains中包含运行的内核版本、操作系统、CPU个数、内存、物理设备型号等信息。
2、grains数据采集更新方式:minion启动时自动收集,也可以使用saltutil.sync_grains
3、应用场景:
a、grains可以在state系统中使用,用于配置管理模块
b、grains可以在target中使用,用来匹配minion,比如匹配操作系统,使用-G选项
c、grains可以用于minion的信息查询,grains保存着minion的各种信息数据
pillar:
1、pillar存储在master端,存储的是master端的指定数据,是动态数据类型,在master修改了一般都会立刻生效。
2、pillar数据采集更新方式:在master中定义,指定给对应的minion,可以使用saltutil.refresh_pillar刷新
3、应用场景:存储指定master数据,只有指定minion可以看到,用于敏感数据保存

使用

grains

1、salt ‘server3’ grains.ls # 列出所有grains项目名字
在这里插入图片描述
salt ‘server3’ grains.items # 列出所有grains项目名字以及值
在这里插入图片描述

2、在minion的配置文件中打开grains

120 grains:
121   roles:
122     - apache

在这里插入图片描述
或者

vim /etc/salt/grains
写入:
role: nginx
env: test
myname: GD

2、重启minion /etc/init.d/salt-minion restart
3、master端获取grains
salt ‘server3’ grains.item role env myname
在这里插入图片描述
salt ‘server3’ grains.get myname #列出单个数据
在这里插入图片描述
4、grains 在远程执行命令时很方便。我们可以按照 grains 的一些指标来操作。比如把所有的 web 服务器的 grains 的 role 设置为 nginx,那这样我们就可以批量对 nginx 的服务器进行操作了,此时我们需要使用到-G选项
salt -G role:nginx cmd.run ‘hostname’ # (role:nginx)我们自定义的项目以及值
执行role值为nginx的minion上的hostname命令
salt -G os:RedHat cmd.run ‘hostname’ # (os:RedHat)系统原有的数据信息
执行os为RedHat版本的minion上的df -h命令

在这里插入图片描述
5、自定义grains的第三种方法,在master端定义
在master端,创建/srv/salt/_grains目录
编辑/srv/salt/_grains/nginx.py

#!/usr/bin/python
def my_grains():
    grains = {}
    grains['name'] = 'GD1'
    grains['env'] = 'test1'
    return grains

在这里插入图片描述
在master中通过salt ‘*’ saltutil.sync_all命令将grains通步到所有minion
在这里插入图片描述
现在,我们可以在master中使用salt ‘*’ grains.get ** 来获取minion端自定义数据
salt ‘*’ grains.get name
在这里插入图片描述

pillar

Pillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用!安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
1、在master端编辑配置文件,打开pillar的存储路径
vim /etc/salt/master

694 pillar_roots:
 695   base:
 696     - /srv/pillar

在这里插入图片描述
2、重启salt-master,刷新所有minion结点的pillar
在这里插入图片描述
3、编辑存储pillar键值对的文件

mkdir /srv/pillar/
mkdir web
vim webserver.sls
# fqdn: 全限定域名,结点的完整hostname
{% if grains['fqdn'] == 'server2' %}          # 如果节点域名为server2的话,为其定义以下数据:webserver:httpd
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}		# 如果节点域名为server3的话,为其定义以下数据:webserver:nginx
webserver: nginx
{% endif %}

在这里插入图片描述
4、编辑入口文件top.sls
vim /srv/pillar/top.sls

base:
  '*':							# 指定所有minion,可以在命令中的target重新定义
    - web.webserver

5、同步当配pillar配置到所有minion
salt ‘*’ saltutil.refresh_pillar
在这里插入图片描述
6、查看所有minion的pillar项
在这里插入图片描述
由此看出,指定给每个minion的数据只是同步到了相应minion上,其他minion并不能够获得其他节点的数据
7、pillar同样可以使用到salt的其他组件中,比如使用 -I 选项,可以用在target中,用来选择minion
在这里插入图片描述

jinja模板的使用

方法一:
1、在server1中的httpd.apache中编写jinja模板

apache-install:
  pkg.installed:
    - pkgs:
      - httpd
      - php
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://httpd/files/httpd.conf
    - mode: 644
    - user: root
    - template: jinja
    - context:
      bind: 172.25.66.2
      port: 8080      						# 以键值对方式存储

  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
      - file: apache-install

2、在server1的httpd配置文件中编辑要更新的端口或接口
Listen {{port}} ( Listen 8080 )或
Listen {{ bind }}:{{ port }} (Listen 172.25.1.2:8080)
在这里插入图片描述
3、使用salt向minion推送,完成后,相应的minion就会发生变化
salt ‘server2’ state.sls httpd.apache
在这里插入图片描述
4、在server2中查看
在这里插入图片描述
方法二:
1、在/srv/salt/httpd目录下编辑lib.sls

vim /srv/salt/httpd/lib/sls
写入:
{% set port = 80 %}

2、在/srv/httpd/files/httpd.onf文件的第一行添加:

vim /srv/salt/httpd/files/httpd.conf
第一行写入:
{% from 'httpd/lib.sls' import port with context %}

在这里插入图片描述
3、推送
salt ‘server2’ state.sls httpd.apache
在这里插入图片描述
4、在server2中查看
在这里插入图片描述

jinja模板结合grains与pillar

一、grains
1、编辑server1中的/srv/salt/httpd/apache.sls文件

vim /srv/salt/httpd/apache.sls
apache-install:
  pkg.installed:
    - pkgs:
      - httpd
      - php
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://httpd/files/httpd.conf
    - mode: 644
    - user: root
    - template: jinja
    - context:
      bind: {{ grains['ipv4'][-1] }}		# 列表的切片操作			
      port: 8080

  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
      - file: apache-install

Tip:我们可以在server1中使用salt ‘*’ grains.item ipv4查看minnion的ip
在这里插入图片描述
2、向minion中推送
salt ‘server2’ state.sls httpd.apache
在这里插入图片描述
二、pillar
1、cd /srv/pliiar/web

vim webserver.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
bind: 172.25.66.2
port: 80
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}

2、salt ‘*’ pillar.items
在这里插入图片描述
3、修改/srv/salt/httpd/filles/httpd.conf
在这里插入图片描述
4、推送
在这里插入图片描述

总结一下jinja模板的使用,当我们要向多个minnion推送相同的服务,而且要同时修改服务的配置文件,文值文件中的ip需要修改为对应minion的,这样的话总不能一个一个的去推送吧,基于这种情况,我们就可以使用jinja模板来对各个minion的ip进行渲染,结合grains与pillar更高效率的实现saltstack自动化一键批量部署

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值