跳转至

BASELINE — 环境事实与常用命令(稳定层)

2026-10-01 从 docs/HANDOFF.md 拆出。分工:HANDOFF 只回答「现在是什么状态、下一步做什么」; 本文件回答「环境长什么样、有哪些坑、命令怎么写」。两者都按需查阅, 但 HANDOFF 由 SessionStart Hook 在每次会话开始时注入,故只装变化的内容。 拓扑与凭据的权威源:env-inventory/inventory.yaml、~/.secrets/。

1. 主机与角色【已确认】

集群 主机 角色
k8s .10 / .13 / .14 / .15 master-01 + node-01~03
slurm .16 / .17 / .18 / .19 / .20 控制主备 + 计算 01~03
lustre .21 / .22 MGS/MDS + OSS
lsf .23 / .24 / .25 / .26 / .27 主控主备 + 计算 01~03
hpc .28 统一提交节点
license .29 FlexLM 许可服务器
registry .31 Harbor 内网镜像仓库(harbor-01,v2.15.2)
network .2 OpenWrt 旁路由 / NAT 网关 + frpc 隧道客户端
local .249 = .250 本机 dell-R620(KVM 宿主 + 计费代理 token_proxy)
  • 登录:本机 dell-R620(br0=.249 / eno2=.250,同机双网口,当前执行环境经 .250)root 免密 ssh 直连 20 台(.2、.10–.29 中除 .11/.12/.30 的 18 台、.31);.11/.12/.30 无此主机。
  • 权威源:env-inventory/inventory.yaml(21 台;2026-10-03 增补 .2/.31 并纳入本机)。

2. 版本与运行形态【已确认】

  • Slurm 26.05.2:.18~.20 各 8 核(24 CPU),4 分区;slurmdbd active。
  • HPC/EDA 仿真环境:Lmod 8.7.65(家族门面制——先 load synopsys/cadence/siemens,子工具才出现在 module avail);LDAP 2.6.10 + sssd 客户端接入(域用户 uid≥2000,shell /bin/csh);Slurm 未接 license 调度(scontrol show lic 为空,排队≠许可证可用)。完整契约(分区上限 / 模块树 / 挂载路径 / 提交模板 / 能力边界)见 env-inventory/hpc-simulation-env.yaml。
  • LSF 10.1.0.12 CE,集群 lsfce,8 队列,.23/.24 主备;命令必须带 LSF_ENVDIR/LSF_SERVERDIR(否则 rc=255)。
  • Lustre 2.17.0,文件系统 edafs:.21=MGS/MDS、.22=OSS、.28=唯一挂载客户端(/mnt/lustre);服务端磁盘层 IO 在 osd-ldiskfs.*.brw_stats(mdt.*/obdfilter.* 层没有)。
  • K8s v1.36.4,业务在 server;入口 Traefik + Envoy Gateway,公网经 frp;单控制面(.10),VIP .8:16443 由 keepalived + haproxy 承载(依赖 SELinux 端口标签与 haproxy_connect_any)。
  • 监控栈 kube-prometheus-stack 91.4.1(Prometheus v3.13.3,retention 15d/90GiB 落 nfs-csi-hdd);Alertmanager 配置存 Secret alertmanager.yaml.gz。
  • 本机 Dell R620(Ubuntu 24.04.3):br0=.249、eno2=.250(跑 apt node-exporter + IPMI 采集)。
  • k8s_136_cluster_deploy 重跑会重写 haproxy 后端(含已关闭的 .11/.12)。
  • token_proxy(项目外,.250):计量代理,Hook > Rules > Skill;usage.jsonl 每行一请求(轮内步数 = 同 turn_key 条数);计费 0.02/1.0/4.0(元/百万)。
  • 注入机制:SessionStart 注入 HANDOFF 全文(仅会话开始一次);user_rules/ 每轮注入;skill 按需加载。
  • SELinux / firewalld 期望态【已确认】:2026-10-03 起 19 台内网主机 SELinux 统一 permissive (lsf 5 台 + hpc 为 disabled;不回改,回改需 relabel),firewalld 全部停止 + 禁用。 复核、改配置与回滚见 selinux-firewall-20261003/(工程名即主题目录)。香港 frps(公网入口) 与 OpenWrt 旁路由不在该范围,其防火墙不得关。

3. 机制性陷阱【已确认】

