SaltStack 使用总结

SaltStack是一个开源的、新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维管理系统进行集成。相对于出道比较早的Puppet,SaltStack先天的优势就是简单、易用,可以非常快速的在团队中推广和使用,而且运行多平台。

SaltStack目前拥有四大主要功能

 

  • 远程执行:就是在管理节点上实现在上百台、上千台机器上同时执行一个命令。
  • 配置管理:也可以称之为状态管理,你可以描述一个状态。例如,某台机器要安装Nginx软件包、Nginx必须是启动的状态、Nginx有一个配置文件(内容和某个地方的一样)。你用一种描述语法描述出来后交给SaltStack,SaltStack就可以帮你实现,而不用你手动进行Nginx软件包的安装、配置文件的修改、启动等。
  • 云管理:SaltStack有一个组件叫作salt-cloud,它可以帮你自动化的进行云主机的创建和管理,支持很多公有云或私有云,例如AWS、阿里云、HP云、OpenStack、CloudStack等。
  • 事件驱动:事件驱动基础设施是SaltStack最强大也是最神秘的功能,前面的远程执行和配置管理是最基础的的,事件驱动是指SaltStack在日常运行中可以产生和捕捉事件,并根据捕捉到的事件触发对应的操作。

SaltStack的四种运行方式

  • Local:在本地运行或者说单台使用SaltStack
  • Minion/Master: 传统的客户端/服务器端(C/S)架构
  • Syndic: 使用代理实现架构扩展,用于管理更多的节点
  • Salt SSH: 无须安装客户端,直接通过SSH通信

目标机器匹配方法

SaltStack有以下几种方式来选择目标机器,灵活而又强大。大的来讲分为两大类:

1. 基于Minion ID

Minion ID是客户端(minion)的唯一标识符。可以在minion配置文件里面使用ID选项进行配置,如果不指定,其默认是主机的FQDN名。Minion ID是不能变动的,因为在进行key认证的时候,生成的文件名是以Minion ID命名的。如果Minion发生变动,就需要使用salt-key -d删除老的Minion ID,然后重新加入新的Minion ID。

  • Globbing(通配符)
  • regex(正则表达式)
  • list(列表)

2. 不基于Minion ID

  • 子网/IP地址
  • Grains
  • Grains PCRE
  • Pillar
  • Compound matchers(复合匹配)
  • Node groups(节点组)
  • Batching execution(批处理执行)

演示

指定Minion ID是最直接的选择目标的方法

查看所有minion节点

[root@salt ~]# salt-key  -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
128.docker.itnotebooks.com
Rejected Keys:

授权minion节点

可以修改/etc/salt/master的配置auto_accept:True自动认证

[root@salt ~]# salt-key -a 128.docker.itnotebooks.com
The following keys are going to be accepted:
Unaccepted Keys:
128.docker.itnotebooks.com
Proceed? [n/Y] y
Key for minion 128.docker.itnotebooks.com accepted.
  • salt-key -L: 显示已经或未认证的minion节点,Accepted Keys为已认证清单
  • salt-key -D: 删除所有Minion节点的证书
  • salt-key -d id: 删除单个minion节点的证书
  • salt-key -A: 接受所有minion节点的请求
  • salt-key -a id: 接受单个minion节点的请求

Globbing是指在Minion ID的基础上,通过通配符来定位Minion。SaltStack默认使用Shell风格通配符(如“” “?” “[]”)来匹配Minion ID。不过需要注意的是,使用salt命令时必须将’’放在单引号中,或是用’\’转义,用来避免shell解析。

匹配所有itnotebooks.com域的所有minion

[root@salt ~]# salt '*.itnotebooks.com' test.ping

匹配docker后面单个任意字符的Minion

[root@salt ~]# salt 'docker?.itnotebooks.com' test.ping

匹配docker节点1到节点3的Minion

[root@salt ~]# salt 'docker[1-3].itnotebooks.com' test.ping

匹配docker不是节点1和节点3的Minion

[root@salt ~]# salt 'docker[!13].itnotebooks.com' test.ping

