入职新公司后,需要管理近千台服务器,公司使用saltstack进行管理,出于工作需求,结合自身实施经验,整理了一下最近的一些经验。
学习参考资源链接
S alt官网、学习salt配置、命令、模块讲解
http://docs.saltstack.cn/topics/configuration/index.html
salt现官网仓库源,原 https://repo.salt.com已不可用,salt被broadcom收购
https://packages.broadcom.com/
S alt -3007.5 安装部署
本节内容适合Linux系统saltstack安装部署;
1 了解salt stack
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 ******S**** ****alt命令练习****** 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模块有哪些函数方法可以用。