跳转至

SOP:优化点总账挂账项落地(k8s_ins 侧,#8 / #1,2026-10-02)

本主题为 k8s_ins 侧变更;token_proxy 侧的 backup 清理与 #9/#19 见 ~/Documents/services/token_proxy/backlog-20261002/SOP.md。 交付物目录:optimization-backlog-20261002/(本文件、backup/)。

1. 背景

「优化点总账」~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md 的挂账项多源自本工程的任务样本,本轮按用户选定落地两项:

  • #8(出处 measured-baselines.md §17 要点 2):定位"14 台主机怎么取数"曾白花 4 步, 根因是"集群外主机只读取数"的入口命令未落在路由表 / 速查里,只能靠逐个 Grep 源码反推。
  • #1(出处 §21 要点 5):同一主题三次 deploy 各带一遍完整 K8s 段(约 1 分钟 + 4~5 步), 而三次都只为验主机侧——属当前纯无效成本,需一个"只跑主机侧"的开关。

2. 目标(可验证)

  1. docs/BASELINE.md 第 4 节命令速查、docs/PROJECT-MAP.md 第 1 节路由表各出现 「集群外主机只读取数」的入口(utils.cmd.SSHRunner)。
  2. env-monitor-deploy 的 deploy(及 verify/drift/rollback)支持 --hosts-only: 保留全部主机、仅跳过集群侧接入段;--limit 语义不变(筛主机 且 跳过集群侧)。
  3. 总账中 #8/#1 由「挂账」移入「已做」。

3. 前置条件

  • 权限:本机 rain,可写 /home/rain/Documents/k8s_ins/。
  • 工具:env-monitor-deploy/.venv/bin/python。
  • 执行前检查:main.py / deployer.py 可 py_compile;本步不触碰任何目标主机。

4. 影响范围

项 内容
主机 仅本机编辑文件;未连接任何目标机
组件 env-monitor-deploy 命令层(main.py、deployer.py)与 docs/ 两份档案
是否停服 不需要;采集与监控链路不受影响
窗口 无限制
生效范围 --hosts-only 为新增开关,缺省行为与改动前完全一致(向后兼容)

5. 分步操作

步骤 1:补「集群外主机只读取数」入口(#8)

做什么/为什么:让"要取 14 台集群外主机的数"这类任务一眼看到入口,不必再反推。 实测入口是 monitoring-p2-20261001/utils/cmd.py 的 SSHRunner(基于共享库 paramiko_module 连接池,凭据由共享库处理,无需接触 secrets)——这正是此前白花 4 步才查到的事实。

坑:env-monitor-deploy/utils/cmd.py 没有 SSHRunner(它用注入式的 RemoteShellExecutor + SSHExecutor),故路由表须写明"哪个工程的 utils/cmd.py", 否则下次仍会找错工程。

cd /home/rain/Documents/k8s_ins
cp -p docs/BASELINE.md    optimization-backlog-20261002/backup/docs/BASELINE.md.bak.<YYYYmmdd-HHMMSS>
cp -p docs/PROJECT-MAP.md optimization-backlog-20261002/backup/docs/PROJECT-MAP.md.bak.<YYYYmmdd-HHMMSS>
# 编辑:BASELINE.md 第 4 节与 PROJECT-MAP.md 路由表各增一条(文本以实现体为准)
diff -u optimization-backlog-20261002/backup/docs/BASELINE.md.bak.<TS> docs/BASELINE.md

预期:diff 显示各新增 1 行,无其他改动。

步骤 2:给 deploy 加 --hosts-only(#1)

做什么/为什么:新增开关,语义 = 只跑主机侧(node-exporter + 领域采集),跳过集群侧接入段。 实现落点:

  • main.py:_add_common_options 增 --hosts-only(store_true);_reorder_argv 的 flag 白名单由 ("--dry-run","--force") 扩为含 --hosts-only;日志行与 EnvMonitorDeployer(...) 构造透传。
  • deployer.py:__init__ 增 hosts_only: bool = False 并保存;_prepare_modules 中 k8s.enabled = not self.limit 改为 not (self.limit or self.hosts_only),并加一条 --hosts-only 已启用 的 warning 日志。

坑:--limit 与 --hosts-only 的组合语义须明确——--limit 是单台试点(筛主机 + 跳过集群侧), --hosts-only 是全量主机侧验证(不筛主机 + 跳过集群侧);两者同时给等价于 --limit, 不断言冲突(避免破坏既有脚本)。

cd /home/rain/Documents/k8s_ins/env-monitor-deploy
cp -p main.py     ../optimization-backlog-20261002/backup/env-monitor-deploy/main.py.bak.<YYYYmmdd-HHMMSS>
cp -p deployer.py ../optimization-backlog-20261002/backup/env-monitor-deploy/deployer.py.bak.<YYYYmmdd-HHMMSS>
.venv/bin/python -m py_compile main.py deployer.py
.venv/bin/python main.py deploy --help | grep -A3 -- '--hosts-only'

预期:py_compile rc=0;帮助中出现 --hosts-only 及其说明。 注意:本步不跑真实 deploy——deploy --dry-run 仍会执行 _gate()(连远端预检查) 并调用 ensure_backup_ledger()(会在工程 backup/ 落盘),不是零副作用,故不用于离线验证。

6. 验证

项 命令 预期
语法 .venv/bin/python -m py_compile main.py deployer.py rc=0
参数解析 .venv/bin/python -c 内用 main.build_parser().parse_args(main._reorder_argv([...])) 跑 deploy --hosts-only、deploy --limit X --hosts-only(两种顺序) 三例均 hosts_only=True,--limit 值正确保留
开关暴露 .venv/bin/python main.py deploy --help 出现 --hosts-only 与说明
#8 落点 grep -n 'SSHRunner' docs/BASELINE.md docs/PROJECT-MAP.md 两文件各命中

真机验收待办:--hosts-only 的端到端效果(K8s 段确被跳过、主机侧全量照跑、耗时与步数下降) 待下次真实主机侧变更时验证并回填 measured-baselines.md。

7. 回滚

对象 备份位置(相对 optimization-backlog-20261002/) 回滚命令
docs/BASELINE.md backup/docs/BASELINE.md.bak.20261002-151433 cp -p backup/docs/BASELINE.md.bak.20261002-151433 ../docs/BASELINE.md
docs/PROJECT-MAP.md backup/docs/PROJECT-MAP.md.bak.20261002-151433 cp -p backup/docs/PROJECT-MAP.md.bak.20261002-151433 ../docs/PROJECT-MAP.md
env-monitor-deploy/main.py backup/env-monitor-deploy/main.py.bak.20261002-151552 cp -p backup/env-monitor-deploy/main.py.bak.20261002-151552 ../env-monitor-deploy/main.py
env-monitor-deploy/deployer.py backup/env-monitor-deploy/deployer.py.bak.20261002-151552 cp -p backup/env-monitor-deploy/deployer.py.bak.20261002-151552 ../env-monitor-deploy/deployer.py

备份台账见 optimization-backlog-20261002/backup/README.md。

8. 风险说明

风险 缓解
改 deployer.py 影响既有 deploy 行为 缺省 hosts_only=False,not (limit or False) 与原 not limit 等价;未在真实链路上跑过,但改动点单一且有备份
路由表/速查写错工程(SSHRunner 只在 monitoring-p2) 条目已写明工程名与替代实现,附「入口命令」示例
文档新增行使 PROJECT-MAP 表格错位 新增行沿用既有列数与 \| 转义,diff 已核对

附录:交付物清单

  • optimization-backlog-20261002/SOP.md(本文件)、backup/README.md(台账)
  • 修订:docs/BASELINE.md、docs/PROJECT-MAP.md、env-monitor-deploy/main.py、env-monitor-deploy/deployer.py
  • token_proxy 侧见 ~/Documents/services/token_proxy/backlog-20261002/

来源:/home/rain/Documents/k8s_ins/optimization-backlog-20261002/SOP.md | 最后更新:2026-10-02 15:18(由 build/sync.py 同步,请勿在站点侧修改)