如何在CentOS上将salt-minion部署到python2虚拟环境

image

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版本在虚拟化环境中有问题,这个后面我们再说。

验证环境

  1. CentOS 7.4
  2. 冲突测试软件 openstack swift
  3. python版本2.7.5
  4. pip版本20.3.1(默认低版本pip会遇到安装依赖包的问题)
  5. virtualenv版本20.2.2

步骤

  1. 安装需要同步到虚拟环境中的依赖
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
  1. 下载需要安装的salt-minion源码包
https://github.com/saltstack/salt/archive/v3000.5.tar.gz
https://github.com/saltstack/salt/archive/v2018.3.3.tar.gz
  1. 安装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/
  1. 构建虚拟环境,编译安装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
  1. 配置更新

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
}
  1. 启动并验证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
  1. 验证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

参考

变更记录

whywhowhen
创建chenqian2020-12-15
完善问题记录内容chenqian2020-12-24
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LPrintf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值