博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
saltstack 数据系统——Grains和pillar
阅读量:2388 次
发布时间:2019-05-10

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

pillar 存储位置:master端,数据类型:动态数据 ,数据采集方式:


在master端定义,指定给对应的minion。可以使用saltuitl.refresh_pillar刷新。


应用:存储master指定的数据。只有指定的minion可以看到。用于敏感数据保存。



通过一个例子来了解:


###默认是没有显示的,需在打开配置选项,我们演示完后,把这一项还原回来

###552行,
pillar_opts: True

###再次执行salt '*' pillar.items 就会有显示啦
 
########################定义pillar数据#######################################
vim /etc/salt/master

pillar_roots:
    - /srv/pillar
保存退出
mkdir /srv/pillar
/etc/init.d/salt-master restart
#################################################################################
 
 
apache: httpd
apache: apache2
 
 
 
base:
   - apache
######################################################################################   
salt 
'*'
 
saltutil.refresh_pillar  
#刷新一下
 
 
   
 
<div class="line number56 index55 alt1" font-size:12px;color:#555555;padding:0px="" 1em="" !important;margin:0px="" !important;border-radius:0px="" !important;background:none="" white="" !important;border:0px="" !important;bottom:auto="" !important;float:none="" !important;left:auto="" !important;line-height:1.1em="" !important;outline:0px="" !important;overflow:visible="" !important;position:static="" !important;right:auto="" !important;top:auto="" !important;vertical-align:baseline="" !important;width:auto="" !important;box-sizing:content-box="" !important;min-height:auto="" !important;"="" style="word-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">salt -I 'apache:httpd' test.ping


1、关于Pillar

Pillar:

存储位置:Master端


数据类型:动态数据


数据采集更新方式:
在Master端定义,指定给对应的Minion,可以用saltutil.refresh_pillar刷新


应用:存储Master指定的数据,只有指定的Minion可以看到。用于敏感数据保存



Pillar的使用Grains不同,需要手动设置。配置方法与State管理。需要先在master配置文件中定义pillar_roots.


同时,
默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效
: 



2、配置pillar


a)定义pillar_roots:


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

pillar_roots:

  base:

    - /etc/salt/pillar


[root@master ~]# 
mkdir -p /etc/salt/pillar


b)定义top.sls:


[root@master ~]# 
vim /etc/salt/pillar/top.sls

base:

  '*':

    - init.rsyslog


备注:所有的minion端都匹配init目录下的rsyslog.sls文件


默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。


c)编辑Pillar下的SLS文件:


[root@master ~]# 
mkdir -p /etc/salt/pillar/init


[root@master ~]# cd /etc/salt/pillar/init


[root@master init]# 
vim rsyslog.sls


{% if grains['osfinger'] == 'CentOS-6' %}

syslog: rsyslog

{% elif grains['osfinger'] == 'CentOS-5' %}

syslog: syslog

{% endif %}


说明:这个是使用Jiajia模板定义的Pillar。同时使用了Grains来进行条件判断。


注意:key与value之间需要用冒号加空格分隔
,没有空格的话会出现报错


d)刷新Pillar数据:


在master上修改pillar文件后,需要用以下命令刷新minion上的数据:



[root@master ~]# 
salt '*' saltutil.refresh_pillar

node01.saltstack.com:

    True

node02.saltstack.com:

    True

[root@master ~]# 
salt '*' pillar.item syslog

node01.saltstack.com:

    ----------

    syslog:

        rsyslog

node02.saltstack.com:

    ----------

    syslog:

        rsyslog

[root@master ~]# 
salt '*' pillar.raw

node01.saltstack.com:

    ----------

    syslog:

        rsyslog

node02.saltstack.com:

    ----------

    syslog:

        rsyslog


使用pillar.raw查看的是目前正在使用的,存在于minion端的Pillar数据,使用pillar.items会刷新后重新加载的Pillar。所以你如果添加了Pillar,可以使用该方法查询



[root@master ~]# 
salt -I 'syslog:rsyslog' test.ping

