一、简述
在SaltStack系统中我们的管理对象叫作Target,在Master上我们可以采用不同Target去管理不同的Minion。这些Target都是通过去管理和匹配Minion的ID来做的一些集合。
二、Target
1.正则匹配
[root@salt-master-1 ~]# salt -E 'salt-minion*' test.ping salt-minion-2: True salt-minion-1: True
2.列表匹配
[root@salt-master-1 ~]# salt -L salt-minion-1,salt-minion-2 test.ping salt-minion-2: True salt-minion-1: True
3.Grains匹配
[root@salt-master-1 ~]# salt -G 'os:CentOS' test.ping salt-minion-2: True salt-minion-1: True
4.组匹配
[root@salt-master-1 ~]# salt -N mygroups test.ping salt-minion-2: True salt-minion-1: True
需要在配置文件中加以下配置
nodegroups: mygroups: 'L@salt-minion-1,salt-minion-2'
5.复合匹配
[root@salt-master-1 ~]# salt -C 'G@os:MacOS or L@salt-minion-1' test.ping salt-minion-1: True
6.CIDR匹配
[root@salt-master-1 ~]# salt -S '10.0.0.0/16' test.ping salt-minion-1: True salt-minion-2: True
7.Pillar值匹配
salt -I 'key:value' test.ping Minion: True Minion1: True
三、Grains讲解
Grains是SaltStack组件中非常重要的组件之一,因为我们在做配置部署的过程中经常会使用它,Grains是SaltStack记录的Minion的一些静态信息的组件,我们可以简单地理解为Grains里面记录着每台Minion地一些常用属性,比如CPU、内存、磁盘、网络信息等,我们可以通过grains.items查看某台Minion地所有Grains信息,Minion的Grains信息是Minions启动的时候采集汇报给Master的,在实际应用环境中我们需要根据自己的需求去自定义一些Grains,关于自定义Grains的常用方法有以下几种:
通过Minion配置文件定义
通过Grains相关模块定义
通过Python脚本定义 //后面会讲如何通过python脚本自定义一些Grains信息
1.了解Grains相关的命令用法:
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_functions grains salt-minion-1: - grains.append - grains.delval - grains.filter_by - grains.get - grains.get_or_set_hash - grains.has_value - grains.item - grains.items - grains.ls - grains.remove - grains.setval - grains.setvals
2.通过Minion配置文件定义Grains
比较简单的放大是通过minion的配置文件来定义(Minion的Grains信息是在Minion服务启动的时候汇报给Master的),但为了统一Minion的Grains管理,我们把这些文件存储到minion.d/grains文件中
[root@salt-minion-1 ~]# cat /etc/salt/minion.d/grains.conf grains: roles: - webserver - memcache deployment: datacenter4 cabinet: 13 cab_u: 14-15 [root@salt-minion-1 ~]# systemctl restart salt-minion.service #master [root@salt-master-1 ~]# salt 'salt-minion-1' grains.item roles salt-minion-1: ---------- roles: - webserver - memcache
3.通过Grains模版定义Grains
[root@salt-master-1 ~]# salt 'salt-minion-1' grains.append members 'web1' salt-minion-1: ---------- members: - web1 [root@salt-master-1 ~]# [root@salt-master-1 ~]# salt 'salt-minion-1' grains.item members salt-minion-1: ---------- members: - web1 #使用grains.setvals同时设置多对Grains信息 [root@salt-master-1 ~]# salt 'salt-minion-2' grains.setvals "{'salt': 'good', 'book': 'cool'}" salt-minion-2: ---------- book: cool salt: good [root@salt-master-1 ~]# salt 'salt-minion-2' grains.item salt salt-minion-2: ---------- salt: good
四、数据管理中心Pillar
Pillar也是SaltStack组件中非常重要的组件之一,是数据管理中心,我们经常配合states在大规模的配置管理工作中使用它,Pillar在SaltStack中主要的作用就是存储和定义配置管理中需要的一些数据,比如软件版本号、用户名密码等信息,它的定义存储格式跟Grains类似,都是YAML格式。
在Master配置文件中有一段Pillar setting选项专门定义Pillar相关的一些参数:
#pillar_roots: # base: # - /srv/pillar
Pillar_roots目录可以按需修改为自己定义的工作目录,我们首先去pillar工作目录新建top.sls文件然后引用两个sls文件:
[root@salt-master-1 ~]# cat /srv/pillar/top.sls base: # 指定环境 '*': # Target - packages # 引用packages.sls 或者 packages/init.sls - services # 引用services.sls 或者 services/init.sls [root@salt-master-1 ~]# cat /srv/pillar/packages.sls zabbix: package-name: zabbix20 version: 2.0.16-1 [root@salt-master-1 ~]# cat /srv/pillar/services.sls zabbix: port: 10050 user: admin
Pillar相关的一些模块用法:
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_functions pillar salt-minion-1: - pillar.data - pillar.ext - pillar.get - pillar.item - pillar.items - pillar.raw #查看定义的pillar [root@salt-master-1 ~]# salt 'salt-minion-1' pillar.item zabbix salt-minion-1: ---------- zabbix: ---------- package-name: zabbix20 port: 10050 user: admin version: 2.0.16-1
SaltStack也支持从外部读取pillar数据。我们可以把pillar数据保存在数据库或者存储服务器上。
五、针对管理对象
Module是我们日常使用SaltStack接触最多的一个组件,用于管理对象操作的,这也是SaltStack通过push的方式进行管理的入口,比如我们日常简单的执行命令、查看安装情况、查看服务运行情况等工作都是通过SaltStack Module来实现的。默认安装好Master和Minion包之后,系统上会安装很多Module,大家可以通过以下命令查看支持的所有Module列表。
1.查看Minion支持的所有module列表:
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_modules salt-minion-1: - acl - aliases - alternatives - archive - artifactory - at - augeas - blockdev - btrfs - buildout - cloud - cmd - composer - config - container_resource - cp - cron - daemontools - data - defaults - devmap - dig - disk - django - dnsmasq - dnsutil - drbd - elasticsearch - environ - etcd - event - extfs - file - firewalld - gem - genesis - gnome - grains - group - hashutil - hg - hipchat - hosts - http - img - incron - ini - introspect - ip - iptables - jboss7 - jboss7_cli - key - keyboard - kmod - locale - locate - logrotate - lowpkg - lvm - match - mine - modjk - mount - network - openstack_config - pagerduty - partition - pillar - pip - pkg - pkg_resource - postfix - publish - pyenv - quota - random - random_org - rbenv - ret - rsync - runit - rvm - s3 - saltutil - schedule - scsi - sdb - seed - serverdensity_device - service - shadow - slack - smtp - sqlite3 - ssh - state - status - supervisord - sys - sysctl - syslog_ng - system - test - timezone - user - vbox_guest - virtualenv - xfs
2.查看指定module的所有function
#查看cmd module的所有functions命令 [root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_functions cmd salt-minion-1: - cmd.exec_code - cmd.exec_code_all - cmd.has_exec - cmd.retcode - cmd.run - cmd.run_all - cmd.run_chroot - cmd.run_stderr - cmd.run_stdout - cmd.script - cmd.script_retcode - cmd.shell - cmd.shells - cmd.tty - cmd.which - cmd.which_bin #查看cmd module的详细用法与例子的命令如下: [root@salt-master-1 ~]# salt 'salt-minion-1' sys.doc cmd