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 一对一

练习

  1. 预测删除重建同名 Pod 时 UID、sandbox ID 与进程 PID 怎样变化,在专用集群采集全链,解释哪些值不能从名字推导。
  2. 预测网络插件 ADD 失败与应用 exec 失败分别在哪一层产生事件,保存 CRI 和 Pod 事件、宿主对象与清理过程。

上一篇:25:跨主机网络;下一篇:27:资源到节点。

系列总目录:从进程隔离到运行时与编排。

参考资料