node01.saltstack.com:

    True

node02.saltstack.com:

    True

[root@master ~]# 
salt -I 'syslog:rsyslog' cmd.run 'df -h'

node02.saltstack.com:

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda5        14G  8.4G  4.5G  66% /

    tmpfs           932M   12K  932M   1% /dev/shm

    /dev/sda1       190M   42M  139M  23% /boot

    /dev/sda3       2.0G   18M  1.8G   1% /tmp

node01.saltstack.com:

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda5        14G  8.4G  4.5G  66% /

    tmpfs           932M   84K  932M   1% /dev/shm

    /dev/sda1       190M   42M  139M  23% /boot

    /dev/sda3       2.0G   18M  1.8G   1% /tmp

案例2:



[root@master init]# cd /etc/salt/pillar/

[root@master pillar]# mkdir -p packages

[root@master pillar]# cd packages/


[root@master packages]# 
vim packages.sls 

{% if grains['os'] == 'CentOS' %}

apache: httpd

git: git

{% elif grains['os'] == 'Debian' %}

apache: apache2

git: git-core

{% endif %}

[root@master init]# salt '*' grains.get os

node01.saltstack.com:

    CentOS

node02.saltstack.com:

    CentOS

[root@master packages]# cd ..

[root@master pillar]# ls

init  packages  top.sls

[root@master pillar]# 
vim top.sls 

base:

  '*':

    - init.rsyslog

    - packages.packages



说明:
salt使用-I选项表示使用Pillar来匹配minion.



[root@master init]# 
salt -I 'apache:httpd' test.ping


node01.saltstack.com:

    True

node02.saltstack.com:

    True

[root@master init]# salt -I 'git:git' test.ping

node02.saltstack.com:

    True

node01.saltstack.com:

    True




grains 存储位置minion端,数据类型:静态数据,数据采集更新方式:


minion启动时采集,也可以使用saltutil.sync_grains 进行刷新。


应用:存储minion基本数据,比如用于匹配minion,自身数据可以用来做资 产管理。 




1、什么是Grains


  
Grains是SaltStack的一个组件,存放着minion启动时收集的底层系统的静态信息。Grains是存储在minion端的,当minion启动时,会进行Grains的采集工作,然后保存下来。在以后的生命周期(再次重启minion,会重新收集)是不会发生变化的,所以是静态数据


Grains中包含诸如运行的内核版本、操作系统、CPU个数、内存、物理设备型号等信息。


  数据采集更新方式:Minion启动时收集,也可以使用saltutil.sync_grains



2、Grains的应用场景


Grains可以在state系统中使用,用于配置管理模块。


Grains可以target中使用,在用来匹配Minion,比如匹配操作系统,使用-G选项


Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。



3、Grains常用操作


a、列出Minion上所有可用的grains的名称



[root@master ~]#
 salt '*' grains.ls

node02.saltstack.com:

    - SSDs

    - biosreleasedate

    - biosversion

    - cpu_flags

    - cpu_model

    - cpuarch

    - domain

    - fqdn

    - fqdn_ip4

    - fqdn_ip6

    - gpus

    - host

    - hwaddr_interfaces

    - id

    - init

    - ip4_interfaces

    - ip6_interfaces

    - ip_interfaces

    - ipv4

    - ipv6

    - kernel

    - kernelrelease

    - locale_info

    - localhost

    - lsb_distrib_codename

    - lsb_distrib_id

    - lsb_distrib_release

    - machine_id

    - manufacturer

    - master

    - mdadm

    - mem_total

    - nodename

    - num_cpus

    - num_gpus

    - os

    - os_family

    - osarch

    - oscodename

    - osfinger

    - osfullname

    - osmajorrelease

    - osrelease

    - osrelease_info

    - path

    - productname

    - ps

    - pythonexecutable

    - pythonpath

    - pythonversion

    - saltpath

    - saltversion

    - saltversioninfo

    - selinux

    - serialnumber

    - server_id

    - shell

    - virtual

    - zmqversion