这些不是"事实",而是会误导判断的机制——不知道就会做出错误决策。

  • cluster 标签由 ServiceMonitor relabel 按节点所属集群生成,会覆盖指标文件里的同名标签:.28 的 Lustre 客户端指标 cluster=hpc 而非 lustre,大盘过滤口径须据此设计(2026-10-01 实测,曾因此走弯路)。
  • Calico 开 natOutgoing:Pod 出集群 SNAT 成节点 IP —— 防火墙放行来源是节点 IP,不是 Pod 网段。
  • helm upgrade 用 --no-hooks(pre-upgrade hook 拉 ghcr.io/…)决定保留:代理出口为 url-test 按延迟选路,延迟低 ≠ 带宽大,选到低带宽节点时拉取可慢到撞 --timeout(2026-10-01 复测稳态 1.2–1.8 MiB/s,但该风险成立)。
  • 共享库 ~/py_public_modules 被 6 个工程以 .pth 挂载(改一处影响全部),未纳入 git。
  • kubectl exec 不继承清单里的 namespace:不带 -n 会落到 default,报 "pod not found",表现为「命令一直重试到超时」。清单自带的 namespace 只对 apply 生效(2026-10-01 EFK 部署踩到)。
  • 开了 xpack.security 的服务,容器 readinessProbe 不能用 httpGet:端点要求认证,探针拿到 401 → Pod 长期 0/1,而服务本身早已 GREEN。改用 exec + curl -u "$PW"(2026-10-01 EFK 上线实测)。
  • StatefulSet 的 Pod template 变更后,Pod 未必自动重建:实测 kubectl apply 已更新 sts spec(探针已变),旧 Pod 却仍在跑旧探针,需显式 kubectl delete pod <name>(2026-10-01 实测)。
  • 集群内 Pod 解析不了 rainchen.top(CoreDNS 只负责集群域名):黑盒探测外部域名须用 IP + module 的 headers.Host,不能直接写域名(2026-10-01 实测)。
  • 工具异常不得当作事实:LS 返回空 ≠ 目录为空,改用 Glob 取证(2026-09-30 起约定)。
  • sshpass 用 -e / -f,禁用 -p:-p 会把口令暴露在进程参数里。
  • 管道会让返回码失真:cmd | tail -3 的 rc 是 tail 的 0,安装/采集命令的失败被掩盖为成功(2026-10-02 实测踩到);校验 rc 时命令不得接管道。
  • 指标 relabel 生效有 45~90s 延迟:改完采集配置立即查指标标签会看到旧值,须等一个抓取周期再判定(2026-10-02 实测)。
  • elasticsearch-plugin install <url> 不落包内 config/ 目录:带词典的插件(如 IK)装完只多出 jar,缺 main.dic/surname.dic 会让 Dictionary.initial() 抛异常;该异常发生在 AnalysisRegistry.build 阶段,后果是索引创建失败、集群整体 red(不只是分词不可用)。须从同 URL 的包中解出 config/ 拷入插件目录(2026-10-13 实测)。

4. 命令速查

timeout 6 ssh -n -o BatchMode=yes -o ConnectTimeout=3 root@<ip> hostname   # 连通性
kubectl get po,deploy,sts,ds -A                                           # K8s 总览
cd env-monitor-deploy && .venv/bin/python main.py verify                  # 链路体检 / drift(日常见其 RUNBOOK.md)
cd dell-r620-monitor-20260929 && sudo -n .venv/bin/python main.py drift   # R620 温度链路(只读)
ssh root@192.168.31.10 "systemctl is-active haproxy; curl -sk https://192.168.31.8:16443/healthz"
ssh root@192.168.31.21 'curl -s localhost:9100/metrics | grep -c "^lustre_"'  # 领域采集产物 / 指标计数
cd monitoring-p2-20261001 && .venv/bin/python -c "from utils.cmd import SSHRunner; print(SSHRunner().run('192.168.31.16','hostname').stdout)"  # 集群外主机只读取数(凭据由共享库处理,无需接触 secrets;多台用 ThreadPoolExecutor(5) 并行)
python3 env-inventory/build_secrets_env.py                                # 刷新凭据快照(幂等)
cd selinux-firewall-20261003 && .venv/bin/python main.py drift            # SELinux/firewalld 漂移检测(0 无漂移 / 1 有漂移 / 2 检测失败)

5. 文档地图

文件 管什么
docs/HANDOFF.md 当前状态、待办、红线(每会话注入)
docs/BASELINE.md 本文件:环境事实、机制陷阱、命令速查
docs/PROJECT-MAP.md 项目全局地图:任务路由 / 依赖图 / 子项目卡片 / 文档约定
docs/MONITORING-ROADMAP.md 监控体系蓝图:八维度口径 / G1–G8 缺口台账 / P0–P2
docs/backup/README.md 根级档案备份台账(各工程备份见其自身 backup/)

来源:/home/rain/Documents/k8s_ins/docs/BASELINE.md | 最后更新:2026-10-13 19:50(由 build/sync.py 同步,请勿在站点侧修改)