TARGETING MINIONS (minion标记与匹配)

Posted 孤独的海浪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于TARGETING MINIONS (minion标记与匹配)的主要内容,如果未能解决你的问题,请参考以下文章

#0013.「Codeforces」1354F Summoning Minions

Codeforces 1354F. Summoning Minions 题解

saltstack-cve_2020_11651(4506端口)

saltstack-cve_2020_11651(4506端口)

SaltStack实战之远程执行-Targeting

saltstack常用命令