zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    dubbo-Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
    sqlmap基本命令
    Read-Only Tables 只读表
    Oracle Set操作
    OGG-00664
    Oracle 附加日志(supplemental log)
    Oracle 数字转为字符串 to_char()
    Oracle单引号转义符
    OGG开启DDL,约束信息和索引信息会同步过去吗
    OGG-01161
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7465507.html
Copyright © 2011-2022 走看看