kubernetes(k8s)-kubelet
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)进行通信,从而执行创建、启动、停止容器等操作。
工作流程简化模型
-
监听: kubelet 持续监听(Watch)API Server,看是否有新的 Pod 被调度到本节点。
-
获取: 当发现有新的 Pod 需要运行,它从 API Server 获取该 Pod 的配置清单。
-
执行: kubelet 调用容器运行时,按照清单描述拉取镜像、创建容器、挂载存储卷、设置网络等。
-
监控: Pod 运行后,kubelet 持续监控其状态,执行健康检查。
-
报告: kubelet 将 Pod 的实时状态(运行中、失败、已终止等)报告回 API Server。
-
修正: 如果发现某个 Pod 的实际状态与期望状态不符(例如,容器崩溃了),kubelet 会采取行动(例如,重启容器)来修正状态。
重要特性:静态 Pod(Static Pod)
kubelet 有一个特殊的能力:它可以独立于 API Server 直接管理一种叫做“静态 Pod”的 Pod。静态 Pod 的 YAML 文件直接存放在节点的特定目录(如 /etc/kubernetes/manifests)中。
-
作用: 这对于引导 Kubernetes 控制平面本身至关重要。例如,
kube-apiserver、kube-scheduler、kube-controller-manager等核心组件本身通常就是以静态 Pod 的形式运行的。 -
过程: kubelet 会监控这个目录,发现文件后自动创建 Pod。同时,它还会在 API Server 中创建一个“镜像”Pod 对象,以便你可以通过
kubectl get pods看到它们,但你无法通过kubectl删除它们,必须从节点上的 manifest 目录中删除文件。
总结
| 特性 | 解释 |
|---|---|
| 身份 | 每个节点上的节点代理,Kubernetes 的“手臂”和“眼睛”。 |
| 核心任务 | 保障 Pod 处于期望状态。 |
| 沟通对象 | 与控制平面的 API Server 通信,与节点的 容器运行时 交互。 |
| 关键职责 | Pod 生命周期管理、健康检查、状态报告、资源监控。 |
| 特殊能力 | 管理静态 Pod,用于部署控制平面组件。 |
简单来说,没有 kubelet,节点就无法加入 Kubernetes 集群,也无法运行任何工作负载。 它是连接宏伟的集群控制平面与具体节点执行层面的关键纽带。
更多推荐
所有评论(0)