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

[经验分享] SaltStack学习(二) 通过 salt 远程执行管理 minion

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-11-23 07:15:14 | 显示全部楼层 |阅读模式
  1  salt 远程执行命令的组成结构



# salt "*" test.ping
m01:
True
master:
True

## 查看 salt 命令的帮助信息
# salt -h
Usage: salt [options] '<target>' <function> [arguments]
  salt 远程执行命令由五部分组成
  第一部分: salt  命令本身
  第二部分: options  命令选项
  第三部分: target  目标minion,也就是要操作的目标 minion
  第四部分: function  远程执行的 salt函数
  第五部分: 远程执行函数的参数
  来一个例子:



# salt --summary "*" cmd.run "uptime"
m01:
22:45:22 up 54 min,  2 users,  load average: 0.00, 0.01, 0.03
master:
22:45:22 up 54 min,  2 users,  load average: 0.00, 0.01, 0.05

-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 2
# of Minions Returned: 2
# of Minions Did Not Return: 0
-------------------------------------------
  options  命令选项
  salt 命令的几个主要参数
  -v, --verbose Turn on command verbosity, display jid and active job queries
  开启命令的详细描述,详细描述运行命令后会发生什么
  --summary             Display summary information about a salt command
  显示一条 salt 命令的概要信息
  --out=OUTPUT, --output=OUTPUT  
                     Print the output from the 'salt' command using the
                     specified outputter. The builtins are 'key', 'yaml',
                     'overstatestage', 'newline_values_only', 'pprint',
                     'txt', 'raw', 'virt_query', 'compact', 'json',
                     'highstate', 'nested', 'quiet', 'no_return'.
  控制 salt 执行后输出结果的格式,可指定的格式有 'key', 'yaml','overstatestage', 'newline_values_only', 'pprint', 'txt', 'raw', 'virt_query', 'compact', 'json',  'highstate', 'nested', 'quiet', 'no_return'
  target  目标minion
  在实际环境中 salt 通常都是控制着成百上千的 minion,通过指定 target 可以灵活的定位所有的服务器并执行远程命令
  a  全局匹配
  和 linux 的通配符类似,
  ·   *    表示任意字符,包括空字符串
  ·   ?  表示一个字符,但不可以为空
  ·   []   表示字符集合,比如 [a-z] 表示任意一个小写字母
  示例如下:





## 向所有 minion 发送命令
# salt "*" test.ping
master:
True
m01:
True

## 向所有以01结尾的 minion 发送命令
# salt "*01" test.ping
m01:
True

## 想所有是三个字符并且以01结果的 minion 发送命令
# salt "?01" test.ping
m01:
True

## 想所有第一个字符是小写字母,第二三个字符是01的三字符组成的 minion 发送命令
# salt "[a-z]01" test.ping
m01:
True
  b 正则表达式匹配
  salt 使用了 python 的 re 模块来做正则表达式匹配,这里不对正则表达式进行介绍。
  简单的说就是使用正则表达式来描述 target,达到匹配指定minion 的效果。
  使用正则表达式需要指定-E 或者 --pcre选项
  示例如下



# salt -E "[mM]" test.ping
m01:
True
master:
True

# salt -E "[a-zA-z]+[0-9]+" test.ping
m01:
True
  c 列表匹配
  以主机id名列表的形式进行过滤,格式与Python的列表相似,即不同主机id名称使用逗号分隔,命令:



# salt -L "master,m01" test.ping
m01:
True
master:
True
  d 分组管理
  /etc/salt/master 配置文件中有如何内容,在这里我们可以配置分组
  # Node groups allow for logical groupings of minion nodes. A group consists of a group
# name and a compound target.
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
  目标服务器分组有以下七种方式,这七种方式的标示符分别为:


    • G -- 针对 Grains 做单个匹配,例如:G@os:Ubuntu
    • E -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
    • P -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
    • L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
    • I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobar
    • S -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
    • R -- 针对客户端范围做匹配,例如: R@%foo.bar




## 在 /etc/salt/master 配置文件中 设置如下内容:
nodegroups:
group1: 'L@master,m01'

## 执行如下命令
# salt -N group1 test.ping
m01:
True
master:
True
  e  grain 和 pillar 匹配 (后面再讲)
  grain 和 pillar 是 salt 独有的两个概念,两者都是以key  value 形式存储的数据。
  grain 是有 minion 返回给 master 的数据,pillar 数据则是存储在 master 上的。
  每个 minion 只能看到自己的 pillar,grain 可以看做是 host 的 metadata,例如 CPU 数量
  pillars 则是主机所需要的数据,例如数据库密码。
  简单的说就是: 一个 minion 可以告诉 master 她的 grain 数据,而 minion 则需要从 master 索要 pillar 数据。
  f  复合匹配
  将之前各种匹配方式混合使用的匹配方式



## 使用grains属性来匹配
[iyunv@hadoop0 pillar]# salt -C 'G@os:Ubuntu' test.ping
uadoop1:
True
## 使用Minion ID的正则表达式来匹配   
[iyunv@hadoop0 pillar]# salt -C 'E@uadoop\d+' test.ping         
uadoop2:
True
uadoop3:
True
uadoop1:
True
## 使用grains属性的正则表达式来匹配   
[iyunv@hadoop0 pillar]# salt -C 'P@os:(RedHat|Ubuntu|CentOS)' test.ping            
uadoop2:
True
uadoop3:
True
uadoop1:
True
## 使用Minion ID来匹配   
[iyunv@hadoop0 pillar]# salt -C 'L@uadoop2,uadoop3' test.ping                           
uadoop2:
True
uadoop3:
True
## 使用pillar定义的属性来匹配   
[iyunv@hadoop0 pillar]# salt -C 'I@users:foway:1200' test.ping
uadoop2:
True
uadoop1:
True
uadoop3:
True
## 使用IP段匹配   
[iyunv@hadoop0 pillar]# salt -C 'S@192.168.0.0/24' test.ping                  
uadoop3:
True
uadoop2:
True
uadoop1:
True

运维网声明 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-409725-1-1.html 上篇帖子: 阿里云oss数据迁移到腾讯云cos 方法二(强烈推荐) 下篇帖子: centos7下安装docker(8.1运行容器)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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