2. K8s 核心架构回顾:Master 节点组件、Worker 节点组件、Pod 与容器运行时、网络模型 (CNI)

在进行容量调优之前,必须对 Kubernetes 的核心架构有清晰的认识。容量瓶颈往往隐藏在组件交互的边界上。本章从 Master 节点、Worker 节点、Pod 与运行时、网络模型四个维度,梳理关键组件及其职责。

2.1 Master 节点组件

Master 节点是集群的控制平面,负责全局决策和状态管理。其组件的高可用与性能直接决定集群的调度效率和稳定性。

组件核心职责容量关注点
kube-apiserver所有组件交互的网关,提供 RESTful API,负责认证、授权、准入控制请求吞吐量、etcd 读写延迟、连接数
etcd分布式键值存储,保存集群所有状态数据磁盘 IOPS、存储容量、网络延迟、快照大小
kube-scheduler监听未调度的 Pod,根据资源需求和策略绑定到合适节点调度队列深度、节点过滤/打分耗时
kube-controller-manager运行各类控制器(如 Node Controller、Deployment Controller)控制器循环频率、资源缓存大小
容量调优提示: kube-apiserver 是请求入口,建议配置 --max-requests-inflight 和 --max-mutating-requests-inflight 参数防止过载;etcd 建议使用 SSD 并定期压缩历史版本(--auto-compaction-retention)。

2.2 Worker 节点组件

Worker 节点承载实际工作负载。每个节点上运行三个核心代理组件,它们之间的协作效率决定了 Pod 的生命周期管理质量。

  • kubelet:节点上的主要代理,负责管理 Pod 生命周期、健康检查、资源上报。容量瓶颈通常出现在 Pod 密度过高时的状态同步延迟。
  • kube-proxy:维护节点上的网络规则,实现 Service 的负载均衡。iptables 模式在大规模 Service 下规则更新慢,IPVS 模式性能更优。
  • 容器运行时(Container Runtime):负责拉取镜像、启动/停止容器。常见运行时包括 containerd、CRI-O。
常见误区: 很多团队只关注 Master 组件的高可用,却忽略 Worker 节点上 kubelet 的 --max-pods 限制。当节点 Pod 数量超过阈值时,kubelet 会拒绝创建新 Pod,导致调度失败。

2.3 Pod 与容器运行时

Pod 是 Kubernetes 中最小的调度单元,一个 Pod 内可包含一个或多个容器,共享网络命名空间和存储卷。容器运行时通过 CRI(Container Runtime Interface)与 kubelet 交互。

概念说明容量影响
Pod 资源请求(Requests)调度时保证的最小资源量决定节点可调度 Pod 数量
Pod 资源限制(Limits)容器可使用的资源上限影响 CPU 压缩和 OOM 风险
容器运行时镜像层镜像分层存储,共享基础层磁盘空间占用、拉取时间
Pod 生命周期钩子PostStart / PreStop优雅终止时长影响滚动更新速度
# 查看节点上容器运行时信息
kubectl get nodes -o wide
# 检查 kubelet 配置中的 maxPods
kubectl describe node <node-name> | grep -i pods

2.4 网络模型 (CNI)

Kubernetes 网络模型要求每个 Pod 拥有独立的 IP,且 Pod 之间可以直接通信,无需 NAT。CNI(Container Network Interface)插件负责实现这一模型。

常见 CNI 插件对比:

CNI 插件网络模式性能特点适用场景
CalicoBGP / VXLAN原生 BGP 性能高,VXLAN 封装有开销大规模集群、网络策略严格
FlannelVXLAN / host-gw简单易用,host-gw 模式性能好中小规模、快速部署
CiliumeBPF极高吞吐,低延迟,可观测性强高性能需求、安全敏感
Weavefastdp / weave加密通信,跨云支持好多云/混合云场景
容量调优关键: CNI 插件的选择直接影响网络吞吐和延迟。在容量规划时,需评估 Pod 间通信的带宽需求,避免 VXLAN 封装带来的额外 CPU 开销。建议使用 eBPF 或 host-gw 模式减少网络栈层次。
Kubernetes 核心架构组件关系图 Master 节点 etcd kube-apiserver kube-scheduler kube-controller-manager Worker 节点 kubelet kube-proxy 容器运行时 Pod 组 容器 A 容器 B 容器 C CNI 网络(Pod IP 通信) API 通信

2.5 组件交互流程总结

理解组件间的数据流有助于定位容量瓶颈。以下是一个 Pod 创建请求的典型流程:

  1. 用户通过 kubectl 或 API 调用向 kube-apiserver 提交 Pod 定义。
  2. apiserver 将 Pod 对象写入 etcd 持久化。
  3. kube-scheduler 通过 watch 机制获取未调度的 Pod,执行过滤和打分,选择最优节点。
  4. 调度结果写回 apiserver,apiserver 更新 etcd。
  5. kubelet 在目标节点上监听到新的绑定信息,调用 容器运行时 启动 Pod 内的容器。
  6. kube-proxy 更新节点上的网络规则,确保 Service 流量能到达新 Pod。
  7. CNI 插件 为 Pod 分配 IP 并配置网络接口。