Salt Minion需要python2.x(python2.x于2020年1日退役)或python3.x和一组模块,这些模块在操作系统附带的默认python上不可用。
WHY?
通过在Python2.x venv(虚拟环境)中运行Salt Minion,这个venv中安装的所有包都不会干扰环境外的包,而只包含在这个虚拟环境中。简单地说,这个venv中的python sitepackages不会和系统内python sitepackages互相干涉。
例如我们的生产环境存在一些python构建的业务软件,为了避免业务软件的python依赖和salt-minion的python依赖互相冲突导致其中任意一方部署失败,我们需要用到这样的虚拟环境部署的方式,让二者共存,这样能够在不同业务集群上统一化管理初始化流程。
为什么选择python2的虚拟环境,由于目前centos7默认python版本为2.7.5,照顾到其他物理部署salt-minion的主机,我们还是通过python2的虚拟环境部署salt-minion
HOW and What?
通过下面的步骤实现我们的目标
- 安装需要同步到虚拟环境中的依赖
- 下载需要安装的salt-minion源码包,这里我们选择2018.3.3和3000.5两个版本测试
- 安装pip及virtualenv
- 构建虚拟环境,编译安装salt-minion
- 配置更新
- salt-minion
- logrotate
- 启动并验证salt-minion服务
- 验证salt-master可以正常管理新增minion
PS:为什么选择2018.3.3和3000.5两个版本,前者是因为现网当前使用版本为2018.3.3,后者是因为它是最后一个默认支持python2.X的版本。其次也是根据结果导向的,2018.3.3版本在虚拟化环境中有问题,这个后面我们再说。
验证环境
- CentOS 7.4
- 冲突测试软件 openstack swift
- python版本2.7.5
- pip版本20.3.1(默认低版本pip会遇到安装依赖包的问题)
- virtualenv版本20.2.2
步骤
- 安装需要同步到虚拟环境中的依赖
yum install -y libffi-devel gcc gcc-c++ python-devel zlib zlib-devel readline-devel openssl-devel bzip2-devel sqlite-devel wget curl git nc
- 下载需要安装的salt-minion源码包
https://github.com/saltstack/salt/archive/v3000.5.tar.gz
https://github.com/saltstack/salt/archive/v2018.3.3.tar.gz
- 安装pip及virtualenv
yum install -y python-pip
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/
- 构建虚拟环境,编译安装salt-minion
cd /opt/
# 创建一个名称为salt的虚拟环境,--system-site-packages参数会将现有的python sitepackages带入虚拟环境
virtualenv salt --system-site-packages
# 激活虚拟环境
source salt/bin/activate
tar -xzvf salt-$version.tar.gz
cd salt-$version
python setup.py install --record install.txt
2018.3.3
上述流程运行完之后,salt-3000.5可以正常运行,而2018.3.3需要通过pip额外安装一些依赖包
- pycrypto: 2.6.1
- PyZMQ: 15.3.0
- Jinja2: 2.7.2
- Tornado: 4.2.1
- msgpack-python: 0.5.6
- 配置更新
salt配置
# 将编译的配置拷贝到默认目录下,虽然启动可以指定配置目录,但是可能有些配置会自动生成到默认配置目录,导致出错
mkdir /etc/salt/;rsync -av salt/salt-$version/conf/* /etc/salt/
# minion配置中更新id:及master:字段
(salt) [root@swift-test02 salt-2018.3.3]# cat /etc/salt/minion | grep id:
id: swift-test02
logrotate配置,这里需要手动添加,编译后的文件不包含该内容
(salt) [root@swift-test02 salt-2018.3.3]# cat /etc/logrotate.d/salt
/var/log/salt/master {
weekly
missingok
rotate 7
compress
notifempty
}
/var/log/salt/minion {
weekly
missingok
rotate 7
compress
notifempty
}
/var/log/salt/key {
weekly
missingok
rotate 7
compress
notifempty
}
- 启动并验证salt-minion服务
# 后台运行
salt-minion -d
(salt) [root@swift-test02 salt-2018.3.3]#salt-minion -c /salt-minion/etc/salt -d
(salt) [root@swift-test02 salt-2018.3.3]# ps aux | grep salt-minion
root 48205 9.2 0.0 540592 52328 ? S 15:12 0:00 /opt/salt/bin/python /opt/salt/bin/salt-minion -d
root 48269 0.0 0.0 112660 976 pts/0 S+ 15:12 0:00 grep --color=auto salt-minion
# 前台debug模式运行
salt-minion -l debug
- 验证salt-master可以正常管理新增minion
[root@salt-master]#salt swift-test02 test.ping
swift-test02:
True
问题记录
虚拟化salt-minion开机自启动的问题
配置/usr/lib/systemd/system/salt-minion.service
文件以使得虚拟化salt-minion服务可以通过systemctl管理,再通过systemctl enable salt-minion.service
实现开机的自启动。
[root@a1 salt]# cat /usr/lib/systemd/system/salt-minion.service
[Unit]
Description=The Salt Minion
Documentation=man:salt-minion(1) file:///usr/share/doc/salt/html/contents.html https://docs.saltstack.com/en/latest/contents.html
After=network.target salt-master.service
[Service]
KillMode=process
Type=notify
NotifyAccess=all
LimitNOFILE=8192
ExecStart=/root/salt/bin/python /root/salt/bin/salt-minion
[Install]
WantedBy=multi-user.target
虚拟化环境打包迁移部署
目前可以通过打包整个虚拟化目录的方式成功部署minion服务,通过对打包目录的精简及优化,目前仅需91M空间,即可任意移植部署salt-minion服务。
虚拟化环境中pip install安装结果
默认结果会安装到venv环境中,但是通过salt的命令调用bin_env参数可以使得pip install指定/usr/bin/pip来安装,这样就可以让pip install的软件包装到宿主机环境中。
salt test-swift003 pip.install ranger-fm bin_env=/usr/bin/pip
参考
变更记录
why | who | when |
---|---|---|
创建 | chenqian | 2020-12-15 |
完善问题记录内容 | chenqian | 2020-12-24 |