K8S集群Python环境pyenv统一纳管SOP¶
文档位置:
k8s_pyenv统一纳管_20260904/SOP_运维操作手册.md操作对象:6台K8s主机(master-01/02/03, node-01/02/03),均为CentOS7 执行日期:2026-09-04 执行人:root(通过跳板机 rian 192.168.0.11 免密登录)
1. 背景与目标¶
1.1 背景¶
部分主机 SSH 登录出现:
/root/.bashrc: line 16: pyenv: command not found
巡检发现6台K8s主机Python环境状态不一致:
| 主机 | IP | 当前状态 | 现象 |
|---|---|---|---|
| k8s-master-01 | 192.168.0.2 | pyenv正常(3.9.6) | .bashrc pyenv配置重复4次 |
| k8s-master-02 | 192.168.0.3 | 完全未安装 | 仅系统Python 2.7.5,无Python3 |
| k8s-master-03 | 192.168.0.4 | 完全未安装 | 仅系统Python 2.7.5,无Python3 |
| k8s-node-01 | 192.168.0.5 | pyenv已装但配置错 | PYENV_ROOT错指向/mnt/nfs + global=2.7.13 → 登录报错 |
| k8s-node-02 | 192.168.0.6 | pyenv已装但global错 | global=2.7.13 → python3不可用 |
| k8s-node-03 | 192.168.0.7 | pyenv已装但global错 | global=2.7.13 → python3不可用 |
1.2 目标¶
- 6台主机 全部通过 pyenv 统一纳管 Python 版本
- 每台都具备:Python 3.9.6(pyenv纳管)+ Python 2.7.x(优先 system 自带)
pyenv global = 3.9.6 system→ 默认python/python3指向 3.9.6,python2可回退- SSH 登录无
pyenv: command not found报错 - .bashrc pyenv 配置块 幂等统一,重复执行不重复追加
2. 前置条件¶
| 序号 | 检查项 | 标准 | 验证命令 |
|---|---|---|---|
| 1 | rian → 6台主机免密SSH | yes | ssh root@<ip> hostname 无密码提示 |
| 2 | 操作系统 | 全部 CentOS 7.x | cat /etc/os-release |
| 3 | root权限 | 脚本要求root执行 | whoami == root |
| 4 | 可达公网 / 香港跳板机 | 优先国内镜像,失败走代理 | curl -I https://gitee.com 或 能连 129.226.138.204:22 |
| 5 | 磁盘空间 | /root 分区 ≥ 2GB(编译Python占用大) | df -h /root |
| 6 | 备份 | SOP执行前对 .bashrc + 已有~/.pyenv 做快照备份 | 见第4章回滚 |
2.1 香港跳板机信息(海外下载限速时启用)¶
- 公网IP:129.226.138.204(VM-4-4-centos,public_bastion_host)
- SSH账号:root / 同集群统一密码
- 用法:在 rian 本机执行
ssh -D 1080 -N -f root@129.226.138.204,对远程主机传SOCKS5_PROXY=192.168.0.11:1080
3. 分步操作¶
所有脚本在 rian 本机(192.168.0.11)运行,通过 SSH 分发到6台主机。
3.1 Step 1:归档目录与准备¶
cd /home/rian/Documents/trae_for_om/pyenv_ins/k8s_pyenv统一纳管_20260904
chmod +x python_env_optimized.sh batch_deploy_pyenv.sh
3.2 Step 2:批量备份(必须先执行)¶
每台主机备份:
# .bashrc 备份
ssh root@<ip> "cp -a ~/.bashrc ~/.bashrc.bak.pyenv.$(date +%Y%m%d)"
# 若存在旧~/.pyenv,备份一份以防万一
ssh root@<ip> "if [ -d ~/.pyenv ]; then tar -czf ~/.pyenv.bak.pyenv.$(date +%Y%m%d).tar.gz -C ~ .pyenv; fi"
(批量脚本 batch_deploy_pyenv.sh backup 已封装)
3.3 Step 3:按主机分组执行¶
依据巡检差异,将主机分为三类:
A组:全新安装(master-02 / master-03)¶
# 分发脚本 + 执行 -i 全量安装(含依赖、pyenv、两个Python版本、bashrc配置)
scp python_env_optimized.sh root@192.168.0.3:/tmp/
ssh root@192.168.0.3 "bash /tmp/python_env_optimized.sh -i 2>&1 | tee /tmp/pyenv_install.log"
# master-03 同上
⚠️ 安装耗时约 5~15 分钟/台,视网络与CPU速度。若国内镜像失败,追加环境变量重跑:
bash ssh root@192.168.0.3 "SOCKS5_PROXY=192.168.0.11:1080 bash /tmp/python_env_optimized.sh -i 2>&1"(需确保rian本机已ssh -D 1080 ...建立香港隧道)
B组:已装但配置错误(node-01 / node-02 / node-03)¶
三者已装有2.7.13 + 3.9.6,但global错误且bashrc有脏配置。执行修复模式更快速安全。
scp python_env_optimized.sh root@192.168.0.5:/tmp/
ssh root@192.168.0.5 "bash /tmp/python_env_optimized.sh -f 2>&1 | tee /tmp/pyenv_fix.log"
# node-02 / node-03 同上
修复模式只动 .bashrc + pyenv global,不重新编译Python,秒级完成。
C组:正常但有重复配置(master-01)¶
scp python_env_optimized.sh root@192.168.0.2:/tmp/
ssh root@192.168.0.2 "bash /tmp/python_env_optimized.sh -f 2>&1 | tee /tmp/pyenv_fix.log"
3.4 Step 4:逐台验证(见第5章)¶
3.5 Step 5:验证后清理临时文件¶
for ip in 192.168.0.{2,3,4,5,6,7}; do
ssh root@$ip "rm -f /tmp/python_env_optimized.sh /tmp/pyenv_*.log"
done
4. 回滚步骤¶
4.1 回滚触发条件¶
- 安装过程中关键步骤失败且重试无效
- 验证阶段 SSH 登录仍报错或系统关键服务因 Python 版本变更异常
4.2 完整回滚(按最坏情况)¶
每台主机依次执行:
# 1. 还原 .bashrc(备份文件命名:~/.bashrc.bak.pyenv.YYYYMMDD 或 .bashrc.bak.YYYYMMDD_HHMMSS)
ls -lt ~/.bashrc.bak* | head -3
cp -a ~/.bashrc.bak.pyenv.20260904 ~/.bashrc # 选择最新有效备份
# 2. 还原旧~/.pyenv(若新装且想撤销)
if [ -f ~/.pyenv.bak.pyenv.20260904.tar.gz ]; then
rm -rf ~/.pyenv
tar -xzf ~/.pyenv.bak.pyenv.20260904.tar.gz -C ~
fi
# 3. 如果只是 pyenv global 选错需要回退:
export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
pyenv global system # 切回系统Python
# 4. 断开当前shell,重新SSH登录确认无报错
exit
4.3 单步原子回滚示例(仅bashrc)¶
ssh root@<ip> "cp -a ~/.bashrc ~/.bashrc.before_rollback && \
cp -a \$(ls -t ~/.bashrc.bak* | head -1) ~/.bashrc"
5. 验证标准¶
| 验证项 | 命令 | 通过标准 |
|---|---|---|
| 登录无报错 | ssh root@<ip> "echo OK" |
stderr 不应出现 pyenv: command not found |
| python3 可用 | ssh root@<ip> "source ~/.bashrc && python3 --version" |
Python 3.9.6 |
| python 默认指向py3 | ssh root@<ip> "source ~/.bashrc && python --version" |
Python 3.9.6 |
| python2 可用 | ssh root@<ip> "source ~/.bashrc && /usr/bin/python --version" |
Python 2.7.5(或 pyenv 的 2.7.13) |
| pyenv versions 对齐 | ssh root@<ip> "source ~/.bashrc && pyenv versions" |
包含 3.9.6 与 system,* 指向 3.9.6 |
| .bashrc 幂等 | 重跑 -c 2次后检查行数 |
pyenv managed 块只出现 1 次 |
| pip 可用 | ssh root@<ip> "source ~/.bashrc && pip3 --version" |
能正常输出,无报错 |
6. 风险说明与规避¶
| 风险点 | 影响 | 概率 | 规避/处置 |
|---|---|---|---|
| CentOS7 openssl-devel 版本过低导致 Python3 编译失败 | Python3 编译不通过 | 中 | 脚本自动识别并安装 openssl11-devel,并注入 CPPFLAGS/LDFLAGS 指向 openssl11 路径 |
| GitHub/pyenv源码 或 Python源码 海外下载慢/断 | 安装超时失败 | 高 | ① 国内 Gitee 镜像优先 ② NPMMirror Python 源优先 ③ 失败自动启用香港跳板机 SOCKS5 代理重试 |
| 新global覆盖老业务Python版本 | 老脚本突然用 py3 执行出错 | 中 | 巡检确认原系统 Python2 仍在 /usr/bin/python;pyenv global 为 3.9.6 system,老脚本显式调用 /usr/bin/python 不受影响;关键业务建议提前用 pyenv local system 锁定 |
| .bashrc 重复追加导致 PATH 膨胀 | 登录提示慢/不美观 | 低 | 优化脚本用 MANAGED BLOCK 标记 + 旧语句grep剔除,幂等执行无重复 |
| 编译依赖安装触发系统yum依赖升级 | 影响其他包 | 低 | 仅 -y 安装python构建依赖,不做 yum update;如担心可加 --setopt=strict=0 或事先yum版本锁 |
7. 交付物清单(本目录下)¶
| 文件名 | 用途 |
|---|---|
SOP_运维操作手册.md |
本文件 |
python_env_optimized.sh |
优化后的单机 pyenv 安装/修复脚本(远程分发执行) |
batch_deploy_pyenv.sh |
批量部署入口:备份 → 分组执行 → 验证 → 报告 |
check_logs/*.log |
巡检原始日志 |
deploy_logs/*.log |
本次部署执行日志(备份+执行+验证) |
来源:
/home/rain/Documents/trae_for_om/pyenv_ins/k8s_pyenv统一纳管_20260904/SOP_运维操作手册.md| 最后更新:2026-09-04 22:05(由build/sync.py同步,请勿在站点侧修改)