kubelet 与 kube-proxy
节点上的两大执行者
底座认知 · 第 07 篇
kubelet 管生命周期,kube-proxy 管网络转发
目 录
一、kubelet:节点的「主代理」
1.1 核心职责
1.2 与运行时协作
二、kube-proxy:Service 的实现者
2.1 两种模式
2.2 Service 类型
三、数据面的排障要点
3.1 kubelet 相关
3.2 kube-proxy 相关
一、kubelet:节点的「主代理」
kubelet 是运行在每个节点上的核心代理,负责把节点纳入集群并管理其上的 Pod 生命周期。它通过 CRI(容器运行时接口) 与容器运行时(containerd)通信。
1.1 核心职责
- 接收 apiserver 分配的 Pod,驱动运行时创建与运行容器
- 执行容器的健康检查(liveness / readiness / startup)
- 定期向 apiserver 上报节点状态(心跳)与 Pod 状态
- 管理节点上的 Volume 挂载、Pod 的资源配置(通过 cgroup)
1.2 与运行时协作
kubelet 通过 CRI 调用 containerd,containerd 再通过 shim 与 runc 等底层运行时协作,最终创建容器。排查容器创建失败时,常需依次查看 kubelet 日志与 containerd 日志。
二、kube-proxy:Service 的实现者
kube-proxy 运行在每个节点上,负责实现 Service 的流量转发与负载均衡,让集群内外的请求能够访问到后端的 Pod。
2.1 两种模式
模式 | 原理 | 适用 |
iptables | 通过 iptables 规则逐条实现转发 | 默认,规则量大时性能下降 |
ipvs | 内核级 IPVS 负载均衡 | 高并发,规则高效 |
在节点上修改 Service 后,iptables 或 ipvs 规则会随之更新,将发往 Service VIP(虚拟 IP)/ClusterIP 的流量转发到后端 Pod。
2.2 Service 类型
- ClusterIP:集群内部虚拟 IP,默认类型
- NodePort:在节点开放端口,集群外可通过 节点IP:NodePort 访问
- LoadBalancer:借助云负载均衡器对外暴露
- ExternalName:将 Service 映射到外部域名
三、数据面的排障要点
3.1 kubelet 相关
- journalctl -u kubelet -f:查看 kubelet 日志
- kubectl get node:节点 Ready 与否由 kubelet 心跳决定
- crictl ps / crictl logs:查看容器运行状态与日志
3.2 kube-proxy 相关
- iptables -t nat -L -n:查看 iptables 转发规则
- ipvsadm -Ln:查看 ipvs 规则(ipvs 模式下)
- Pod 之间访问不通,先查 Service 的 Endpoint / EndpointSlice 是否就绪
理解数据面后,最后一篇将把这些组件串起来,看一次 kubectl apply 在集群中到底经历了什么。