saltstack 数据系统——Grains和pillar
来源:互联网 发布:哪个软件有天九牌游戏 编辑:程序博客网 时间:2024/06/08 02:23
在master端定义,指定给对应的minion。可以使用saltuitl.refresh_pillar刷新。
应用:存储master指定的数据。只有指定的minion可以看到。用于敏感数据保存。
通过一个例子来了解:
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
- saltstack 数据系统——Grains和pillar
- SaltStack实战之数据系统 Grains VS Pillar
- [Saltstack]-{grains,pillar}[二]
- saltstack数据系统-Grains
- Saltstack数据系统-Pillar
- SaltStack实战之数据系统-Grains
- SaltStack实战之数据系统-Pillar
- salt实战系列-grains和pillar学习
- saltstack grains
- saltstack grains
- saltstack grains
- saltstack Pillar
- saltstack pillar
- salt数据系统---grains
- salt数据系统---pillar
- saltstack[5]-grains
- SaltStack Pillar攻略
- SaltStack之Pillar和Jinja部署LVS+Keepalived+Haproxy
- Mysql学习笔记五——having筛选
- 1
- 网易初面(技术面)
- 趁着我还清醒的时候来一发感想
- 2
- saltstack 数据系统——Grains和pillar
- java与javascript语法区别
- citymaker学习资源
- SSH实战OA 03:设计BaseDAo
- php学习笔记
- L1-042日期格式化
- 解决Discus!x3.1论坛安装插件提示无法运行通过zend加密应用
- QT SQL总结-----/*自己编写*/
- PDO数据连接持久化性能测试