kubelet 的主要工作就是:确保节点上运行的 Pod 都处于其“期望的状态”

这个“期望的状态”是由 Kubernetes 的控制平面(特别是 API Server)中存储的 Pod 定义(如 YAML 文件)所描述的。

kubelet 的主要职责

1. Pod 生命周期管理

这是 kubelet 最核心的职责。它负责:

  • 创建 Pod: 从 API Server 获取分配给本节点的 Pod 清单,并按照描述创建 Pod。

  • 启动容器: 通过容器运行时(如 Docker、containerd)拉取镜像并启动容器。

  • 保持运行: 持续监控 Pod 内容器的健康状态,如果容器意外终止,kubelet 会尝试重启它。

  • 终止 Pod: 当 API Server 通知需要删除 Pod 时(例如,滚动更新、缩容),kubelet 会优雅地终止容器,并清理资源。

2. 与 API Server 的持续通信(心跳机制)

kubelet 充当着节点与控制平面之间的桥梁:

  • 节点状态报告: 定期向 API Server 发送心跳消息(/healthz),报告节点的健康状况。如果 API Server 长时间收不到某个节点的心跳,就会认为该节点不健康,并将其标记为 NotReady

  • 资源汇报: 向 API Server 报告节点的资源容量和可分配资源(如 CPU、内存、磁盘空间)。这样调度器(kube-scheduler)才能做出明智的决策,知道该把 Pod 调度到哪个节点上。

3. 执行容器健康检查

kubelet 负责执行在 Pod 定义中配置的探针(Probes):

  • 存活探针(Liveness Probe): 判断容器是否“活着”。如果检查失败,kubelet 会杀死该容器并根据重启策略决定是否重启。

  • 就绪探针(Readiness Probe): 判断容器是否“准备好”接收流量。如果检查失败,kubelet 会将该 Pod 从关联的 Service 的端点列表中移除,确保流量不会被发送到尚未准备好的 Pod。

  • 启动探针(Startup Probe): 用于应对启动缓慢的容器,在容器启动阶段提供保护。

4. 管理容器镜像

  • 拉取镜像: 根据 Pod 定义中的镜像地址,从镜像仓库拉取容器镜像。

  • 镜像垃圾回收: 定期清理节点上未被使用的镜像,以释放磁盘空间。

5. 管理容器日志和存储卷

  • 日志收集: 负责收集容器的标准输出和标准错误日志,并(通常)传递给日志驱动进行处理。

  • 挂载存储卷: 按照 Pod 定义,为容器准备和挂载指定的存储卷(如 NFS、云存储、ConfigMap、Secret 等)。

6. 与容器运行时交互

kubelet 不直接操作容器,而是通过 容器运行时接口(CRI) 来与底层的容器引擎(如 containerd、CRI-O)进行通信,从而执行创建、启动、停止容器等操作。

工作流程简化模型

  1. 监听: kubelet 持续监听(Watch)API Server,看是否有新的 Pod 被调度到本节点。

  2. 获取: 当发现有新的 Pod 需要运行,它从 API Server 获取该 Pod 的配置清单。

  3. 执行: kubelet 调用容器运行时,按照清单描述拉取镜像、创建容器、挂载存储卷、设置网络等。

  4. 监控: Pod 运行后,kubelet 持续监控其状态,执行健康检查。

  5. 报告: kubelet 将 Pod 的实时状态(运行中、失败、已终止等)报告回 API Server。

  6. 修正: 如果发现某个 Pod 的实际状态与期望状态不符(例如,容器崩溃了),kubelet 会采取行动(例如,重启容器)来修正状态。

重要特性:静态 Pod(Static Pod)

kubelet 有一个特殊的能力:它可以独立于 API Server 直接管理一种叫做“静态 Pod”的 Pod。静态 Pod 的 YAML 文件直接存放在节点的特定目录(如 /etc/kubernetes/manifests)中。

  • 作用: 这对于引导 Kubernetes 控制平面本身至关重要。例如,kube-apiserverkube-schedulerkube-controller-manager 等核心组件本身通常就是以静态 Pod 的形式运行的。

  • 过程: kubelet 会监控这个目录,发现文件后自动创建 Pod。同时,它还会在 API Server 中创建一个“镜像”Pod 对象,以便你可以通过 kubectl get pods 看到它们,但你无法通过 kubectl 删除它们,必须从节点上的 manifest 目录中删除文件。

总结

特性解释
身份每个节点上的节点代理,Kubernetes 的“手臂”和“眼睛”。
核心任务保障 Pod 处于期望状态
沟通对象与控制平面的 API Server 通信,与节点的 容器运行时 交互。
关键职责Pod 生命周期管理、健康检查、状态报告、资源监控。
特殊能力管理静态 Pod,用于部署控制平面组件。

简单来说,没有 kubelet,节点就无法加入 Kubernetes 集群,也无法运行任何工作负载。 它是连接宏伟的集群控制平面与具体节点执行层面的关键纽带。

更多推荐