容器 26:Pod 到达节点后变成哪些对象
Pod 对象已分配给节点之后,如何找到真正处理请求的宿主进程?把17 的 OCI runtime、18 的任务和24 的插件网络连接起来,比重新罗列 Kubernetes 对象名更有用。已有Kubernetes 核心概念是词汇入口,这一篇只追踪节点上从声明到执行的对象关系。
一条可核查的身份链
kubelet 观察已分配到本节点的 Pod,通过 CRI 与节点上的容器运行时交互;CRI 对 sandbox 和容器的生命周期建模,不是 OCI 的 create/start 原样 RPC,也不是 CNI 的网络设备实现。具体 runtime 为 Pod sandbox 准备网络等环境,创建应用容器,向更低层传入符合本机实现的执行配置。每一步要记录 Pod UID、sandbox ID、容器 ID、宿主 PID,再读该 PID 的 namespace inode 和 cgroup 路径;containerd 的 namespace 与 Kubernetes Namespace 不能替代这条身份链。Pod 名称可被重建而复用,不能只靠显示名称关联旧进程。
正常案例应在专用 kind VM 中把 probe-app 的 image digest 写入 Pod 定义,检查 UID、CRI sandbox/容器 ID、宿主 PID、镜像 digest 与 /identity;负例将入口改成不存在路径,对照 sandbox 能否先建立而业务容器反复失败,结合事件区分镜像阶段、sandbox 阶段与应用阶段。所选 kubelet、containerd、CNI 插件的版本与实现源码需按节点实际版本锁定;滚动文档不构成本机源码审计。节点取证命令和探针源码可独立取得。本云端没有 kind/kubelet/containerd/CNI,整条对象关联 NOT_RUN。
| 现象 | 首先查 | 前提 |
|---|---|---|
| Pod 名未变、进程已换 | Pod UID、容器 ID、宿主 PID | 名称不是进程 ID |
| sandbox 存在、应用失败 | CRI 状态、镜像及应用日志 | sandbox 成功不等于服务成功 |
| 看到一只 shim | 运行时版本与任务分组 | 不推断所有 Pod 一对一 |
练习
- 预测删除重建同名 Pod 时 UID、sandbox ID 与进程 PID 怎样变化,在专用集群采集全链,解释哪些值不能从名字推导。
- 预测网络插件 ADD 失败与应用
exec失败分别在哪一层产生事件,保存 CRI 和 Pod 事件、宿主对象与清理过程。
系列总目录:从进程隔离到运行时与编排。

