saltstack安装部署
入职新公司后,需要管理近千台服务器,公司使用saltstack进行管理,出于工作需求,结合自身实施经验,整理了一下最近的一些经验。
学习参考资源链接
Salt官网、学习salt配置、命令、模块讲解
http://docs.saltstack.cn/topics/configuration/index.html
salt现官网仓库源,原https://repo.salt.com已不可用,salt被broadcom收购
https://packages.broadcom.com/
Salt-3007.5安装部署
本节内容适合Linux系统saltstack安装部署;
1 了解saltstack
saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。ZeroMQ使SaltStack能快速在成千上万台机器上进行各种操作,而且采用RSA Key方式确认身份,传输采用AES加密,使传输的安全性得到保障。
saltstack服务器端叫做Master,客户端叫作Minion,并且有消息队列中的发布与订阅(pub/sub)服务模式,minion与master之间通过ZeroMQ消息队列通信。Master和Minion端都以守护进程的模式运行,一直监听配置文件里面定义的ret_port也就是4506端口(接收minion请求)和publish_port也就是4505端口(ZMQ的发布消息)。当minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。
下图是简单的saltstack架构
2 安装python
saltstack是基于python开发的C/S架构的配置管理工具,安装前需要先给各个服务器安装python,
安装命令: yum install -y python3,
安装完成检查当前python版本: python --version;
centos7.8自带python安装包,如果系统没有python安装包,可以到官网下载,官网地址 https://www.python.org/downloads
3 下载导入公钥
salt仓库源已经发生迁移,从 https://repo.salt.com 迁移到 JFrog;
点击artifactory,选择saltproject-rpm,下载公钥,考虑到网络限制,建议下载到本地,再上传到待安装服务器;
执行公钥导入命令 gpg --import SaltProject.gpg.pub
4 安装salt
需要先安装salt,再安装salt-master,否则会提需要安装salt;
yum install -y salt-3007.5-0.x86_64.rpm
5 下载安装salt-master
从官网下载salt-master安装包,
安装命令 yum install -y salt-master-3007.5-0.x86_64.rpm
安装完成检查当前salt-master版本,命令 salt-master --version
6 下载安装salt-syndic
从官网下载salt-syndic安装包
安装命令 yum install –y salt-syndic-3007.5-0.x86_64.rpm
安装完成检查当前salt-syndic版本,命令 salt-syndic --version
7 配置salt-master,salt-syndic
master配置参考官网配置salt-master,
链接地址 http://docs.saltstack.cn/ref/configuration/master.html
我在安装的时候把master和syndic安装在同一台机器,master和syndic的master配置文件路径相同: /etc/salt/master
配置如下:
user: root
cachedir: /var/cache/salt/master
keep_jobs: 24
timeout: 60
color: false
max_open_files: 100000
worker_threads: 20
auto_accept: true
file_recv: true
file_roots:
base:
- /home/salt
pillar_roots:
base:
- /etc/salt/pillar
pillar_opts: true
order_masters: true
syndic_master: 192.168.183.135 #注释 syndic连接的master
syndic_master_port: 4506
启动salt-master,命令:systemctl start salt-master
启动salt-syndic,命令:systemctl start salt-syndic
8 下载安装minion
从官网下载salt-minion安装包
安装minion也需要先安装salt,再安装minion,命令如下:
yum install -y salt-3007.5-0.x86_64.rpm
yum install -y salt-minion-3007.5-0.x86_64.rpm
安装完成检查当前salt-minion版本,命令:salt-minion –version
9 配置salt-minion
minion配置参考官网配置salt-minion,链接地址 http://docs.saltstack.cn/ref/configuration/minion.html
这个地方有个坑需要注意:虚拟机默认安装的时候,主机名是localhost,如果在minion服务启动后,再去修改主机名,master端那边收到的证书请求,还是旧主机名的,这个是因为启动minion服务后,会产生/etc/salt/minion_id ,而这个文件里面的内容不会因为主机名的改变、服务的重启、机器的重启而改变,所以如果主机名发送了变化,想让master端那里的证书认证名称也跟着发送变化的话,就要删除/etc/salt/minion_id文件或者清空/etc/salt/minion_id文件里面的内容,然后重启minion服务。
我在master上也部署了一个minion,两个minion配置如下
Master上的minion配置
[root@master salt]# cat minion | grep -e '^[^#]'
master: 192.168.183.135
id: 192.168.183.135 #注释 id填minion服务器IP
minion01上的minion配置
[root@minion01 salt]# cat minion | grep -e '^[^#]'
master: 192.168.183.135
id: 192.168.183.134 #注释 id填minion服务器IP
10 master上同步minion的key
minion配置完成后,需要在master上同步minion的key,
命令 salt-key –A
同步完成,/etc/salt/pki/master/minions下会有同步过的key,如果没有对应主机的key,minion和master不会建立连接。
启动minion服务,执行命令 service salt-minion start
或者 systemctl start salt-minion
11 测试验证
确认minion和master连接正常,
Master上执行命令 netstat -anp | grep 4506
Minion01上执行命令 netstat -anp | grep 4506
Master上执行命令 salt “*” test.ping
192.168.122.1不存在这台服务器,所以master没有收到返回消息
12 Salt命令练习
Salt –s “192.168.183.134” test.ping
Salt “192.168.183.134” cmd.run ‘yum install –y httpd’
test.ping和cmd.run 都是内置的用法,其实也就是python自带的模块功能,那么如何知道我们现在的salt可以使用哪些方法呢?
# salt '*' -d|grep :\'|more #就可以以列表的形式查看所有可以使用的内置方法。为啥要加过滤呢,因为方法下面还有对应的举例。
# salt 'agent1.salt' sys.list_functions #上面的方法还是比较粗糙,如果你已经知道了用法,可以用sys.list_functions将所有我们可以使用的函数列出来,当然就指定一个节点就可以了,指定'*'显示结果也是重复。
我现在已经把所有的可以用的模块的函数都查出来了,如果我只想看某个模块所拥有的函数方法呢?
# salt 'agent1.salt' sys.list_functions test #如我可以查看test模块有哪些函数方法可以用。