2. K8s核心架构回顾:控制平面组件、工作节点组件、Pod与容器运行时、网络与存储插件
在深入容量调优之前,必须对Kubernetes核心架构的每一层组件有精确理解。控制平面负责全局决策与状态管理,工作节点负责运行实际负载,Pod是调度的最小原子,而网络与存储插件则决定了平台的数据面能力。本节从这四个维度展开,为后续的容量模型与RBAC策略设计奠定基础。
2.1 控制平面组件
控制平面(Control Plane)是K8s集群的“大脑”,所有集群状态变更、调度决策、控制器循环均在此完成。以下表格列出核心组件及其职责:
| 组件 | 进程名 | 核心职责 | 容量关注点 |
|---|---|---|---|
| kube-apiserver | kube-apiserver | RESTful API入口,认证/授权/准入控制,etcd唯一读写端 | 请求QPS、内存缓存大小、etcd连接池 |
| kube-scheduler | kube-scheduler | 监听未调度的Pod,基于资源请求与策略绑定到Node | 调度队列深度、预选/优选算法耗时 |
| kube-controller-manager | kube-controller-manager | 运行ReplicaSet/Deployment/Node等控制器,维持期望状态 | 控制器循环频率、informer缓存大小 |
| etcd | etcd | 分布式键值存储,保存所有集群数据 | 磁盘IOPS、WAL写入延迟、DB大小 |
| cloud-controller-manager | cloud-controller-manager | 对接云厂商LB/存储/路由API(可选组件) | 云API调用频率、限频重试 |
容量调优提示: kube-apiserver 是控制平面的瓶颈热点。建议将 apiserver 的
--max-requests-inflight 和 --max-mutating-requests-inflight 根据集群规模调整为 800/400 以上,并启用 --enable-priority-and-fairness 防止突发流量打垮 etcd。
2.2 工作节点组件
每个工作节点(Node)运行三个核心代理,负责执行控制平面下发的指令并上报节点状态:
- kubelet:节点上的主要代理,负责管理Pod生命周期、健康检查、资源统计上报。通过cAdvisor内置采集容器CPU/内存/网络/磁盘指标。
- kube-proxy:维护节点上的网络规则,实现Service的ClusterIP/NodePort/LoadBalancer转发。通常基于iptables或IPVS模式。
- 容器运行时(Container Runtime):负责拉取镜像、启动/停止容器。常见实现包括containerd、CRI-O、Docker Engine(已弃用)。
容量关键指标: kubelet 的
--kube-api-qps 默认仅 5,大规模集群下容易导致Pod状态上报延迟。建议调至 15~20;同时关注 kubelet_node_status_update_frequency_seconds 指标,若超过 30s 说明节点心跳压力过大。
2.3 Pod与容器运行时
Pod是K8s中可调度的最小原子单元,一个Pod内可包含一个或多个容器,共享同一网络命名空间、存储卷和IPC命名空间。容器运行时通过CRI(Container Runtime Interface)与kubelet对接。
Pod的QoS(服务质量)等级直接影响调度与驱逐策略:
| QoS等级 | 资源定义方式 | 驱逐优先级 | 典型场景 |
|---|---|---|---|
| Guaranteed | 所有容器requests == limits | 最低(最后被驱逐) | 数据库、关键中间件 |
| Burstable | 至少一个容器requests < limits | 中等 | Web服务、API网关 |
| BestEffort | 未设置requests/limits | 最高(最先被驱逐) | 批处理、日志采集sidecar |
容量调优避坑: 不要在生产集群中大量使用 BestEffort Pod。当节点内存压力达到
eviction-hard 阈值(默认 memory.available < 100Mi)时,BestEffort Pod 会被立即驱逐,可能导致大面积业务抖动。建议至少为每个Pod设置 requests。
2.4 网络与存储插件
K8s通过CNI(Container Network Interface)和CSI(Container Storage Interface)实现网络与存储的插件化扩展,这是平台容量调优中容易被忽视的“隐形瓶颈”。
2.4.1 CNI网络插件
CNI插件负责为Pod分配IP地址、配置网络接口和路由规则。主流CNI实现对比:
| CNI插件 | 网络模型 | 性能特点 | 容量调优要点 |
|---|---|---|---|
| Calico | 纯三层BGP路由 | 高吞吐,低延迟,支持NetworkPolicy | BGP反射器数量、Felix同步间隔 |
| Flannel | VXLAN/Host-GW覆盖网络 | 简单易用,封装开销约5%~10% | VXLAN MTU、后端类型选择 |
| Cilium | eBPF内核加速 | 极低延迟,原生安全策略 | eBPF map大小、Hubble可观测性开销 |
| Weave | Fast Datapath + 加密 | 跨云加密通信,吞吐中等 | IP地址池大小、加密CPU开销 |
2.4.2 CSI存储插件
CSI插件将存储卷的创建、挂载、快照等操作标准化。容量调优需关注以下维度:
- 卷挂载延迟: 云厂商CSI通常涉及API调用+磁盘挂载+格式化,延迟在秒级到分钟级。建议使用
volumeAttachment预挂载池化技术。 - PV/PVC数量限制: 每个节点的最大卷数受限于CSI驱动和云厂商配额(如AWS单节点最多40个EBS卷)。
- 存储性能配置: 通过StorageClass的
parameters设置IOPS/吞吐量上限,避免无限制消耗宿主机存储带宽。