在开源的自动化运维工具中,从开发语言受众度、社区活跃度和市场认可度等维度来综合比较,Ansible和SaltStack基本成为大家二选一的标配,两者特性各有千秋,具体特性对比如下:
Ansible
-
基于python开发,易于二次开发
-
基于SSH协议传输数据, 标准SSH连接的时候比较耗费时间,响应速度要比saltstack慢
-
不需要安装agent(客户端),部署配置会简单一些
-
安全性能最好
-
支持服务器规模一般不超过200台
SaltStack
- 基于python开发,易于二次开发
- master和minion主机是通过ZeroMQ传输数据, ZeroMQ传输的速度会很快,响应速度要比Ansible快很多
- 一般需要安装agent(也可以不安装)
- 容易被攻击
- 支持服务器规模过千台
从开发语言、传输速度、部署便利性、安全性和支持节点规模等多维度综合比较,个人比较偏好SaltStack。原生的SaltStack可以满足日常的批量分发文件、批量执行命令等场景,但是有些定制化需求还是需要对SaltStack的源码进行二次开发。为了便于部署和升级定制化的SaltStack,我们需要对二次开发后的SaltStack进行RPM打包。本文不解释过多冗长的理论和概念,只分享经过个人实践的SaltStack RPM 打包流程。具体打包流程如下:
1. 搭建编译环境
[ ]
2. 上传任意一个 .spec 到 /root 目录
[root@openstack ~]# cd /root
[root@openstack ~]# ll
-rw-------. 1 root root 1265 Jan 28 2018 anaconda-ks.cfg
-rw-r--r--.1rootroot24062Jan282018openstack-glance.spec
3. 进入 /root 目录,执行命令
[root@openstack ~]# rpmbuild -ba openstack-glance.spec
会报以下错误,无需理会,此时会在/root目录下生产rpmbuild文件夹。
error:File/root/rpmbuild/SOURCES/python-keystone.tar.gz:Nosuchfileordirectory
4.下载包含源码的SaltStack RPM包salt-2018.3.2-1.el7.src.rpm(文件名包含src关键字),不要下载二进制的RPM包。
源地址:https://repo.saltstack.com/yum/redhat/7.4/x86_64/latest/SRPMS/
5. 解压 salt-2018.3.2-1.el7.src.rpm,如果要修改salt-2018.3.2.tar.gz源码,修改完后需要压缩包格式要和原来保持一致。
6. 上传截图中所有的文件到/root/rpmbuild/SOURCES
[root@openstack ~]# cd /root/rpmbuild/SOURCES/
[root@openstack SOURCES]# ll
total 12692
-rw-r--r--. 1 root root 377 Aug 7 02:54 README.fedora
-rw-r--r--. 1 root root 12847286 Aug 7 02:54 salt-2018.3.2.tar.gz
-rw-r--r--. 1 root root 3636 Aug 7 02:54 salt-api
-rw-r--r--. 1 root root 320 Aug 7 02:54 salt-api.service
-rw-r--r--. 1 root root 11437 Aug 7 02:54 salt.bash
-rw-r--r--. 1 root root 2078 Aug 7 02:54 salt-call.fish
-rw-r--r--. 1 root root 18450 Aug 7 02:54 salt_common.fish
-rw-r--r--. 1 root root 227 Aug 7 02:54 salt-common.logrotate
-rw-r--r--. 1 root root 208 Aug 7 02:54 salt-cp.fish
-rw-r--r--. 1 root root 3949 Aug 7 02:54 salt.fish
-rw-r--r--. 1 root root 3914 Aug 7 02:54 salt-key.fish
-rw-r--r--. 1 root root 3307 Aug 7 02:54 salt-master
-rw-r--r--. 1 root root 208 Aug 7 02:54 salt-master.fish
-rw-r--r--. 1 root root 321 Aug 7 02:54 salt-master.service
-rw-r--r--. 1 root root 7829 Aug 7 02:54 salt-minion
-rw-r--r--. 1 root root 208 Aug 7 02:54 salt-minion.fish
-rw-r--r--. 1 root root 349 Aug 7 02:54 salt-minion.service
-rw-r--r--. 1 root root 332 Aug 7 02:54 salt-proxy@.service
-rw-r--r--. 1 root root 205 Aug 7 02:54 salt-run.fish
-rw-r--r--. 1 root root 32388 Aug 7 02:54 salt.spec
-rw-r--r--. 1 root root 3239 Aug 7 02:54 salt-syndic
-rw-r--r--. 1 root root 201 Aug 7 02:54 salt-syndic.fish
-rw-r--r--. 1 root root 319 Aug 7 02:54 salt-syndic.service
7. 上传解压包中的 salt.spec 到 /root/rpmbuild/SPECS
[ ]
/root/rpmbuild/SPECS
[ ]
-rw-r--r--.1rootroot32388Aug702:54salt.spec
8. 进入 /root/rpmbuild/SPECS 目录,执行打包命令
[ ]
9. 进入/root/rpmbuild/RPMS/noarch 目录,查看打好的二进制RPM包
[root@openstack noarch]# pwd
/root/rpmbuild/RPMS/noarch
[root@openstack noarch]# ll
-rw-r--r--. 1 root root 9296184 Aug 7 03:08 salt-2018.3.2-1.el7.noarch.rpm
-rw-r--r--. 1 root root 17100 Aug 7 03:08 salt-api-2018.3.2-1.el7.noarch.rpm
-rw-r--r--. 1 root root 20208 Aug 7 03:08 salt-cloud-2018.3.2-1.el7.noarch.rpm
-rw-r--r--. 1 root root 2412616 Aug 7 03:08 salt-master-2018.3.2-1.el7.noarch.rpm
-rw-r--r--. 1 root root 36408 Aug 7 03:08 salt-minion-2018.3.2-1.el7.noarch.rpm
-rw-r--r--. 1 root root 18748 Aug 7 03:08 salt-ssh-2018.3.2-1.el7.noarch.rpm
-rw-r--r--.1rootroot17268Aug703:08salt-syndic-2018.3.2-1.el7.noarch.rpm
按照上述步骤“傻瓜式”的操作下去,即可完成自己定制的RPM包,然后拷贝定制的SaltStack RPM包到公司内部的本地源里,方便后续部署和升级。