工作节点与 kubelet / kube-proxy / 容器运行时
本教程共 65 篇 · 第 6 篇 · 更新于 2026-08-14 · 约 12 分钟阅读
本节目标:搞清楚工作节点上跑着的三个组件各自干啥,以及容器运行时为什么不再是 Docker。
控制平面负责”想”,工作节点负责”做”。这章我们下到车间,看三个一线组件:kubelet、kube-proxy、容器运行时。
6-1 工作节点是啥
工作节点(Node)就是一台真实机器(物理机或虚拟机)。集群里通常有若干台,Pod 最终都跑在它们上面。每个节点上都固定有三件套,缺一个都跑不起来。
Note节点怎么加入集群?两种方式:一是节点上的 kubelet 启动时自动向控制平面”自注册”;二是你手动创建一个 Node 对象。绝大多数发行版用自注册。
6-2 kubelet:节点上的驻场管家
kubelet 是每个 Node 上必须有的代理程序。它的职责很聚焦:保证本机上的 Pod 真的按预期运行。
具体来说:
- 它接收控制平面下发的”Pod 清单”,然后去请容器运行时把容器跑起来。
- 它持续汇报本节点的状态(CPU、内存、Pod 情况)给控制平面。
- 它盯着本机的 Pod,发现容器挂了就重启,让实际状态尽量贴近期望。
Tipkubelet 只认”Pod 清单”,不认你的业务逻辑。你可以把它想成车间里的工长:上面交代”这条线要 3 个工人”,它就盯着凑齐 3 个,少一个补一个。
节点还能被标记为”不可调度(cordon)“,这时候调度器就不会再往上面放新 Pod,但已有的 Pod 照常跑。这常用于节点维护前的准备。
6-3 容器运行时:真正拉起容器的引擎
容器运行时(Container Runtime)是真正负责拉镜像、起容器、管容器生命周期的软件。
这里有个很多人会踩的坑,我重点说:k8s 从 v1.24 起移除了 dockershim,不再直接对接 Docker。
那现在用什么?标准答案是符合 CRI(容器运行时接口) 的运行时,最主流的两个是:
- containerd:从 Docker 里拆出来的核心运行时,轻量、稳定,目前最常用。
- CRI-O:专为 k8s 设计的轻量运行时。
Warning看到旧教程写”k8s 用 Docker 跑容器”,要更新认知了。现在 k8s 通过 CRI 标准接口调用运行时,底层可以是 containerd、CRI-O,而不再直接依赖 Docker。Docker 自己仍可作为开发工具使用,但它不再是 k8s 节点的必需组件。
6-4 kube-proxy:节点上的网络接线员
kube-proxy 在每个节点上维护网络规则,让 Service(服务) 的流量能正确转发到后端的 Pod。
它是怎么工作的?当集群里创建一个 Service,kube-proxy 会在本机配置相应的转发规则(基于 iptables 或 IPVS)。用户的请求打到 Service 的虚拟 IP,就被规则分流到具体的 Pod 上。
NoteService 是 k8s 里”稳定访问入口”的概念,后面服务与网络章节会专门讲。这里你只需知道:没有 kube-proxy 的转发,Service 就接不到流量。
有个细节:如果用某些实现了自己转发逻辑的网络插件,节点上可以不跑 kube-proxy。官方把它标为”可选”,但对绝大多数学习者来说,它默认就在。
6-5 顺带认识两个接口标准
讲节点绕不开两个缩写,提前混个脸熟:
- CRI(容器运行时接口):kubelet 通过它和容器运行时对话。正因为有了 CRI,你才能自由换 containerd、CRI-O,而不被某一家绑定。
- CNI(容器网络接口):网络插件通过它给 Pod 分配 IP、打通 Pod 间通信。Flannel、Calico 这些都实现了 CNI。
Tip一句话记:CRI 管”容器怎么跑”,CNI 管”Pod 怎么联网”。两者都是”标准化接口”,让 k8s 不必写死具体实现。
6-6 节点状态与容量是怎么回事
控制平面怎么知道一台节点”还活着、还能扛活”?靠两样:
- 心跳:节点定期上报自己的状态,另外在
kube-node-lease命名空间里有个 Lease 对象,用来快速判断节点是否失联。节点控制器默认每 5 秒检查一次。 - 容量(Capacity):节点上报自己有多少 CPU、内存。调度器放 Pod 时,会累加这台机器上已有容器的请求量,不能超容量。
如果节点失联,节点控制器先把它标记为 Unknown,等一段宽限时间(默认约 5 分钟)后,把上面的 Pod 驱逐到别的节点。所以”机器坏了业务不中断”,底层就是这套心跳+驱逐机制在撑着。
Note想看节点详情,敲
kubectl describe node <节点名>,里面Conditions告诉你节点健不健康,Capacity/Allocatable告诉你资源上限。排查”Pod 调度不上去”时,这俩字段最常被看。
小结
节点上的三件套再念一遍:kubelet 听指挥管 Pod、容器运行时(containerd/CRI-O)真正跑容器、kube-proxy 管网络转发。CRI 管容器怎么跑、CNI 管 Pod 怎么联网,都是标准接口。节点靠心跳和容量上报维持健康。到此,k8s 的”骨架”你已经看完了:控制平面四件套 + 节点三件套。从下一章起,我们动手把这套东西在本地跑起来。