list和直接Minion ID都是最基本的模式,可以列出每一个Minion ID来指定多个目标机器,使用选项’-L’

 

[root@salt ~]# salt -L 'docker1.itnotebooks.com,docker2.itnotebooks.com' test.ping

Salt可以使用Perl风格的正则表达式来匹配Minion ID,使用选项-E

[root@salt ~]# salt -E 'linux-(node1|node2)*' test.ping

规范的Minion ID可以很好的反映出该服务器运行的相关服务及所在位置

redis-node1-redis03-idc04-soa.itnotebooks.com
  • redis-node1:运行的服务是Redis,这是第一个节点
  • redis03:说明这个redis是Redis集群编号03里面的节点
  • idc04:这台服务器运行在编号04的IDC机房中
  • soa:这台服务器是给SOA服务使用的
  • itnotebooks.com:运行的服务器是itnotebooks.com业务

也可以使用IP地址或CIDR子网来指定目标,目前仅支持IPv4的地址

[root@salt ~]# salt -S '192.168.18.33' test.ping
[root@salt ~]# salt -S '192.168.18.0/24' test.ping

也可以使用Grains对Trageting进行匹配,使用选项’-G’

匹配所有CentOS系统的Minion

[root@salt ~]# salt -G 'os:CentOS' test.ping

通过Grain匹配非常灵活,如果你想进行更复杂的基于Grains的匹配,SaltStack提供了Grain PCRE,可以在Grains的基础上使用正则表达式

[root@salt ~]# salt --grain-pcre 'os_family:Red(Hat|Flag)' test.ping

Pillar的数据可以用来定位Minion,为定位Minions提供了灵活性和终极控制

[root@salt ~]# salt -I 'apache:httpd' test.ping

Compound matchers(混合匹配)可以使用布尔操作符连接多个目标条件。混合匹配可以用前面讨论的多种方式实现精确的匹配。混合配匹配默认使用Globbing,如果要使用其它匹配方式,需要加上类型前缀字母如下表所示。

SaltStack 使用总结_第1张图片

复合匹配中也可以使用and、or、not操作符,例如要匹配主机名以及webserv开始且运行Debain系统的Minion,还能匹配主机名满足正则表达式web-dc1-srv.*的Minion

[root@salt ~]# salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
  • G表示用shell通配符匹配Grains
  • E表示用正则表达式匹配Minion ID

需要注意的是not不能用于第一个条件,需要用时可以像下面这样写:

[root@salt ~]# salt -C '* and not G@kernel:Darwin' test.ping

Node group是在Master中nodegroup用复合条件字义的一组Minion

[root@salt ~]# vim /etc/salt/master
nodegroups:
  group1: '[email protected],linux-node2.itnotebooks.com'
[root@salt ~]# systemctl restart salt-master
[root@salt ~]# salt -N group1 test.ping
linux-node2.itnotebooks.com
    True
linux-node1.itnotebooks.com
    True

远程执行命令-查看内存使用

[root@salt ~]# salt 'linux-node1.itnotebooks.com' cmd.run 'free -m'
              total        used        free      shared  buff/cache   available
Mem:           1838         749         119           0         969         887
Swap:             0           0           0

远程执行命令-查看操作系统类型

[root@salt ~]# salt 'linux-node1.itnotebooks.com' grains.item osfullname
linux-node1.itnotebooks.com:
  osfullname: CentOS

远程执行命令-查看指定发行版本号为6.4的主机的python版本

[root@salt ~]# salt -G 'osrelease:6.4' cmd.run 'python -V'
linux-node1.itnotebooks.com:
  Python 2.6.6

远程执行命令-解压文件

[root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gunzip /tmp/jdk-8.1.0.gz

远程执行命令-压缩文件

[root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gzip /tmp/test.txt

除了上面所提到的外,其它类似的模块还有很多很多
如cp、cron、file、iptables、network、dnsuti、service、pkg等等,详细的自己用过就知道了,当然你也可以在cmd.run里面去完成这一切

你可能感兴趣的:(saltstack)