SOP — 删除旧集群遗留资料目录 server/¶
| 项 | 内容 |
|---|---|
| 变更类型 | 清理(删除项目目录内已无引用的旧集群遗留资料) |
| 执行时间 | 2026-09-29 21:15(Asia/Shanghai) |
| 执行主体 | 本机 192.168.31.249(root 免密可用),操作用户 rain |
| 目标对象 | /home/rain/Documents/k8s_ins/server(删除前 312 文件 / 4.71 MB / 10 个顶层子目录) |
| 影响集群 | 无(纯项目目录清理,不触碰任何主机与集群资源) |
| 备份 | 无(经用户明确决定不留档,见第 7 章) |
| 结论 | 已完成,目录不存在;项目内 17 个顶层目录,文档指针已同步 |
1. 背景¶
- 触发条件:本轮核对
docs/PROJECT-MAP.md指针时,server/条目仍标注「身份待澄清」(地图第 4 节)。用户确认其来源为旧集群(GlusterFS/NFS 时代)带来作参考的资料,当前集群已建成,要求评估是否可以删除。 - 现役集群事实:rainchen-k8s 已于 2026-09-16 重建为 Rocky Linux 9.8 / K8s v1.36.4;监控由
prometheus_deploy/(kube-prometheus-stack chart 91.4.1)承载;各服务由对应*-deploy工程独立交付。 - 评估结论(详见附录 A):
server/与现役工程无任何引用关系,内容为旧集群手工清单与历史排障报告,仅具追溯价值。 - 用户决定:直接删除,不留档。
2. 目标¶
/home/rain/Documents/k8s_ins/server不再存在。- 项目目录中不再有任何指向该目录的路径引用或文档残留。
docs/PROJECT-MAP.md与docs/HANDOFF.md反映终态,无过时表述。
3. 前置条件¶
| 类别 | 要求 |
|---|---|
| 权限 | 本机对项目目录有写权限(目录属主 rain) |
| 工具 | GNU coreutils(rm、ls);python3 用于引用扫描与清单统计 |
| 占用 | 无进程/挂载占用该目录(见 5.1 检查) |
| 版本控制 | 项目根无 .git,删除不可通过版本库找回——这是第 7 章「不可回滚」的直接原因 |
4. 影响范围¶
| 对象 | 影响 |
|---|---|
| 项目目录 | 顶层子目录由 18 个减为 17 个(减少 server/) |
| 集群 / 主机 | 无。不涉及 kubectl、helm、ssh 任何操作 |
| 服务 | 无。server/ 是本地静态资料,非运行组件 |
| 停服 | 不需要 |
| 窗口期 | 无要求,随时可执行 |
| 在跑作业 | 不受影响(Slurm / LSF / K8s 均无关联) |
5. 分步操作¶
步骤 1:引用扫描与安全检查¶
确认三件事:① 现役工程无路径引用;② 目标不是挂载点/符号链接;③ 无内部符号链接指向目录外(防止删除动作越界)。
坑:server/ 与 K8s 命名空间 server 同名,直接搜 server/ 会被命名空间语境(server/gitlab IngressRoute、server/traefik Service 等)大量淹没。必须按「路径引用」而非「字符串命中」判定,只看工程脚本/配置/文档中是否出现形如 server/<旧组件目录名> 的文件路径。
cd /home/rain/Documents/k8s_ins
# ① 引用扫描:旧组件目录名组合出现即需人工确认(正常结果为空)
grep -rnE 'server/(monitor|mysql|postgresql|dns|ssh|nfs-sc)' \
--include='*.md' --include='*.py' --include='*.yaml' --include='*.yml' --include='*.json' . \
| grep -v '^./server/'
# ② 挂载点与符号链接检查
findmnt -T /home/rain/Documents/k8s_ins/server -o TARGET,SOURCE,FSTYPE -n
mountpoint /home/rain/Documents/k8s_ins/server
python3 -c "
import os
p='/home/rain/Documents/k8s_ins/server'
print('是符号链接:', os.path.islink(p), '| realpath:', os.path.realpath(p))
print('内部符号链接数:', sum(1 for dp,dn,fn in os.walk(p) for n in dn+fn if os.path.islink(os.path.join(dp,n))))
"
预期:① 仅 server/ 自身内部文件命中(被 grep -v 过滤后为空),项目其余部分零命中;② mountpoint 返回「不是一个挂载点」(退出码 32 属正常);③ 是符号链接: False、内部符号链接数: 0。
失败判断:若出现 server/monitor、server/mysql 等的真实路径引用 → 停止删除,先处理引用方。
步骤 2:删除目录¶
高危:不可逆操作。行内做三重校验——路径等于白名单常量、-d 为真、-L 为假——任一不满足即中止。
坑:不要使用通配(rm -rf server*),避免误伤 server 命名空间相关目录或未来的同前缀目录;必须写全路径。
p="/home/rain/Documents/k8s_ins/server"
if [ "$p" != "/home/rain/Documents/k8s_ins/server" ]; then echo "ABORT: 路径不在白名单"; exit 1; fi
if [ ! -d "$p" ] || [ -L "$p" ]; then echo "ABORT: 目标不存在或为符号链接"; exit 1; fi
echo "【高危】即将删除目录: $p"
rm -rf -- "$p"
预期:无输出或仅打印高危提示行,退出码 0。
失败判断:退出码非 0,或后续 ls 仍可见 → 检查权限与占用(lsof +D),不要重复强删。
步骤 3:验证删除结果¶
test -e /home/rain/Documents/k8s_ins/server && echo "失败: 目录仍存在" || echo "OK: 目录已不存在"
ls -1 /home/rain/Documents/k8s_ins/ | wc -l # 预期 18(docs + 16 个工程/主题 + 本主题目录;本主题目录尚未创建时为 17)
预期:OK: 目录已不存在,顶层条目数 18(本主题目录尚未创建时为 17)。
失败判断:仍存在 → 回到步骤 2 排查;条目数不符 → 清点是否有误删。
步骤 4:同步文档指针¶
删除后 server/ 在 docs/PROJECT-MAP.md 的三处标注(任务路由表、留档卡片、第 4 节存疑项)与 docs/HANDOFF.md 均须更新,否则下个会话会按地图去找一个不存在的目录。
# 定点修订前先备份根级档案(各主题备份归各自 backup/,根级归 docs/backup/)
ts=$(date +%Y%m%d-%H%M%S)
cp docs/PROJECT-MAP.md "docs/backup/PROJECT-MAP.md.bak.$ts"
cp docs/HANDOFF.md "docs/backup/HANDOFF.md.bak.$ts"
# 随后用编辑器定点修订,并登记 docs/backup/README.md
预期:两份 .bak.<时间戳> 落地,docs/backup/README.md 台账各增一行。
失败判断:备份未生成就落笔修改 → 立即停手,先补齐备份。
6. 验证¶
| 检查项 | 命令 | 预期 |
|---|---|---|
| 目录已删 | test -e /home/rain/Documents/k8s_ins/server |
退出码非 0(不存在) |
| 顶层目录数 | ls -1 /home/rain/Documents/k8s_ins/ \| wc -l |
18(含本主题目录;删除刚完成时为 17) |
| 无遗留路径引用 | grep -rn 'server/monitor\|server/mysql\|server/postgresql\|server/nfs-sc' --include='*.md' . |
仅本 SOP 与本主题目录内的历史描述命中 |
| 地图无残留 | grep -n 'server/' docs/PROJECT-MAP.md |
仅剩 K8s 命名空间语境(server 命名空间相关表述) |
| 交接快照无残留 | grep -n 'server/' docs/HANDOFF.md |
无指向该目录的表述 |
7. 回滚¶
本次无备份,故无回滚路径。 这是用户 2026-09-29 在明确知悉「不可恢复、无回滚」后作出的决定(原始选项文本见附录 B),与全局规则「高危操作须附带备份与完整回滚步骤」的默认要求不一致,此处按用户明确指令优先执行,特此留痕。
| 项 | 说明 |
|---|---|
| 备份位置 | 无(未生成任何 .bak / .tar.gz) |
| 回滚步骤 | 不存在。唯一理论恢复途径是重新从旧集群取回资料,而旧集群已销毁,其手工清单仅存于被删目录本身 |
| 回滚后验证 | 不适用 |
| 影响的可逆性 | 目录删除本身在本机层面不可逆;对现役集群与业务无任何影响(本来就无引用) |
残留参考物(非同源,供日后追溯时知悉):cleanup-20260929/backup/monitoring_upgrade.bak.20260929-151522.tar.gz 保存了旧集群监控栈升级档案(CentOS 7 / K8s v1.22→v1.34.3),与本目录同属旧集群时期资料,可作为旧集群经验的间接参考。
8. 风险说明¶
| 风险 | 缓解 / 现状 |
|---|---|
| 删除不可逆,旧集群排障经验永久丢失 | 用户已确认接受:两篇 Pod 启动排障报告与旧手工清单的追溯价值不足以支撑保留 |
| 删除时误伤同名对象 | 已做白名单路径校验 + 禁止通配 + 符号链接/挂载点检查 |
| 文档指向已删目录,误导后续会话 | 已同步修订 PROJECT-MAP(3 处)与 HANDOFF,并备份登记 |
| 残留明文凭据 | 删除前探测到 gitlab/00-gitlab-secret.yaml、gitlab/old/02-gitlab-sts.yaml、postgresql/00-pgsql-secret.yaml 及 postgresql/.00-pgsql-secret.yaml.swp 等含凭据文件;已随目录一并删除,该项风险随之消解(详见附录 A) |
附录 A — 删除前评估证据¶
A1. 引用关系:全项目文本扫描(*.md/*.py/*.yaml/*.yml/*.json/*.txt)中,除 server/ 内部自指与 docs/PROJECT-MAP.md 的留档标注外,无任何现役工程、脚本、配置以文件路径形式引用该目录。命中的 server/xxx 全部为 K8s 命名空间语境(如 server/gitlab IngressRoute、server/traefik Service、Secret server/gitlab-gitlab-initial-root-password)。
A2. 内容构成(删除前实测)
| 顶层子目录 | 文件数 | 顶层子目录 | 文件数 |
|---|---|---|---|
monitor/ |
255(旧 kube-prometheus-stack chart + values + helm 回滚快照) | gitlab/ |
10(含 old/) |
mysql/ |
10 | postgresql/ |
10 |
ssh/ |
6(含 pak/libjemalloc.so.1,207 KB 二进制) |
traefik/ |
6 |
ldap/ |
5 | redis/ |
5 |
dns/ |
4 | nfs-sc/ |
1 |
合计 312 文件 / 4.71 MB;扩展名以 .yaml 272 个为主;文件 mtime 跨 2014-04-01 → 2026-08-24;三份 backup/README.md 为 2026-09-19 16:12 生成(本项目备份台账格式,说明这批历史备份曾在本项目期间补过登记)。
A3. 含凭据文件(已随删除移除):gitlab/00-gitlab-secret.yaml、gitlab/old/02-gitlab-sts.yaml、postgresql/00-pgsql-secret.yaml、postgresql/.00-pgsql-secret.yaml.swp(vim 交换文件),以及 monitor chart 的模板类 secret*.yaml(模板占位,非真实凭据)。
A4. 身份判定:旧集群遗留(地图原列「留档」,标注「身份待澄清」);本次由用户确认来源与去留,澄清闭环。
附录 B — 决策记录¶
- 2026-09-29:用户在四个处置选项中选定「直接删除,不留档」,其余三选项(剔除凭据后打包留档再删 / 整目录打包到项目外 / 先只删凭据文件)均未采用。
- 该选择意味着放弃唯一恢复途径,参见第 7 章。
附录 C — 交付物清单¶
| 文件 | 说明 |
|---|---|
SOP.md |
本文件 |
(无 backup/) |
本次未产生备份,故不建备份目录、不建 backup/README.md |
(无 RUNBOOK.md) |
本次为一次性删除动作,无交付物留存,按规范不需要运行手册 |
附录 D — 关联文档¶
docs/PROJECT-MAP.md— 已移除server/的路由行、留档卡片与存疑项docs/HANDOFF.md— 已同步本轮变更cleanup-20260929/SOP.md— 同类先例:删除旧集群遗留工程monitoring_upgrade/(该次保留了 tar.gz 备份)
来源:
/home/rain/Documents/k8s_ins/cleanup-server-legacy-20260929/SOP.md| 最后更新:2026-09-29 21:13(由build/sync.py同步,请勿在站点侧修改)