node01.saltstack.com:

    - SSDs

    - biosreleasedate

    - biosversion

    - cpu_flags

    - cpu_model

    - cpuarch

    - domain

    - fqdn

    - fqdn_ip4

    - fqdn_ip6

    - gpus

    - host

    - hwaddr_interfaces

    - id

    - init

    - ip4_interfaces

    - ip6_interfaces

    - ip_interfaces

    - ipv4

    - ipv6

    - kernel

    - kernelrelease

    - locale_info

    - localhost

    - lsb_distrib_codename

    - lsb_distrib_id

    - lsb_distrib_release

    - machine_id

    - manufacturer

    - master

    - mdadm

    - mem_total

    - nodename

    - num_cpus

    - num_gpus

    - os

    - os_family

    - osarch

    - oscodename

    - osfinger

    - osfullname

    - osmajorrelease

    - osrelease

    - osrelease_info

    - path

    - productname

    - ps

    - pythonexecutable

    - pythonpath

    - pythonversion

    - saltpath

    - saltversion

    - saltversioninfo

    - selinux

    - serialnumber

    - server_id

    - shell

    - virtual

    - zmqversion


b、列出Minion上所有grains的的名称及内容



[root@master ~]# 
salt 'node01.saltstack.com' grains.items

node01.saltstack.com:

    ----------

    SSDs:

    biosreleasedate:

        07/02/2015

    biosversion:

        6.00

    cpu_flags:

        - fpu

        - vme

        - de

        - pse

        - tsc

        - msr

        - pae

        - mce

        - cx8

        - apic

        - sep

        - mtrr

        - pge

        - mca

        - cmov

        - pat

        - pse36

        - clflush

        - dts

        - mmx

        - fxsr

        - sse

        - sse2

        - ss

        - syscall

        - nx

        - rdtscp

        - lm

        - constant_tsc

        - up

        - arch_perfmon

        - pebs

        - bts

        - xtopology

        - tsc_reliable

        - nonstop_tsc

        - aperfmperf

        - unfair_spinlock

        - pni

        - pclmulqdq

        - ssse3

        - cx16

        - pcid

        - sse4_1

        - sse4_2

        - x2apic

        - popcnt

        - tsc_deadline_timer

        - aes

        - xsave

        - avx

        - f16c

        - rdrand

        - hypervisor

        - lahf_lm

        - ida

        - arat

        - epb

        - pln

        - pts

        - dts

        - fsgsbase

        - smep

    cpu_model:

        Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz

    cpuarch:

        x86_64

    domain:

        saltstack.com

    fqdn:

        node01.saltstack.com

    fqdn_ip4:

        - 10.10.10.141

    fqdn_ip6:

    gpus:

        |_

          ----------

          model:

              SVGA II Adapter

          vendor:

              unknown

    host:

        node01

    hwaddr_interfaces:

        ----------

        eth0:

            00:0c:29:98:68:91

        lo:

            00:00:00:00:00:00

        pan0:

            f6:aa:1f:cb:87:f0

    id:

        node01.saltstack.com

    init:

        upstart

    ip4_interfaces:

        ----------

        eth0:

            - 10.10.10.141

        lo:

            - 127.0.0.1

        pan0:

    ip6_interfaces:

        ----------

        eth0:

            - fe80::20c:29ff:fe98:6891

        lo:

            - ::1

        pan0:

    ip_interfaces:

        ----------

        eth0:

            - 10.10.10.141

            - fe80::20c:29ff:fe98:6891

        lo:

            - 127.0.0.1

            - ::1

        pan0:

    ipv4:

        - 10.10.10.141

        - 127.0.0.1

    ipv6:

        - ::1

        - fe80::20c:29ff:fe98:6891

    kernel:

        Linux

    kernelrelease:

        2.6.32-573.el6.x86_64

    locale_info:

        ----------

        defaultencoding:

            UTF8

        defaultlanguage:

            en_US

        detectedencoding:

            UTF-8

    localhost:

        node01.saltstack.com

    lsb_distrib_codename:

        Final

    lsb_distrib_id:

        CentOS

    lsb_distrib_release:

        6.7

    machine_id:

        5bd0d598c3ad4f78b38c6e7600000020

    manufacturer:

        VMware, Inc.

    master:

        master.saltstack.com

    mdadm:

    mem_total:

        1863

    nodename:

        node01.saltstack.com

    num_cpus:

        1

    num_gpus:

        1

    os:

        CentOS

    os_family:

        RedHat

    osarch:

        x86_64

    oscodename:

        Final

    osfinger:

        CentOS-6

    osfullname:

        CentOS

    osmajorrelease:

        6

    osrelease:

        6.7

    osrelease_info:

        - 6

        - 7

    path:

        /sbin:/usr/sbin:/bin:/usr/bin

    productname:

        VMware Virtual Platform

    ps:

        ps -efH

    pythonexecutable:

        /usr/bin/python2.6

    pythonpath:

        - /usr/bin

        - /usr/lib64/python26.zip

        - /usr/lib64/python2.6

        - /usr/lib64/python2.6/plat-linux2

        - /usr/lib64/python2.6/lib-tk

        - /usr/lib64/python2.6/lib-old

        - /usr/lib64/python2.6/lib-dynload

        - /usr/lib64/python2.6/site-packages

        - /usr/lib64/python2.6/site-packages/PIL

        - /usr/lib64/python2.6/site-packages/gst-0.10

        - /usr/lib64/python2.6/site-packages/gtk-2.0

        - /usr/lib64/python2.6/site-packages/webkit-1.0

        - /usr/lib/python2.6/site-packages

        - /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info

    pythonversion:

        - 2

        - 6

        - 6

        - final

        - 0

    saltpath:

        /usr/lib/python2.6/site-packages/salt

    saltversion:

        2015.5.10

    saltversioninfo:

        - 2015

        - 5

        - 10

        - 0

    selinux:

        ----------

        enabled:

            False

        enforced:

            Disabled

    serialnumber:

        VMware-56 4d e6 9b 20 1f b4 60-77 5d 03 1d 1d 98 68 91

    server_id:

        1356238538

    shell:

        /bin/sh

    virtual:

        VMware

    zmqversion:

        3.2.5

