TARGETING MINIONS (minion标记与匹配)

TARGETING MINIONS

明确标记minion的角色,利用minion端的主机名或系统信息,被定义的特定角色组或是一个组合标记。

譬如,指令一个minion执行重启apache服务的命令:
salt web1 apache.signal restart
类似于top里面的sls文件

1 webserver.sls:
2 base:
3   'web1':
4     - webserver
View Code

匹配的方法可以是变量,正则表达式等


 

TARGETING WITH GRAINS

利用grains变量来标记minion

示例:
  salt -G 'os:Fedora' test.ping
  -G指以组的方式执行
  os:Fedora为minion端grains变量环境匹配

查看minion端的grains变量
  salt '*' grains.items


COMPOUND TARGETING

使用复合的方法标记minion

salt -C 'G@os:Debian and webser* or E@db.*' test.ping

使用salt --help查看salt命令选项的用法
-C 允许使用grains变量组合的方式执行模块

匹配的具体使用方法如下图:

匹配条件复合的方式可以添加and,or,not逻辑和优先的情况
示例:
  salt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.ping 

关于复合条件的使用方法参考链接:
https://docs.saltstack.com/en/2016.11/topics/targeting/compound.html#targeting-compound


NODE GROUP TARGETING

使用nidegroup进行分组

nodegroups:
  group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
  group2: 'G@os:Debian and foo.domain.com'
  group3: 'G@os:Debian and N@group1'
  #group3组可以包含group1定义的内容,让minion分类更简洁和灵活

###################################################################################################################################### 

ADVANCED TARGETING METHODS

更细致的了解minion匹配的方法

MATCHING THE MINION ID  

salt将minion ID作为minion的唯一标记,这个ID被用于和master生成公私钥,建立明确的关系,如果ID变化之后会被视为另一个minion并需要重新被认证。

GLOBBING
通配的方式:
示例:

1 salt '*' test.ping
2 salt 'web?.example.net' test.ping
3 salt 'web-[x-z]' test.ping
View Code

 

REGULAR EXPRESSIONS

正则表达式的方式:

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

sls文件中的使用示例:

1 base:
2   'web1-(prod|devel)':
3   - match: pcre
4   - webserver  
View Code

注意:无论是在命令行还是在sls文件中都需要指定执行匹配的方法,至于匹配的对象则可以包括id,grains,pillar等


TARGETING USING GRAINS

利用grains数据来匹配minion

示例:
  salt -G 'cpuarch:x86_64' grains.item num_cpus


TARGETING USING PILLAR

利用pillar变量的方式匹配minion,前提是minion端需要定义好pillar变量
  salt -I 'somekey:specialvalue' test.ping


SUBNET/IP ADDRESS MATCHING

利用IP地址或网络的方式进行匹配

  salt -S 192.168.40.20 test.ping
  salt -S 2001:db8::/64 test.ping

#注意,即使指定单个IP执行,消息也会被扩散到整个salt集群中

1 '172.16.0.0/12':
2    - match: ipcidr
3    - internal
View Code

COMPOUND MATCHERS

复合条件匹配,参考上图


NODE GROUPS

定义node组进行匹配

默认目录在/etc/salt/master

1 nodegroups:
2   group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
3   group2: 'G@os:Debian and foo.domain.com'
4   group3: 'G@os:Debian and N@group1'
5   group4:
6     - 'G@foo:bar'
7     - 'or'
8     - 'G@foo:baz'
9   #在组合组里面and,or产生的是一种集合关系
View Code

使用示例:
  salt -N group1 test.ping

1 base:
2   group1:
3     - match: nodegroup
4     - webserver
View Code

DEFINING NODEGROUPS AS LISTS OF MINION IDS

使用示例:

1 nodegroups:
2   group1: L@host1,host2,host3
3 
4 nodegroups:
5   group1:
6     - host1
7     - host2
8     - host3
View Code

USING NODEGROUPS IN SLS FILES

在sls文件(指的是state文件)中使用nodegroup分组信息进行匹配,nodegroup这个数据结构本身也属于pillar数据的一部分

首先需要让minion端收到服务器端定义的pillar变量,所以在master端打开pillar_opts选项:
pillar_opts: True

配置示例:

1 nodegroups:
2   webserver: 'G@os:Debian and L@minion1,minion2'
3 
4 {% if grains.id in salt['pillar.get']('master:nodegroups:webserver', [])
5 and grains.os in salt['pillar.get']('master:nodegroups:webserver', []) %}
6 ...
7 {% endif %}
View Code

解析:
  和以往的配置方式不一样的是,以前使用的是sls文件里面引入pillar环境变量,pillar变量在master端已经被处理好了,只剩下grains变量在minion端处理,而上面的示例则是在sls文件中将pillar变量放在minion端处理,里面包装的grains也在minion端被处理。

看点与槽点:
  使用上面示例的配置看似可以让配置变得更加灵活,但也会感觉有些困惑
  a)将master端的敏感数据开放到minion端是否合适
  b)这样的配置会被扩散到整个salt集群,如果nodegroup被清晰的定义为ID,就会减少不必要的匹配和额外的消息负担
  c)我觉得这样的配置方式适用于角色清晰,但是成员变动较为频繁的环境中,尤其在多环境优势比较明显,因为pillar变量在mminion端就是一个大字典。
  d)将部署环境设计成角色与任务分离,还是将任务与角色彻底融合的问题,我感觉这是一个分久必合合久必分的命题,还是根据实际情况进行综合考虑吧。


BATCH SIZE

分批次执行,支持百分比和绝对数量

示例如下:

  salt '*' -b 10 test.ping
  salt -G 'os:RedHat' --batch-size 25% apache.signal restart

执行逻辑是将整个任务分解成批次进行,完全理解为一批也不准确,确切的说应该是相当于一个任务池,一边出一边进,使用--batch-wait可以控制递补的自减间隔。


SECO RANGE

支持range的方式配置

步骤:
(1)master导入模块
    python -c 'import seco.range'
(2)配置master文件,需要重启生效
    range_server: my.range.server.com:80
(3)配置定义分组的yaml文件
    $ cat /etc/range/test.yaml
    CLUSTER: host1..100.test.com
    APPS:
       - frontend
    - backend
       - mysql
(4)使用示例
    salt --range %test:CLUSTER test.ping
    salt --range %test:APPS test.ping

 

posted @ 2017-09-02 00:01  孤独的海浪  阅读(238)  评论(0编辑  收藏  举报