云计算自动化运维——SaltStack之数据系统Grains、Pillar

本实验是在云计算自动化运维——SaltStack详解文章基础上进行的,master-minion端已经配置好。

文章目录

    • 一、Grains简介
        • 1、定义
        • 2、特点
        • 3、功能使用
            • 3.1 grains信息查询
            • 3.2 grains目标匹配
            • 3.3 grains自定义
            • 3.4 在文件中引用grains变量
    • 二、Pillar简介
        • 1、定义
        • 2、特点
        • 3、功能使用
            • 3.1 开启系统默认定义的pillar变量
            • 3.2 pillar数据存储目录
            • 3.3 pillar动态变量自定义
            • 3.4 pillar动态变量的引用
            • 3.5 在配置文件中导入指定路径下的自定义变量

实验环境

主机名 ip 服务
server1 172.25.1.1 服务端 salt-master
server2 172.25.1.2 客户端 salt-minion
server3 172.25.1.3 客户端 salt-minion
server4 172.25.1.4 客户端 salt-minion

一、Grains简介

1、定义

Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。并向master提交。注:重启便会重新收集。

可以理解为Grains记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。

2、特点

  • 存储在minion端,缓存在master端
  • 数据信息相对是静态的

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

3、功能使用

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

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第1张图片

  • salt server2 grains.items #查看server2主机所有保留字包含的gains变量及其值 (相当于python中的key-value键值对)
  • salt ‘*’ grains.items #查看所有minion主机保留字包含的gains变量及其值
    云计算自动化运维——SaltStack之数据系统Grains、Pillar_第2张图片
  • salt server2 grains.item os #取保留字中变量os的值
    云计算自动化运维——SaltStack之数据系统Grains、Pillar_第3张图片
  • salt ‘*’ grains.get ip4_interfaces:eth0 #查看所有minion主机的ip
    云计算自动化运维——SaltStack之数据系统Grains、Pillar_第4张图片
  • salt ‘*’ grains.get saltversion #查看所有minion主机的版本
    云计算自动化运维——SaltStack之数据系统Grains、Pillar_第5张图片
3.2 grains目标匹配

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

  • salt -G ‘ip4_interfaces:eth0’ cmd.run ‘uptime’ #查看所有minion的ipv4地址对应网卡为eth0的主机负载
    云计算自动化运维——SaltStack之数据系统Grains、Pillar_第6张图片
3.3 grains自定义

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

把master端变量脚本my_grains.py同步到所有被控端的 /var/cache/salt/minion/extmods/grains和 /var/cache/salt/minion/files/base/_grains两个目录下。前者是最终的存放目录,而后者是临时存放位置。同时在前者目录中还会生成对应的python字节码文件即.pyc文件

pyc是编译过的文件,提高了查询的快速性。.pyc文件生成之后就表明这个脚本中写入的grains信息已经被被控端接收了,此时就可以通过主控端salt ‘*’ grains.item roles 来查看roles对应的值了。而这个值是通过在各个不同被控端上运行这个脚本获得而来的。
  
例:形式③的使用
在master端查看minion端server2主机roles变量不存在:
在这里插入图片描述
在server2主机上的minion端主配置文件中添加变量:
在这里插入图片描述
在这里插入图片描述
在master端查看server2主机变量roles值,此时已经存在:
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第7张图片
例:形式④的使用
在master主机上创建 _grains 目录自定义grain,并同步到minions:
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第8张图片

在minion端(server3)上查看同步文件并重启服务:
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第9张图片
在这里插入图片描述
在master端测试变量添加是否成功:
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第10张图片

3.4 在文件中引用grains变量

查看变量ipv4的值是以列表形式存储的:
在这里插入图片描述
所以在下边文件中引用变量值时是采用列表切片方式提取的
【1】方式一:在install.sls文件中调用jinja模板,grains变量提取放在配置文件中
步骤一:编写apache安装文件install.sls,在要复制到目标主机的配置文件中调用jinja模板

vim /srv/salt/apache/install.sls 

apache-install:
  pkg.installed:
    - pkgs:
      - httpd
      - httpd-tools

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja   #必须调用模版,否则会报错
 
  service.running:
    - name: httpd
    - reload: true
    - watch:
      - file: apache-install

步骤二:在配置文件中提取ipv4变量值

vim apache/files/httpd.conf
	Listen {
     {
      grains['ipv4'][-1] }}:8   #列表必须要切片,提取列表最后一个元素

步骤三:推送到server3主机

salt server3 state.sls apache.install

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第11张图片
步骤四:在server3上查看配置文件
在这里插入图片描述
【2】方式二:在install.sls文件中调用jinja模板并定义变量承载grains变量提取值
步骤一:编写apache安装文件install.sls,在要复制到目标主机的配置文件中调用jinja模板并设置变量

vim install.sls