c、查看虚拟化的类型

[root@master ~]#
 salt '*' grains.get virtual

node01.saltstack.com:

    VMware

node02.saltstack.com:

    VMware



d、查询eth0所有IP地址



[root@master ~]#
 salt '*' grains.get ip_interfaces


node01.saltstack.com:

    ----------

    eth0:

        - 10.10.10.141

        - fe80::20c:29ff:fe98:6891

    lo:

        - 127.0.0.1

        - ::1

    pan0:

node02.saltstack.com:

    ----------

    eth0:

        - 10.10.10.142

        - fe80::20c:29ff:fead:83d

    lo:

        - 127.0.0.1

        - ::1

    pan0:


e、查询eth0所有IP地址



[root@master ~]#
 salt '*' grains.get ip_interfaces:eth0

node02.saltstack.com:

    - 10.10.10.142

    - fe80::20c:29ff:fead:83d

node01.saltstack.com:

    - 10.10.10.141

    - fe80::20c:29ff:fe98:6891


4、自定义grains


a)
在minion上的/etc/salt/minion直接配置grains


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

grains:

  roles: IT

  dept: system

[root@master ~]#
 salt -G 'roles:IT' test.ping

node01.saltstack.com:

    True

[root@master ~]#
 salt -G 'dept:system' test.ping

node01.saltstack.com:

    True


b)
通过/etc/salt/grains进行定义


[root@node01 ~]# 
vim /etc/salt/grains 

virtual: openstack

[root@node01 ~]# /etc/init.d/salt-minion restart

Stopping salt-minion daemon:                               [确定]

Starting salt-minion daemon:                               [确定]


[root@node02 ~]# 
cat /etc/salt/grains
 

virtual: xen


[root@node02 ~]# 
/etc/init.d/salt-minion restart

