设为首页 收藏本站
查看: 1009|回复: 0

[经验分享] TARGETING MINIONS (minion标记与匹配)

[复制链接]

尚未签到

发表于 2017-11-21 22:42:26 | 显示全部楼层 |阅读模式
TARGETING MINIONS
  明确标记minion的角色,利用minion端的主机名或系统信息,被定义的特定角色组或是一个组合标记。
  譬如,指令一个minion执行重启apache服务的命令:
salt web1 apache.signal restart
类似于top里面的sls文件


DSC0000.gif DSC0001.gif


webserver.sls:
base:
   'web1':
     - 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变量组合的方式执行模块
  匹配的具体使用方法如下图:
DSC0002.png

  匹配条件复合的方式可以添加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
通配的方式:
示例:





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

REGULAR EXPRESSIONS
  正则表达式的方式:
  salt -E 'web1-(prod|devel)' test.ping
  sls文件中的使用示例:





base:
   'web1-(prod|devel)':
   - match: pcre
   - 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集群中





'172.16.0.0/12':
    - match: ipcidr
    - internal
View Code

COMPOUND MATCHERS
  复合条件匹配,参考上图


NODE GROUPS
  定义node组进行匹配
  默认目录在/etc/salt/master





nodegroups:
   group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
   group2: 'G@os:Debian and foo.domain.com'
   group3: 'G@os:Debian and N@group1'
   group4:
     - 'G@foo:bar'
     - 'or'
     - 'G@foo:baz'
   #在组合组里面and,or产生的是一种集合关系
View Code  使用示例:
  salt -N group1 test.ping





base:
   group1:
     - match: nodegroup
     - webserver
View Code

DEFINING NODEGROUPS AS LISTS OF MINION IDS
  使用示例:





nodegroups:
   group1: L@host1,host2,host3

nodegroups:
   group1:
     - host1
     - host2
     - host3
View Code
USING NODEGROUPS IN SLS FILES
  在sls文件(指的是state文件)中使用nodegroup分组信息进行匹配,nodegroup这个数据结构本身也属于pillar数据的一部分
  首先需要让minion端收到服务器端定义的pillar变量,所以在master端打开pillar_opts选项:
pillar_opts: True
  配置示例:





nodegroups:
   webserver: 'G@os:Debian and L@minion1,minion2'

{% if grains.id in salt['pillar.get']('master:nodegroups:webserver', [])
and grains.os in salt['pillar.get']('master:nodegroups:webserver', []) %}
...
{% 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409350-1-1.html 上篇帖子: 1. nginx扩展——ngx_lua 模块简介、安装 下篇帖子: cobbler-web 网络安装服务器套件 Cobbler(补鞋匠)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表