saltstack详解
saltstack简介
Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高;
Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器。目前Salt-cloud项目也已经合并到Saltstack主项目里,Saltstack已经支持Docker相关模块,在友好地支持各大云平台之后,配合Saltstack的Mine实现各云平台业务自动扩展。
saltstack的核心特点:
使用命令发送到远程系统是并行的而不是串行的
使用安全加密的协议
使用最小最快的网络载荷 提供简单的编程接口,设备轻量级
SaltStack作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行
什么是zmq消息队列?
引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。
与其他自动化管理工具对比
服务端口
- 4505对应的是ZMQ的PUB system,用来发送消息
- 4506对应的是REP system,是来接受消息的。
- salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制;
- 如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
salt的安装与部署
实验说明:
server | 角色 | ip |
---|---|---|
server1 | master | 172.25.3.1 |
server2 | minion | 172.25.3.2 |
server3 | minion | 172.25.3.3 |
在server1
(1)搭建salt yum源
vim /etc/yum.repos.d/salt.repo
[salt]
name=salt
baseurl=http://repo.saltstack.com/yum/redhat/7.3/x86_64/2019.2/
gpgcheck=0
(2)下载salt-master
[root@server1 yum.repos.d]# yum install -y salt-master
为了方便查看salt节点部署,下载lsof
[root@server1 yum.repos.d]# yum install -y lsof
[root@server1 yum.repos.d]# systemctl start salt-master ##启动salt-master服务
[root@server1 yum.repos.d]# lsof -i :4505 ##4505服务端口信息
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 2379 root 15u IPv4 25380 0t0 TCP *:4505 (LISTEN)
[root@server1 yum.repos.d]# lsof -i :4506 ##4506服务端口信息
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 2386 root 23u IPv4 25428 0t0 TCP *:4506 (LISTEN)
查看salt节点授权信息
[root@server1 yum.repos.d]# salt-key -L ##salt授权信息,此时没有可授权主机,也无授权信息
Accepted Keys: ##允许授权主机
Denied Keys: ##授权失败主机
Unaccepted Keys: ##未授权主机
Rejected Keys: ##拒绝授权主机
在server2 (server3设置相同)
(1)与server1相同,搭建salt yum源
vim /etc/yum.repos.d/salt.repo
[salt]
name=salt
baseurl=http://repo.saltstack.com/yum/redhat/7.3/x86_64/2019.2/
gpgcheck=0
(2)下载salt-minion
[root@server2 yum.repos.d]# yum install -y salt-minion
(3)配置客户端minion
[root@server2 yum.repos.d]# vi /etc/salt/minion
16 master: 172.25.3.1 ##salt-master为 172.25.3.1
[root@server2 yum.repos.d]# systemctl start salt-minion ##启动salt-minion服务
授权处理
授权命令salt-key 常用参数
参数 | 作用 |
---|---|
-L | 查看授权列表 |
-A | 对所有主机授权 |
-a | 指定主机授权 |
此时再次查看master端授权信息列,可以看到已有可授权主机出现
[root@server1 yum.repos.d]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server2
server3
Rejected Keys:
对salt-minion端授权
[root@server1 yum.repos.d]# salt-key -A
授权成功
salt连通测试:
利用test.ping (test模块下的ping方法)测试连通性
[root@server1 yum.repos.d]# salt server? test.ping ##表示测试server所有主机
salt配置路径
主配置文件存放路径
- (1)master端:
[root@server1 srv]# cd /etc/salt/
[root@server1 salt]# ls
cloud cloud.profiles.d minion proxy
cloud.conf.d cloud.providers.d minion.d proxy.d
cloud.deploy.d master minion_id roster
cloud.maps.d master.d pki
[root@server1 salt]# vim master ##master主配置文件
需要注意的是:当我们修改主机名后需要将minion_id 删除后重启服务,否则可能会发生错误
- (2)minion端:
/etc/salt/minion
服务路径
创建base目录 以/src/salt为根 (该路径不存在,需要自行建立)
[root@server1 salt]# mkdir -p /srv/salt
数据存放
master端:
master端的密码数据以及minion端信息数据都存放在目录/etc/salt/pki下
minion端:
sls任务执行过程:
是salt-master端在推送sls文件时,是直接将sls任务下发至minion端,也就是说master端通过命令下放的sls任务文件在minion端也一定存在;都存放在 /var/cache/salt目录之下
.sls文件语法
(1).sls文件本质上是python嵌套字典(键值对),由salt-master以广播的形式传递给salt-minion,通过sls文件告知使用哪个模块的哪个函数,参数有哪些,在salt-minion一侧进行函数调用
(2)冒号’:’ 用来分隔键和值, 冒号:与后面的单词如果在一行,一定要有一个空格, 一个单词后面是否有冒号:取决于这个单词是否是key, 后面是否有值或者是嵌套的内容
(3)短横杠 - 表示这项是个列表项, 短横杠与后面的单词有一个空格
(4)缩进: 本层与下一层要有缩进, 缩进不能用tab, 一般是两个空格. 相同的缩进表示相同的层级
saltstack任务简单示例
- 以apache服务的部署为例
[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# mkdir apache ##创建任务角色
[root@server1 salt]# cd apache/
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# vim apache.sls ##编写.sls任务
apache-install: ##唯一性声明
pkg.installed: ##调用模块
- pkgs:
- httpd-tools
- httpd
file.managed: ##配置文件修改
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
service.running:
- name: httpd
- reload: true
- watch: ##检测这项任务是否发生改变 发生改变reload服务
- file: apache-install
[root@server1 apache]# mkdir files
root@server1 apache]# ls
apache.sls files
[root@server1 apache]# cd files/
[root@server1 files]# ls
httpd.conf
或者
[root@server1 apache]# vim apache.sls
apache-install: ##唯一性声明
httpd:
pkg.installed ##调用模块
saltstack中的sls写法比较灵活,两种方式都是可以的
执行推送:
[root@server1 apache]# salt server3 state.sls apache.apache
或者写顶级sls文件进行全局推送
[root@server1 salt]# vi top.sls
base:
'server3':
- apache.apache
[root@server1 apache]# salt '*' state.highstate