Stopping salt-minion daemon:                               [确定]

Starting salt-minion daemon:                               [确定]


[root@master ~]#
 salt -G 'virtual:xen' test.ping


node02.saltstack.com:

    True


在minion端添加一个mysqlversion的信息


[root@node01 ~]# 
cat /etc/salt/grains 

virtual: openstack

mysqlversion: 5.5

测试,发现存在报错信息

[root@master ~]# salt -G 'mysqlversion:5.5' test.ping

No minions matched the target. No command was sent, no jid was assigned.

ERROR: No return received

使用saltutil.sync_grains进行刷新测试

[root@master ~]#
 salt '*' saltutil.sync_grains

node02.saltstack.com:

node01.saltstack.com:

[root@master ~]#
 salt -G 'mysqlversion:5.5' test.ping

node01.saltstack.com:

    True



grains收集信息:


salt '*' 
grains.ls

 
 

salt 'web13*' 
grains.items

 

也可以单个显示

 

salt '*' 
grains.item fqdn

salt '*' 
grains.item server_id


salt '*' 
grains.get ip_interfaces:eth0



grains匹配minion


#比如查看所有centos的机器上执行uptime命令:

 

salt -G os:centos cmd.run 'uptime'

 

web12.limingyu.com:

     02:24:36 up  5:45,  1 user,  load average: 0.06, 0.11, 0.08

web13.limingyu.com:

     02:24:37 up  5:45,  1 user,  load average: 0.19, 0.09, 0.06

 

#
自定义grains:  
vim /etc/salt/minion



#打下面几行

 

 88 grains:

 89   roles:

 90     - webserver

 91     - memcache

  

 保存退出,重启minion


/etc/init.d/salt-minion restart

 

salt -G 'roles:memcache' cmd.run 'echo hehe'

 

或者

 

vim /etc/salt/grains

web: nginx

 

保存退出,重启minion

 

salt '*' grains.item web

 

web12.limingyu.com:

    ----------

    web:

        nginx

web13.limingyu.com:

    ----------

    web:

     

salt -G web:nginx cmd.run 'echo hehe'

 

web12.limingyu.com:

    hehe



在top.sls里匹配:  
vim /srv/salt/top.sls

 

base:

  'web:nginx' :

    - match: grain

    - apache

 

 

保存,重启服务

 

salt -G web:nginx cmd.run 'w'



pillar的数据是跟特定的minion关联的,可以用来传递minion自己的信息。管理员也可以自定义自己的pillar来对minion进行管理。


默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:

pillar_opts: False

自定义Pillar数据  


在Master的SLS文件中定义

假设使用默认pillar_roots配置 /srv/pillar 

vim /srv/pillar/top.sls

## 编辑pillar 的 top.sls 文件添加下面内容
base : 
  '*':
    - data
    - git
dev  :
  'os:CentOs':
    - git    
 
vim /srv/pillar/data/init.sls

## 添加下面内容
roles:webserver
 
 
vim  /srv/pillar/git.sls

## 添加下面内容
{% if grains['os'] == 'CentOs' %} 
git: git
{% elif grains['os'] == 'Debian' %} 
git: git-core
{% endif %}


pillar 跟sls一样拥有自己的top.sls文件,通过top.sls文件作为入口,组织其它的pillar文件

data定义了一个roles的值,如果不使用详细的data.init声明,则默认会使用data下的init.sls作为声明文件,如果同时存在data.sls跟data/init.sls文件,则会优先使用data.sls文件来访问。

git是使用grains的系统类型来进行不同的pillar定义。


在master上修改Pilla文件后,需要用以下命令刷新minion上的数据

salt '192.168.0.100' saltutil.refresh_pillar

怎么使用Pillar ?

Targeting :


Salt使用-I 选项来使用


salt -I 'roles:webserver' test.ping


SLS文件中使用

需要根据系统环境安装一个git软件

vim /srv/salt/git_env.sls

## 添加下面内容
git : 
  pkg.installed:
    - name : {

{pillar['git']}}
     
