本文共 14634 字,大约阅读时间需要 48 分钟。
pillar 存储位置:master端,数据类型:动态数据 ,数据采集方式: 在master端定义,指定给对应的minion。可以使用saltuitl.refresh_pillar刷新。 应用:存储master指定的数据。只有指定的minion可以看到。用于敏感数据保存。 通过一个例子来了解: ###默认是没有显示的,需在打开配置选项,我们演示完后,把这一项还原回来
###552行,
pillar_opts: True ###再次执行salt '*' pillar.items 就会有显示啦
########################定义pillar数据####################################### /etc/init.d/salt-master restart
#################################################################################
######################################################################################
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/