apache-install:
  pkg.installed:
    - pkgs:
      - httpd
      - httpd-tools

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja
     http_host: {
     {
      grains['ipv4'][-1]}}   #定义一个变量http_host,承载ipv4列表元素。需要对列表切片.将值给变量 http_host

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

步骤二:修改配置文件,将模板中定义的变量 http_host 写入文件

vim apache/files/httpd.conf 
Listen {
     {
      http_host }}:8080   #监听主机:监听端口

步骤三:推送到server3主机

salt server3 state.sls apache.install

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第12张图片
步骤四:在server3上查看配置文件
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第13张图片

二、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:指定位置

2、特点

存储位置:Master端
数据类型:动态数据
数据采集更新方式:在Master端定义,指定给对应的Minion,可以用saltutil.refresh_pillar刷新
应用:存储Master指定的数据,只有指定的Minion可以看到。用于敏感数据保存
特点:minion只能查看自己的pillar,无权修改

3、功能使用

3.1 开启系统默认定义的pillar变量

saltstack默认将主控端配置文件中的所有数据都定义到pillar中,而且对所有被控主机开放,可以通过修改/etc/salt/master配置中的pillar_opts:Ture来开启pillar功能,使用户可以使用系统自带的pillar变量数据(若不开启,master端可以自定义,不影响pillar数据使用),然后重启master 服务再去进行查看。

默认情况下master端自带的给minion端定义的pillar数据是看不到的:

开启pillar功能 pillar_opts:
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第14张图片
在master端查看pillar动态数据:
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第15张图片
为方便查看后续自定义pillar变量,在这里我们关闭系统默认定义的变量数据:
在这里插入图片描述

3.2 pillar数据存储目录

master上配置文件中定义pillar_roots,用来指定pillar的数据存储在哪个目录

默认情况下配置文件/etc/salt/master文件中存在的pillar变量定义目录的路径是/srv/pillar,可以直接去掉注释。
云计算自动化运维——SaltStack之数据系统Grains、Pillar_第16张图片
我使用的是文件中指明的默认目录,目录需要自己创建。
在这里插入图片描述

3.3 pillar动态变量自定义

pillar变量定义在.sls文件中,有一个入口文件top.sls,通过top.sls文件关联其他变量所在的sls文件。

步骤一:在pillar默认目录中创建web.sls文件,定义动态变量。(相同变量名对应不同值)

cd /srv/pillar/  #进入pillar默认目录
vim web.sls   #编写web.sls文件

{
     % if grains['fqdn'] == 'server2' %}
webserver: nginx 
http_port: 80
{
     % elif grains['fqdn'] == 'server3' %}
webserver: httpd
http_port: 80
{
     % endif %}

lb: haproxy   #全局变量

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第17张图片
注:
文件中的fdqn是grains所获取的minion端的主机名,可在master端获取:

salt '*' grains.item fqdn

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第18张图片
步骤二:在pillar默认目录中创建top.sls文件,关联web.sls文件

vim top.sls

base:
  '*':
    - web

在这里插入图片描述
步骤三:查看自定义的pillar变量

salt server2 pillar.items  #查看minion端server2的pillar变量
salt server3 pillar.items  #查看minion端server3的pillar变量 
salt server4 pillar.items  #查看minion端server4的pillar变量

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第19张图片

3.4 pillar动态变量的引用

步骤一:编写apache安装文件install.sls 引用上一步定义的端口变量 port

[root@server1 salt]# vim apache/install.sls 

apache-install:
  pkg.installed:
    - pkgs:
      - httpd
      - httpd-tools

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja  #调用jinja模板
    - context:
      http_host: {
     {
      grains['ipv4'][-1] }}  #调用grains获取的静态数据
      http_port: {
     {
      pillar['port']}}  #调用pillar自定义的动态数据

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

步骤二:将install.sls文件中承载变量值的http_host及http_port自定义变量写进source指向的配置文件中

vim /srv/salt/apache/files/httpd.conf
42 Listen {
     {
      http_host }}:{
     {
      http_port }}

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第20张图片
步骤三:在server3主机上进行推送,安装apache服务

salt server3 state.sls apache.install

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第21张图片

3.5 在配置文件中导入指定路径下的自定义变量

步骤一:在/srv/salt路径下的任意位置创建变量文件,在文件中使用jinja语法定义变量。

vim /srv/salt/apache/lib.sls
	{
     % set http_port = '8080' %}

步骤二:在配置文件中导入变量所在文件路径

vim /srv/salt/apache/files/httpd.conf
	{
     % from 'apache/lib.sls' import http_port with context %}  #加在配置文件第一行

步骤三:在server3主机上推送apache安装文件

salt server3 state.sls apache.install

云计算自动化运维——SaltStack之数据系统Grains、Pillar_第22张图片
注意:此种方式下定义的变量,配置文件会优先读取。优先级高于pillar自定义变量

你可能感兴趣的:(Linux企业实战)