kubelet 是每个节点上的主要
"节点代理",负责创建和监视 Pod。kubelet 运行一个同步循环,周期性地将期望状态(Pod 规约)
与运行中容器的实际状态进行协调。
nodeName 与节点匹配)的
Pod 的工作(从多个来源聚合)排入队列。在每次循环过程中,被称为 Pod 工作器(Pod Worker)
的子进程会尝试将这些 Pod 的期望状态与运行中容器的当前状态进行协调。kubelet 的大部分逻辑存储在 podSyncer 接口中的一组函数里,
包括 SyncPod 函数及其变体(如 SyncTerminatingPod 和 SyncTerminatedPod)。
在每次同步循环中,每个 Pod 都会执行一个相关的 podSyncer 函数,
尝试将节点上的 Pod 状态驱动到期望状态。kubelet 使用 CRI 与容器运行时(如 containerd 或 CRI-O)通信。
kubelet 作为客户端,指示运行时创建 "Pod 沙箱",然后按照 Pod 规约中的
定义创建/启动各个容器。kubelet 需要知道容器何时启动、停止或失败。
它依赖一个名为 PLEG 的组件,周期性地轮询运行时以获取所有容器的标准状态。
PLEG 生成的事件会唤醒同步循环以更新 Pod 状态。由于这种轮询机制,通过 API 看到的状态(如 kubectl get pod)
相比节点上的即时实际情况可能会有轻微延迟。