## 或是添加成下面样式,设置默认的pillar值
git:
  pkg.installed:
    - name: {
{ salt['pillar.get']('git', 'git') } 



Minion ID : 每个minion都有独立的ID,可以直接使用minion id 对对象进行操作,例如:

salt '192.168.0.100'  test.ping


通配符(*): salt的匹配规则跟shell差不多,通配符的使用也跟shell的用法一样


## 匹配所有的minion

# salt '*'  test.ping
 
## 匹配ID开头为192.168.0.的mimion 
# salt '192.168.0.*'  test.ping
 
## 匹配web1,web2,web3,web4,web5
# salt 'web[1-5]' test.ping
 
## 匹配web-x ,web-y, web-z
# salt 'web-[x-z]' test.ping


正则表达式

# 匹配id为web1-prod ,web1-devel 的minion

salt -E 'web1-(prod|devel)' test.ping


# 在state文件中也可以这么配置minion的匹配

base:
  'web1-(prod|devel)':
    - match: pcre
    - webserver

列表方式匹配
对一些特殊要求的minion对象,也可以手动指定一系列ID作为目标

salt -L 'web1,web21,web30' test.ping

Grains方式匹配

Grains 匹配是简单易用的操作方式,可以非常方便的对minion进行分类管理。

# 测试所有系统是CentOS的minion

salt -G ’os:CentOS’ test.ping


# 查询CPU架构是x84的minion的CPU个数:


salt -G ’cpuarch:x86_64’ grains.item num_cpus


在top.sls文件中使用grains匹配 


'node_type:web':
  - match: grain
  - webserver
'node_type:postgres':
  - match: grain
  - database

Pillar进行匹配

# pillar的匹配方式跟grains差不多,不过key/value换成pillar对象

salt -I 'somekey:specialvalue' test.ping

Node Group 匹配

节点分组匹配需要预先在top.sls文件中定义好minions的分组信息,例如可以在top.sls添加下面的group进行定义

nodegroups:
  group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
  group2: 'G@os:Debian and foo.domain.com'


备注:L@开头表示分组使用列表匹配,G@开头表示分组使用grains匹配

# 可以使用这样在salt中调用分组

salt -N group1 test.ping


# 在top.sls中可以使用下面定义来使用分组
base:
  group1:
    - match: nodegroup
    - webserver

最后,有时候匹配到的minion会有很多,如果同时执行可能导致master直接挂机,所以salt很贴心得给了个分批执行的功能,例如下面的操作:

# 分10个minion一批进行执行,直到执行完毕

salt '*' -b 10 test.ping
 
# 分成25%一批进行执行,直到执行完毕

salt -G 'os:RedHat' --batch-size 25% apache.signal restart

转载地址:http://jjpab.baihongyu.com/

你可能感兴趣的文章
PHP json_encode中文乱码解决方法
查看>>
mysql服务启动、关闭
查看>>
php获取中文字符串的首字符拼音字母
查看>>
php curl通过代理获取数据
查看>>
6 个 Linux性能监控命令行工具
查看>>
mysql 编码字符集配置
查看>>
php查看opcode编码的扩展 opdumper
查看>>
php转换html格式为文本格式
查看>>
mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
查看>>
Nginx location 和 rewrite retry
查看>>
基于nginx的FastCGI的缓存配置
查看>>
Nginx模块fastcgi_cache的几个注意点
查看>>
PHP使用curl伪造IP地址和header信息
查看>>
代理服务器中的HTTP代理与SOCKS代理有什么区别?
查看>>
零基础Python学习路线,小白的进阶之路!
查看>>
CSS的23个垂直居中技巧,你都学会了吗?
查看>>
黑客攻击用的最短代码大揭秘,颠覆你的世界观!
查看>>
零基础的自学前端之路,当年的入坑之旅
查看>>
新手程序员?教你解决办法!基础都掌握了,动手敲代码就一脸懵逼
查看>>
程序员快速进阶学习到底要看书还是要看视频?
查看>>