Kubelet 是运行在 Kubernetes 集群中每个节点上的关键代理。它的主要职责是通过持续监控节点状态并与容器运行时交互,确保 pod 中的容器按预期运行。


Kubelet 代理与 Kubernetes API 服务器通信,以获取必要的 pod 规格。然后,它将确保 pod 规范中描述的容器运行健康。下面举例说明 Kubelet 如何与 API 服务器和容器运行时交互,以管理节点上的 pod。

[代码清单]

# Simulate a Kubelet's interaction with the API server
kubectl get pods --all-namespaces -o wide
# Example output shows the status of all pods in the cluster, which is similar to what the Kubelet processes

[执行结果]

NAMESPACE   NAME                 READY  STATUS  RESTARTS  AGE  IP       NODE      NOMINATED NODE  READINESS GATES
default    example-pod             1/1   Running  0     3m  192.168.1.12  worker-node-1 <none>      <none>

Kubelet 会持续轮询节点上的容器运行时,以确保 pod 定义中指定的容器正在运行。如果容器发生故障或意外停止,Kubelet 会根据 pod 的重启策略重新启动它。Kubelet 还负责向 Kubernetes 控制平面报告节点的健康状态和资源使用情况,以便 Kubernetes 做出调度和扩展决策。当你在 Kubernetes 中部署应用时,每个节点上的 Kubelet 都会确保应用的容器正在运行。它通过监控 pod 的状态并与容器运行时(如 Docker 或 containerd)交互来实现这一目标。Kubelet 只关心作为 Kubernetes pod 一部分的容器,它不会管理在 Kubernetes 外部启动的任何容器。

[小知识]

Kubelet 使用一个名为 “节点心跳 ”的程序,定期向 Kubernetes API 服务器报告节点是否健康、运行是否正常。心跳每隔几秒发送一次。如果 Kubernetes 控制平面在一定时间内(默认为 40 秒)没有收到来自某个节点的心跳,它就会将该节点标记为 “未就绪”(NotReady),该节点上的任何 pod 可能会被重新安排到其他节点上。