容器 37:从源码到一次真实服务响应
本系列的每个对象都有不同寿命:源码树变化不等于已部署镜像改变;Pod 重建不等于数据卷重建;HTTP 请求成功也不能证明读写结果符合预期。综合实验必须让一条请求沿同一个 digest、容器 ID、Pod UID、宿主 PID、namespace/cgroup、网络路径和卷挂载回溯到源码,而不是把不同实验的截图接成故事。
只用一份 probe-app
从干净的实验目录取独立源码包并校验 SHA,固定基础镜像 digest,按13构建真实镜像,按12分发到受控 registry,再按26将 digest 部署到自建 kind 节点。通过 Service 访问 /identity 取得进程信息,通过 /state 写入一段最多 4096 字节的合成文本;从 Pod UID 到容器 ID、宿主 PID,查 namespace inode、cgroup、网络地址/路由及卷的 mountinfo,最后在同一卷上重建 Pod 后复读内容。每一步记录输入、时间、原始响应与校验值,不能从“yaml 配好了”跳到“持久化成功”。
正常案例需要请求 JSON 中的 PID 和 UID 与节点对象一一对应,合成数据重建后可验证;边界案例让容器只能在 127.0.0.1 监听或改掉卷挂载,前者的服务入口不可达,后者“相同 URL 返回的数据”可能来自另一可写层。对照若缺任何中间对象,都须在证据链上标一个断点,不填预测 PID 或 digest。验证清单列出专用环境、清理与补跑;本机没有 registry、运行时/kind、卷与真实容器网络,完整端到端验收 NOT_RUN。本机 00/10 的独立小实验不能合并成一次全链路记录。
| 现象 | 沿链追溯 | 能否成立 |
|---|---|---|
| HTTP 200 | 响应体与请求 ID、Pod UID | 不保证写盘持久化 |
| UID 与容器 ID 对不上 | Pod 重建/滚动更新 | 切勿拼接两代日志 |
| 卷上仍有数据 | mount 源、文件校验 | 需证明同一卷 |
练习
- 先预测同名 Pod 重建后哪些 ID 必换、哪些 digest 可以保持;逐项读取,标记能复用与会重建的对象。
- 先预测把 state-dir 改到容器可写层后请求仍返回 200,但 Pod 重建后的数据会怎样;记录文件、挂载源与请求输出核实。
上一篇:36:交付与回退;下一篇:38:故障与业务结果。
系列总目录:从进程隔离到运行时与编排。
参考资料
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.


