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