技术实践路线图(AI 辅助实验 + 经验沉淀)¶
用途:指导 AI 助手陪同完成各阶段实验,并沉淀实验经验。与各技术目录 README.md 配套使用。 目录:
F:\EricLiu\Docs\Roadmap\实验产出:各技术目录labs\创建日期:2026-11-11
0. 总路线(建议节奏,可按实际进度调整)¶
阶段 0 阶段 1 阶段 2 阶段 3 阶段 4 阶段 5
环境准备 → Linux/Shell → Vagrant → Docker → K8s → 周边(可并行)
(1-2 天) (1-2 周) (3-5 天) (1-2 周) (4-8 周) (2-4 周)
└─ TTS 服务 ──┘ └─ Git/Nginx/Ansible/监控/Terraform
每个阶段有明确进入条件和出关标准(见第 3 节),达标才进下一阶段;不追求快,追求每个实验都有经验记录。
1. 实验工作循环(每个实验的标准流程,AI 必须遵守)¶
① 备场:vagrant snapshot save 或确认环境干净(labs\ 里留 .git 提交点);
同时检查宿主机资源(内存/磁盘余量,见 §2.6 预算表),不够先瘦身再开实验
② 目的:AI 与用户对齐"实验目的"——验证什么、预期结果(假设)、成功的判据。
判据必须可量化(具体命令 + 期望输出,如 `curl -s -w "%{http_code}"` 返回 200、
`kubectl get pods` 显示 2/2 Running),禁止"看起来正常"这类模糊判定
③ 动手:AI 按对应技术 README 的守则执行命令,边做边讲"现在在做什么、为什么"
④ 记录:**每步骤执行后即时更新**实验报告的"实验记录"段(命令骨架 + 关键输出留痕,
异常时贴报错原文),不做事后凭记忆补写——步骤级留痕是硬约束
⑤ 验证:对照第②步的判据给结论(达成/未达成/部分达成),证据必须是命令输出而非主观描述;
失败走排障流程(先查 Reusable\INDEX.md),仍失败按 §2.5 失败处理
⑥ 收尾:重置环境(snapshot restore / kind delete / vagrant destroy);清理 F:\EricLiu\tmp\
⑦ 提炼:填实验报告(五段式,见 2.2)→ 更新经验库 → 至少提炼 1 项复用资产存入
F:\EricLiu\Docs\Reusable\(见第 2.4 节)——没有可复用产出的实验视为未完成
时间盒规则:每个实验默认限时 60 分钟(排障可延至 90 分钟)。到时仍未达成就地收尾——按"未达成"记录现象与已排除项,进入 §2.5 流程。禁止无限调试;AI 不得为赶进度跳过记录与提炼步骤。
阶段完结发布流程(每阶段出关时执行,四步缺一不可):
① 出关:完成里程碑自测与回炉抽查(见 §3 出关标准)
② 提交:git add + commit(按 DocOps §4 提交纪律)→ push 到远程仓库 Gitee ops-lab
③ 发布:重建 MkDocs 站点并部署到服务器容器,更新 docs.nopcloud.com(SOP 见 DocOps §5)
④ 归档:更新本文档勾选框与"下次继续点",确认线上站点内容与本地一致
2. 经验记录与复用机制(核心:学过 ≠ 记下,记下 ≠ 复用)¶
2.1 目录约定¶
F:\EricLiu\Docs\K8s\labs\
├── E01-first-pod\
│ ├── README.md # 实验报告(五段式模板,见 2.2)
│ ├── *.yaml # 实验中用到的配置文件
│ └── output.txt # 关键命令输出(只留关键的)
├── E02-rolling-update\ ...
└── EXPERIENCE.md # 本技术专属经验库(持续追加)
F:\EricLiu\Docs\Reusable\ # 跨实验的复用资产库(结构见 2.4)
2.2 实验报告模板 · 五段式(labs*\README.md)¶
# E0X 实验名(日期 · 阶段 4 · 耗时 xx 分钟)
## 一、实验目的
- 验证什么:一句话
- 为什么做:关联哪个知识点/哪次踩坑
- 假设与判据:预期看到什么,用什么命令/现象判定成功
## 二、实验记录(过程留痕,实时写,不事后补)
- 环境:快照名 / git commit id / VM 与集群状态
- 步骤:命令骨架 + 关键参数(不复述文档)
- 关键输出:只贴能说明问题的片段(标注时间点)
- 异常现场:报错原文完整粘贴(排障素材,价值最高)
## 三、实践结果
- 结论:达成 / 未达成 / 部分达成
- 证据:验证命令 + 输出片段
- 与预期的偏差:哪里不一样,偏差原因
## 四、实践总结
- 核心收获:用自己的话 2-3 句(写不出来说明没学懂,重做)
- 踩坑清单:每坑一条——现象 → 原因 → 解法 → 耗时
- 如果重来:会怎么做;如果上生产:要注意什么
## 五、实践复用(本次实验沉淀了什么"下次直接用"的东西)
- 提炼资产:脚本/配置/SOP/清单(四选一以上),已存 Reusable\ 的哪个文件
- 最小复现路径:下次遇到同类问题,一句话的"捷径"(如:先 ss -tlnp 查端口,
再 systemctl status,最后 journalctl -u xxx --since "10 min ago")
- 索引:已把条目追加到 Reusable\INDEX.md(标签:#排障 #k8s #pod)
2.3 经验库模板(每技术一份 EXPERIENCE.md,AI 每次实验后追加)¶
| 日期 | 实验 | 问题/发现 | 原因 | 解法/结论 | 可复用资产 | 已入 Reusable? |
|---|---|---|---|---|---|---|
强制入经验库的三种情况:AI 排障超过 10 分钟的问题、用户问过"为什么"的点、文档里没写的坑。
复用闭环规则(AI 必须执行):
1. 用前先查:做任何实验/排障前,先 grep Reusable\INDEX.md 的标签,有现成资产直接用,不从头折腾。
2. 用后必炼:解决一个新问题后,至少提炼一项资产——可运行脚本 / 验证过的配置 / 排障 SOP / 检查清单,四选一。纯"记住了"不算沉淀。
3. 提炼要过验证:脚本和配置必须在实际环境跑通过才入库;SOP 必须包含真实报错原文。
4. 反哺文档:经验库中反复出现的坑(≥2 次),更新对应技术 README 的排障速查节。
2.4 复用资产库(F:\EricLiu\Docs\Reusable\)¶
Reusable\
├── README.md # 使用规则(给 AI)
├── INDEX.md # 总索引:标签 / 名称 / 路径 / 适用场景 / 来源实验 / 日期
├── scripts\ # 可直接运行的脚本(巡检/备份/环境重建…)
├── configs\ # 验证过的配置模板(Vagrantfile / K8s YAML / nginx conf…)
├── playbooks\ # 排障 SOP:症状 → 排查步骤 → 命令 → 判定
└── checklists\ # 检查清单(部署前 / 上线前 / 阶段出关)
INDEX.md 条目格式:
| 标签 | 名称 | 路径 | 适用场景 | 来源实验 | 日期 |
|------|------|------|----------|----------|------|
| #排障 #端口 | 端口占用三步定位 | playbooks/port-occupied.md | 服务起不来先查这个 | E01-2 | 2026-11-11 |
2.5 失败实验处理与回炉机制¶
失败处理:实验时间盒耗尽仍未达成时——
1. 按"未达成"归档:报告照写五段式,第三段如实记录已验证的假设和已排除项(排除项和结论同样有价值)
2. 在实验目录名加 -WIP 后缀,Roadmap 清单不打勾,EXPERIENCE.md 标注"待回炉"
3. 下次继续点写明卡点(如"E04-08 卡在 CSI 驱动拉取镜像,疑似网络问题")
4. 连续 2 次回炉仍失败 → 升级处理:换实验路径(如 kind 换 k3s)或暂时跳过(标注"已跳过",不阻塞后续阶段),跳过的实验进 §2.5 回炉池
回炉机制(对抗遗忘): - 阶段出关必回炉:进入下一阶段前,从本阶段 + 上一阶段的实验中抽 1-2 个重做(限 30 分钟/个,重做能过 = 记住了;过不了 = 修 EXPERIENCE.md 再回炉) - 踩坑复练:EXPERIENCE.md 中"坑 ≥ 2 次"的条目构成错题本,每阶段出关时 AI 出题针对错题本抽查 - 季度大扫除(可按实际节奏):清 tmp\、复核 Reusable 资产有效性(见 Reusable\README.md 生命周期规则)、归档连续 90 天未命中的资产
2.6 资源预算(实验前必查,防止宿主机被拖垮)¶
宿主机基线(2026-11-11 实测):2×Intel Xeon Gold 6138 @ 2.00GHz(40 核 / 80 线程)、256 GB 内存、C 盘 448G(系统)、F 盘 895G(实验产物与 VM 磁盘)。
总上限 = 本机资源的 60%(硬红线,所有运行中 VM 合计不得超过):
| 资源 | 本机总量 | 60% 上限 |
|---|---|---|
| 内存 | 256 GB | 153 GB(日常按 150 GB 执行) |
| vCPU | 80 线程 | 48 vCPU |
| VM 磁盘 | F 盘 895G | VM 磁盘合计 ≤ 500 GB(放在 F:\HyperV\ 或 F:\EricLiu\Envs\,任何盘剩余空间 < 20% 时先清理) |
分阶段预算(在此上限内的建议配置):
| 场景 | 内存 | vCPU | 磁盘/VM |
|---|---|---|---|
| 单 VM(阶段 0-2) | 8 GB | 4 | 60 GB |
| 3 VM(Vagrant 多机 / k3s / kubeadm) | 各 8 GB(合计 24 GB) | 各 4(合计 12) | 各 60 GB |
| kind 集群(跑在单 VM 内) | 宿主 VM 8 GB | 宿主 VM 4 | 宿主 VM 60 GB |
| kubeadm 多节点 + 同时开 kind | 合计 ≤ 40 GB | 合计 ≤ 20 | — |
备场检查清单(AI 每次实验第①步执行):
1. Get-VM | Where State -eq Running —— 有无残留运行 VM(有则先确认关掉)
2. 空闲内存 ≥ 本实验预算 + 20%(用 Get-CimInstance Win32_OperatingSystem 的 FreePhysicalMemory 换算)
3. VM 磁盘所在盘剩余 ≥ 本实验新 VM 磁盘之和,且剩余比例 ≥ 20%
4. 不达标 → 先销毁旧环境 / 清理磁盘 / 降配,再开实验;预算表不敷使用(如需更大单机)须先经用户确认,且总量不得突破 60% 上限
3. 分阶段实验清单¶
阶段 0:环境准备(1-2 天)¶
前置:Windows Pro 启用 Hyper-V,管理员权限可用。
- [ ] E00-1 安装 Vagrant(参照 Vagrant\README),验证
vagrant --version - [ ] E00-2 创建 Internal 虚拟交换机 + NAT(Vagrant\README 第 4 节的 PowerShell),记录网段
- [ ] E00-3 下载并本地化 box:
vagrant box add generic/ubuntu2204 --provider hyperv,再vagrant package备份(Registry 2026 年底停运) - [ ] E00-4 labs\ 目录建 git 仓库 + .gitignore(Git\README 第 6 节)
出关:一条命令能起一台 Ubuntu VM 并 ssh 进去。
阶段 1:Linux + Shell + Git 基础(1-2 周,穿插进行)¶
进入条件:阶段 0 完成。文档:Linux\README、Shell\README、Git\README。
- [ ] E01-1 VM 初始化:改主机名、建用户、配 SSH 密钥免密、ufw 放行(Linux §4/§6/§7)
- [ ] E01-2 排障演练:故意把 SSH 端口改错,用 journalctl + ss 找回(Linux §2/§10)
- [ ] E01-3 磁盘/进程排查:模拟日志打满磁盘,用 du/df/lsof 定位并写 cron 清理(Linux §3/§8/§9)
- [ ] E01-4 写"环境巡检脚本":CPU/内存/磁盘/服务状态一键检查,set -euo pipefail(Shell §1/§7)
- [ ] E01-5 labs\ 提交规范练习:分支、小步提交、一次"误删后 reflog 找回"演练(Git §5)
出关:能不查文档写出带参数和日志的巡检脚本;能独立用 journalctl 定位服务启动失败。
阶段 2:Vagrant 环境工程化(3-5 天)¶
进入条件:阶段 1 出关。文档:Vagrant\README。
- [ ] E02-1 单机模板化:把 E00-3 的 VM 固化成 Vagrantfile 模板(§3 模板),provisioner 自动装基础软件
- [ ] E02-2 快照工作流:clean-base 基线 → 做实验 → restore 重置,体会"实验可丢弃"
- [ ] E02-3 三节点拓扑:用 (1..3).each 起 3 台 VM,记录 DHCP 分到的 IP,写固定 IP 的脚本方案
- [ ] E02-4 打包自制 box:装好 Docker 后
vagrant package,做成"docker-ready"基础 box - [ ] E02-5 网络坑实验:验证"Vagrantfile 网络配置在 Hyper-V 下被忽略",记录实际行为(这是官方局限,提前踩过以后不慌)
出关:vagrant up 一条命令从零到 3 台带 Docker 的 Ubuntu。
阶段 3:Docker(1-2 周)+ TTS 服务上线¶
进入条件:阶段 2 出关。文档:Docker\README。
- [ ] E03-1 容器基础五连:run/exec/logs/inspect/stats,理解容器=受限进程
- [ ] E03-2 持久化对比:匿名卷 vs 命名卷 vs bind mount,删容器验证数据存亡
- [ ] E03-3 自建网络互通:两个容器自定义网络内用容器名互访(内置 DNS)
- [ ] E03-4 写 TTS 的 Dockerfile:选型 piper / VITS / GPT-SoVITS(CPU 推理),多阶段构建,暴露 /health
- [ ] E03-5 Compose 编排:TTS + Redis(或 Nginx)双服务,验证 up/down/update 流程
- [ ] E03-6 资源限制实验:memory limits 调小,复现 OOMKill(137),学会看 inspect + dmesg
- [ ] E03-7 镜像瘦身:对比 alpine 基础/多阶段/清理缓存三个手法的前后体积
出关:TTS 服务以 Compose 稳定跑在 VM 里,curl /health 通过;E03-6 的 OOM 排障写进经验库。
阶段 4:Kubernetes 从入门到进阶(4-8 周,主战场)¶
进入条件:阶段 3 出关(有可容器化的 TTS 应用当实验素材)。文档:K8s\README(15 个实验的详细路径)。
第 1 单元 · 单机 kind 快速循环(1-2 周) - [ ] E04-01 kind 建多节点集群 → 重建循环练习(kind delete/create) - [ ] E04-02 Deployment + 扩缩容 + 滚动更新/回退(§4 阶段一实验 1-2) - [ ] E04-03 Service 三类型 + kubectl port-forward 调试 - [ ] E04-04 ConfigMap/Secret 两种注入方式 - [ ] E04-05 把阶段 3 的 TTS 部署进集群(§5 YAML 模板改造)——阶段里程碑 - [ ] E04-06 探针三件套:故意改坏 /health,观察 liveness 重启循环(排障必练) - [ ] E04-07 HPA 压测自动扩缩容(自装 metrics-server,注意 K8s 文档已更正 kind 不自带)
第 2 单元 · 存储/状态/网络进阶(2-3 周) - [ ] E04-08 PVC + StorageClass(kind 需自装 CSI/local-path,K8s 文档已更正) - [ ] E04-09 StatefulSet 部署 MySQL/Redis,验证固定域名与数据留存 - [ ] E04-10 Ingress Controller + 域名路由 TTS(或体验 Gateway API) - [ ] E04-11 NetworkPolicy 隔离实验(需换 Calico CNI)
第 3 单元 · 多节点真实感(2-3 周,Vagrant 三节点上场) - [ ] E04-12 k3s 部署到 E02-3 的 3 台 VM(先 vagrant snapshot save) - [ ] E04-13 kubeadm 走一遍(理解 k3s 帮你省掉了什么) - [ ] E04-14 RBAC 最小权限:建受限 ServiceAccount,用 auth can-i 验证 - [ ] E04-15 节点故障演练:drain 节点看 Pod 迁移;PodCrashLooping/ImagePullBackOff 全流程排障考核(§7 流程盲跑)
出关:TTS 以 Helm Chart 形式部署在 k3s 集群、带探针/资源限制/HPA;§7 排障流程能不看文档走完。
阶段 5:周边技术(2-4 周,可与阶段 4 后期并行)¶
- [ ] E05-1 Nginx 反代集群内的 TTS,配域名 + certbot HTTPS(Nginx §3.1/3.3)
- [ ] E05-2 Ansible playbook 一键重建 3 台 VM 的 Docker 环境(Ansible §4 模板),对比手搓 provisioner
- [ ] E05-3 kube-prometheus-stack 上监控,Grafana 导入 1860 面板,为 TTS 配 CPU 告警(Monitoring §2/§5)
- [ ] E05-4 Terraform + Docker provider 把 E03-5 的 Compose 场景改写成 HCL,体会 IaC(Terraform §7 对比)
- [ ] E05-5(选修)TTS 做成 Helm Chart + Service + Ingress 完整发布链
出关:vagrant up → ansible → helm install → 浏览器 HTTPS 访问 TTS → Grafana 看到监控,一条链路走通。
4. 里程碑自测(进下一阶段前让 AI 出题抽查)¶
| 阶段 | 自测方式 |
|---|---|
| 1 | AI 现场给 3 个故障场景(服务起不来/磁盘满/端口占用),只许看手册不许问 AI 排 |
| 2 | 从空目录到 3 台带 Docker 的 VM,限时 10 分钟 |
| 3 | AI 停掉 TTS 容器并清掉日志,你靠排障套路恢复并说出退出码含义 |
| 4 | AI 随机制造一个集群故障(错镜像 tag/坏探针/资源不足),盲跑 §7 排障流程 |
| 5 | 全链路演示:一条命令序列完成"重建→部署→监控告警" |
5. AI 助手协作守则(本路线图专属)¶
- 讲解优先:执行命令时顺带一句"这条在干什么",用户问"为什么"必须停下来讲透,讲不清就查文档。
- 别代劳排障:先给用户 1-2 次自己定位的机会(提示线索而非直接给答案),除非用户明说"直接修"。
- 实验纪律:严格走第 1 节的七步循环;跳过"备场/记录/提炼"任一步视为实验未完成。
- 步骤级留痕(硬约束):实验的每个步骤执行后,立即更新实验报告的"实验记录"段与相关文档(经验/资产/分册排障节),不允许实验全部做完后凭记忆补写。
- 阶段完结发布(硬约束):每阶段出关时执行第 1 节"阶段完结发布流程"四步——git commit+push 到 Gitee ops-lab → 重建并发布 docs.nopcloud.com → 更新继续点;未推送未发布视为阶段未完结。
- 时间盒:实验限时 60 分钟(排障 90 分钟),到时按 §2.5 就地收尾为"未达成",不无限调试;备场时执行 §2.6 资源检查。
- 失败不硬扛:未达成就如实归档(含已排除项),进回炉池;连续 2 次失败换路径或跳过并标注,不阻塞整体进度。
- 产物落盘约束(硬性):实验的一切产物——文档、报告、脚本、配置、YAML、下载的安装包、导出文件(box/tar 等)——只能保存在
F:\EricLiu\之下,禁止写到桌面、下载、文档、用户主目录、C 盘其他位置或系统临时目录。临时文件放F:\EricLiu\tmp\并在实验收尾时清理。运行时存储例外(不属实验产物):Hyper-V 虚拟机磁盘默认路径、Vagrant box 缓存(%USERPROFILE%\.vagrant.d)、VM 内的 Docker 镜像存储(/var/lib/docker)。 - 目录分工:文档类 →
F:\EricLiu\Docs\;复用资产 →F:\EricLiu\Docs\Reusable\;各技术实验文件 →F:\EricLiu\Docs\<技术>\labs\;Vagrant 工作环境 →F:\EricLiu\Envs\<环境名>\;临时文件 →F:\EricLiu\tmp\。 - 复用闭环:动手前先查
Reusable\INDEX.md;实验结束必须提炼 ≥1 项资产入库并登记索引,纯口头总结不算沉淀。 - 经验库强制:每次实验结束主动询问是否更新 EXPERIENCE.md;踩坑条目 AI 直接代填初稿。
- 进度追踪:每阶段结束在本文档勾选 checkbox、更新"下次从哪继续"(见下)。
- 下次继续点:__(每次会话结束时 AI 更新此处,如"阶段 4 · E04-06 探针实验待做")