Kubernetes Kubelet 工作原理详解:Node 节点上的核心管家¶
文章摘要¶
Kubelet 是运行在每个 Kubernetes 节点上的核心组件。
如果说 Scheduler 负责决定 Pod 应该运行在哪个节点,那么 Kubelet 则负责真正创建、监控和维护这些 Pod。
本文将从节点注册、Pod 创建流程、状态上报、健康检查以及故障排查等多个角度,全面解析 Kubelet 的工作原理。
学习目标¶
阅读完本文后,你将掌握:
- Kubelet 的作用和职责
- Kubelet 在 Kubernetes 中的位置
- Pod 创建完整流程
- Kubelet 与 Container Runtime 的关系
- 节点心跳机制
- Pod 健康检查原理
- 常见 Kubelet 故障排查方法
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云计算学习者
- Kubernetes 面试准备人员
什么是 Kubelet?¶
如果把 Kubernetes 集群比作一家物流公司:
| 角色 | Kubernetes组件 |
|---|---|
| 调度中心 | Scheduler |
| 仓库 | Node |
| 仓库管理员 | Kubelet |
| 工人 | Container Runtime |
| 包裹 | Pod |
Scheduler 决定:
而真正执行工作的:
也就是:
Kubelet 在 Kubernetes 中的位置¶
API Server
│
▼
Scheduler
│
▼
Pod绑定节点
│
▼
┌─────────────────────────────┐
│ Node01 │
│ │
│ Kubelet │
│ │ │
│ ▼ │
│ Containerd │
│ │ │
│ ▼ │
│ Pod运行 │
└─────────────────────────────┘
Kubelet 运行在每个 Worker Node 上。
每个节点都必须有自己的 Kubelet。
Kubelet 的核心职责¶
Kubelet 主要负责:
- 向集群注册节点
- 创建 Pod
- 管理容器生命周期
- 执行健康检查
- 上报节点状态
- 上报 Pod 状态
- 挂载存储卷
- 获取 Secret 和 ConfigMap
简单来说:
Kubelet 负责把 Kubernetes 配置变成实际运行的容器。
Kubelet 启动后做什么?¶
当 Kubelet 服务启动后:
首先会向 API Server 注册自己。
节点注册¶
Kubelet:
向 API Server 发起注册请求。
API Server 创建:
资源对象。
此时:
可以看到:
Pod 创建完整流程¶
这是理解 Kubelet 最重要的一部分。
第一步:创建 Deployment¶
用户执行:
第二步:Controller 创建 Pod¶
Deployment Controller 创建 Pod 对象。
第三步:Scheduler 完成调度¶
Scheduler 选择:
并写入:
第四步:Kubelet 发现任务¶
Node01 上的 Kubelet 一直在 Watch API Server。
发现:
第五步:获取 Pod 配置¶
Kubelet 获取:
等信息。
第六步:调用 Container Runtime¶
例如:
或者:
Kubelet 并不会直接创建容器。
而是通过 CRI 调用运行时。
第七步:拉取镜像¶
例如:
如果本地不存在:
第八步:创建容器¶
Container Runtime:
最终启动容器。
第九步:状态上报¶
Kubelet 向 API Server 汇报:
用户查看:
即可看到:
Kubelet 与 Container Runtime 的关系¶
很多新手容易混淆:
实际上并不是。
Kubelet¶
负责:
Container Runtime¶
负责:
关系如下:
Kubelet 的心跳机制¶
为什么:
能够实时看到:
状态?
原因就是 Kubelet 的心跳机制。
定期汇报状态¶
Kubelet 会持续向 API Server 发送:
等节点信息。
正常状态¶
网络故障¶
如果 API Server 长时间收不到心跳:
Controller Manager 接管¶
Node Controller 发现:
后开始驱逐 Pod。
实现故障恢复。
Pod 健康检查¶
Kubelet 负责执行:
Liveness Probe¶
检测:
失败后:
Readiness Probe¶
检测:
失败后:
Startup Probe¶
检测:
适用于:
启动时间较长场景。
Kubelet 如何管理 Pod 生命周期?¶
Pod 生命周期:
整个过程中:
Kubelet 持续监控状态变化。
Kubelet 与 ETCD 的关系¶
很多人误认为:
实际上:
Kubelet 不会直接访问 ETCD。
所有数据交互都通过 API Server。
生产环境常见问题¶
Pod 一直 ContainerCreating¶
查看:
可能出现:
或者:
Node NotReady¶
查看:
确认服务是否正常。
镜像拉取失败¶
查看:
可能出现:
磁盘空间不足¶
Kubelet 会触发:
节点状态。
内存不足¶
触发:
系统可能开始驱逐 Pod。
运维排查命令¶
查看服务状态:
查看日志:
查看节点:
查看节点详情:
查看 Pod 事件:
面试常见问题¶
Kubelet 的作用是什么?¶
负责管理节点上的 Pod 和容器。
Kubelet 会直接创建容器吗?¶
不会。
由 Container Runtime 创建。
Kubelet 如何获取任务?¶
通过 Watch API Server 获取资源变化。
Node NotReady 是谁发现的?¶
Controller Manager 发现。
但状态由 Kubelet 上报。
Kubelet 会直接访问 ETCD 吗?¶
不会。
所有数据通过 API Server。
FAQ¶
每个节点都需要 Kubelet 吗?¶
需要。
没有 Kubelet 就无法运行 Pod。
Kubelet 宕机会怎样?¶
已经运行的容器可能继续运行。
但节点状态无法更新。
新的 Pod 无法创建。
Docker 被移除后 Kubelet 还能工作吗?¶
可以。
当前主流运行时:
- Containerd
- CRI-O
总结¶
Kubelet 是 Kubernetes 节点上的核心管理组件。
它负责:
- 节点注册
- Pod 创建
- 容器管理
- 状态上报
- 健康检查
如果说:
那么 Kubelet 就是 Kubernetes 工作负载最终落地执行的关键组件。