运维自动化之Saltstack使用详解
概要
saltstack是基于Python开发的C/S架构的一款批量管理工具,底层采用动态的连接总线(ZeroMQ消息队列pub/sub方式通信),使用ssl证书签发的方式进行认证管理,使其可以用于编配, 远程执行, 配置管理等等。部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。号称世界上最快的消息队列ZeroMQ使得saltstack非常快速的管理大量服务器,采用RSA Key方式确认身份,传输采用AES加密,安全性也非常有保障。
Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。
SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。有如下特性:
(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。
Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
核心功能
1、使命令发送到远程系统是并行的而不是串行的
2、使用安全加密的协议
3、使用最小最快的网络载荷
4、提供简单的编程接口
架构
saltstack是基于C/S服务模式,在该架构中,服务器端叫做Master,客户端叫做Minion。传统的C/S模式我们这样理解,客户端发送请求给服务器端,服务器端接受到来自客户端的请求并处理完成后再返回客户端。 在saltstack架构中,不仅有传统的C/S服务模式,而且有消息队列中的发布与订阅(pub/sub)服务模式。目前我们一般用其C/S架构做批量管理。
1) Master:控制中心,salt命令运行和资源状态管理
2) Minion : 需要管理的客户端机器,会主动去连接Mater端,并从Master端得到资源状态
3) 信息,同步资源管理信息
4) States:配置管理的指令集
5) Modules:在命令行中和配置文件中使用的指令模块,可以在命令行中运行
6) Grains:minion端的变量,静态的
7) Pillar:minion端的变量,动态的比较私密的变量,可以通过配置文件实现同步minions定义
8) highstate:为minion端下发永久添加状态,从sls配置文件读取.即同步状态配置
9) salt_schedule:会自动保持客户端配置
Saltstack安装
安装方式有四种,下面通过一个案例简单介绍在CentOS6.8上进行SaltStack部署。
(1) yum方式安装(采用saltstack源)推荐这种方式,简单粗暴。注意没有配置saltstack源的,请先配置saltstack源。
Version 7:
rpm --importhttps://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
Version 6:
rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub
Save the following file to /etc/yum.repos.d/saltstack.repo:
Version 7 and 6:
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
安装好saltstack源后,用yum 命令来检查是否添加到源列表。
yum repolist
Master端安装:
yum -y install salt-master
Minon端安装:
yum -y install salt-minion
配置并启动Saltstack
Salt 的配置非常简单。默认的 master 配置就可以在大多数情况下运行。仅仅需要更改的是 minion ,在 minion 配置文件中设置 master 的地址。
The configuration fileswill be installed to /etc/salt and are named after the respective components,/etc/salt/master, and /etc/salt/minion.
MASTER配置
默认Salt master监听所有网卡接口(0.0.0.0)的4505和4506端口. 如果需要指定监听IP, 通过 /etc/salt/master配置文件中的"interface"指令进行如下修改:
- #interface: 0.0.0.0
+ interface: 10.0.0.1 #此处是server端监听的地址。
auto_accept: True #此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。
MINION配置
尽管Salt Minion有许多配置选项,但配置Minion还是非常简单的. 默认的配置Minion会尝试连接DNS名为"salt"的master,如果minion解析到的地址正确,就无需再做配置.
如果DNS名为"salt"并不能解析到本地正确的Master地址,需要通过如下方法修改 /etc/salt/minion 配置文件中的"master"指令:
- #master: salt
+ master: 10.0.0.1 #这里改成你的master服务器地址
id: web01 #建议这里修改成主机名,便于master端分辨
#在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate
schedule:
highstate:
function: state.highstate
minutes: 5
更新完配置后,需要重启Salt minion以使配置生效.
运行Saltstack
1. 前台启动master(如果要以daemon方式启动,请指定 -d参数):salt-master
2. 前台启动minion(如果要以daemon方式启动,请指定 -d参数):salt-minion
运行有问题?
排除 Salt 故障最简单的方法是在前台运行 master 和 minion,同时把 log level 设为``debug``
salt-master --log-level=debug
以普通(非root)用户运行:
想要使用其他用户身份运行Salt,参见:conf_master:`user`参数在master配置文件中。
Additionally, ownership, and permissions need to be set suchthat the desired user can read from and write to the following directories (andtheir subdirectories, where applicable):
/etc/salt
/var/cache/salt
/var/log/salt
/var/run/salt
更多关于如何使用非特权用户运行salt的信息可以在 这里 找到。
salt-key证书管理:
master端证书存放路径:/etc/salt/pki/master/minions
注意:如果细心的话,你会发现小写字母针对的单一对象,大写都是针对全体。比如 -l显示单一key,-L显示所有key;-a 接受指定key,而-A 就是接受所有key。
saltstack认证原理:
1)、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。
2)、master在接收到minion的publickey后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
salt-key -L #查询所有接收到的证书 salt-key -a <证书名> #接收单个证书 salt-key -A #接受所有证书 salt-key -d <证书名> #删除单个证书 salt-key -D #删除所有证书 |
Salt在Master和Minion之间的通讯采用AES加密. 这就确保了发送给minions的命令不会被篡改, Master和Minion之间的通讯认证通过信任的已接受的key进行管理.
在发送给Minion之前,需要确保minion的key已经被Master所接受. 运行 ``salt-key``命令将列出Salt Master已知的所有keys.
[root@master ~]# salt-key -L
Unaccepted Keys:
alpha
bravo
charlie
delta
Accepted Keys:
[root@master ~]# salt-key -A -y
[root@master ~]# salt-key -L
Unaccepted Keys:
Accepted Keys:
alpha
bravo
charlie
delta
发送test.ping指令
[root@moban ~]# salt '*' test.ping
moban2:
True
moban1:
True
限于篇幅太长,请大家移步这里进行下载查看,谢谢!
下载地址:http://down.51cto.com/data/2306388