SaltStack学习(二) 通过 salt 远程执行管理 minion
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属性来匹配 [root@hadoop0 pillar]# salt -C 'G@os:Ubuntu' test.ping uadoop1: True ## 使用Minion ID的正则表达式来匹配 [root@hadoop0 pillar]# salt -C 'E@uadoop\d+' test.ping uadoop2: True uadoop3: True uadoop1: True ## 使用grains属性的正则表达式来匹配 [root@hadoop0 pillar]# salt -C 'P@os:(RedHat|Ubuntu|CentOS)' test.ping uadoop2: True uadoop3: True uadoop1: True ## 使用Minion ID来匹配 [root@hadoop0 pillar]# salt -C 'L@uadoop2,uadoop3' test.ping uadoop2: True uadoop3: True ## 使用pillar定义的属性来匹配 [root@hadoop0 pillar]# salt -C 'I@users:foway:1200' test.ping uadoop2: True uadoop1: True uadoop3: True ## 使用IP段匹配 [root@hadoop0 pillar]# salt -C 'S@192.168.0.0/24' test.ping uadoop3: True uadoop2: True uadoop1: True
浙公网安备 33010602011771号