3. Kubernetes 核心组件:架构与职责

Kubernetes 集群由多个核心组件协同工作,共同构成控制平面与数据平面。理解每个组件的职责、交互方式及故障模式,是进行弹性伸缩编排与故障排查的基础。本章将逐一剖析 API Server、Scheduler、Controller Manager、kubelet 和 kube-proxy 的架构与职责。

3.1 组件总览与交互关系

Kubernetes 采用主从(Master-Worker)架构。控制平面(Control Plane)负责全局决策与集群状态管理,数据平面(Data Plane)负责运行实际容器负载。下图展示了核心组件之间的通信与依赖关系。

Kubernetes 核心组件架构与交互 控制平面 (Control Plane) API Server kube-apiserver etcd 分布式键值存储 Scheduler kube-scheduler Controller Manager kube-controller-manager 数据平面 (Data Plane) Worker Node 1 kubelet 节点代理 kube-proxy 网络代理 Pod 1 (容器化应用) Worker Node 2 kubelet 节点代理 kube-proxy 网络代理 Pod 2 (容器化应用) API Server Scheduler Controller Manager kubelet kube-proxy

3.2 API Server (kube-apiserver)

API Server 是 Kubernetes 控制平面的前端,所有组件与外部用户的交互均通过它进行。它是集群的“网关”与“状态权威”。

核心职责

  • RESTful API 提供:暴露 Kubernetes API,接收并处理所有资源(Pod、Service、Deployment 等)的 CRUD 操作。
  • 认证与授权:对请求进行身份验证(Authentication)与权限校验(Authorization),确保安全访问。
  • 准入控制:通过 Admission Controller 链对请求进行变更或验证,例如资源配额校验、PodSecurityPolicy 检查。
  • 状态存储:所有集群状态唯一写入 etcd,API Server 是唯一与 etcd 交互的组件。
  • 事件广播:提供 Watch 机制,允许其他组件(Scheduler、Controller Manager)监听资源变化并做出响应。
故障排查要点:API Server 不可用将导致整个集群不可控。常见故障包括 etcd 连接超时、证书过期、资源泄漏(大量未关闭的 Watch 连接)。排查时优先检查 API Server Pod 日志及 etcd 健康状态。

3.3 Scheduler (kube-scheduler)

Scheduler 负责将新创建的 Pod 分配到最合适的 Worker Node 上。它通过一系列调度算法和策略,确保集群资源的高效利用。

调度流程

  1. 监听:通过 Watch 机制监听 API Server,获取未调度的 Pod(spec.nodeName 为空)。
  2. 过滤(Predicates):筛选出满足 Pod 资源请求、节点亲和性、污点容忍等硬性条件的节点。
  3. 打分(Priorities):对通过过滤的节点进行优先级评分,考虑资源利用率、Pod 分布均衡性等因素。
  4. 绑定(Bind):选择最高分节点,通过 API Server 将 Pod 与节点绑定。
弹性伸缩关联:在 HPA(Horizontal Pod Autoscaler)触发扩容时,Scheduler 的调度效率直接影响 Pod 启动速度。若集群资源不足或调度策略配置不当,可能导致扩容 Pod 长时间处于 Pending 状态。

3.4 Controller Manager (kube-controller-manager)

Controller Manager 是集群的“大脑”,运行多个控制器(Controller),通过控制循环(Reconciliation Loop)确保集群实际状态与期望状态一致。

核心控制器

控制器名称 职责 与弹性伸缩的关系
Replication Controller 确保指定数量的 Pod 副本运行 HPA 通过修改副本数触发其工作
Node Controller 监控节点健康,处理节点失联 节点故障时触发 Pod 驱逐与重新调度
Endpoint Controller 维护 Service 与 Pod 的映射关系 Pod 扩缩容后更新 Endpoint 列表
Namespace Controller 管理命名空间的生命周期 资源配额管理影响扩容上限
ServiceAccount Controller 为命名空间创建默认 ServiceAccount 间接影响 Pod 的权限配置
常见故障模式:Controller Manager 中的某个控制器死锁或 panic 会导致对应资源无法收敛。例如,Replication Controller 故障可能导致 HPA 扩容后 Pod 数量无法稳定。排查时需检查 kube-controller-manager 日志中的控制器循环错误。

3.5 kubelet

kubelet 是运行在每个 Worker Node 上的核心代理,负责管理节点上的 Pod 生命周期。它是控制平面与数据平面的桥梁。

核心职责

  • Pod 管理:从 API Server 接收 PodSpec,通过容器运行时(如 Docker、containerd)创建、启动、停止容器。
  • 健康检查:执行 Liveness、Readiness、Startup 探针,根据结果重启容器或标记 Pod 不可用。
  • 资源监控:采集节点与 Pod 的 CPU、内存、磁盘、网络等资源使用数据,上报至 API Server。
  • Volume 管理:挂载 Pod 声明的存储卷,支持多种存储后端。
  • 节点状态上报:定期向 API Server 发送心跳及节点状态信息。
故障排查要点:kubelet 证书轮转失败、容器运行时无响应、磁盘压力(DiskPressure)是常见故障。使用 journalctl -u kubelet 或 kubectl describe node 查看节点状态与事件。

3.6 kube-proxy

kube-proxy 运行在每个 Worker Node 上,负责实现 Service 的网络代理与负载均衡。它维护节点上的网络规则,使集群内外的流量能够正确路由到后端 Pod。

工作模式

模式 原理 性能特点 适用场景
userspace 用户态代理,监听端口并转发 性能较低,存在上下文切换 早期版本,已弃用
iptables 利用 Linux 内核 Netfilter 规则 性能较好,规则更新时存在延迟 中小规模集群,默认模式
IPVS 利用 Linux 内核 IP Virtual Server 高性能,支持更多调度算法 大规模集群,高并发场景

核心职责

  • Service 后端维护:监听 API Server 中 Service 与 Endpoint 的变化,实时更新转发规则。
  • 流量转发:将发往 Service ClusterIP 或 NodePort 的流量负载均衡到后端 Pod。
  • 会话保持:支持基于源 IP 的会话亲和性(Session Affinity)。
弹性伸缩影响:当 HPA 快速扩缩容时,kube-proxy 需要及时更新 iptables/IPVS 规则。若规则更新滞后,可能导致新 Pod 无法接收流量或旧 Pod 仍在处理请求。排查时检查 kube-proxy 日志中的规则同步延迟。

3.7 组件职责对比总结

组件 部署位置 核心功能 状态存储 故障影响范围
API Server 控制平面 API 网关、认证授权、状态管理 etcd 全局
Scheduler 控制平面 Pod 调度与节点选择 无(读取 API Server) 全局(新 Pod 无法调度)
Controller Manager 控制平面 控制器循环、状态收敛 无(读取 API Server) 全局(资源无法自愈)
kubelet Worker Node Pod 生命周期管理、健康检查 无(上报至 API Server) 节点级
kube-proxy Worker Node Service 网络代理与负载均衡 无(读取 API Server) 节点级(网络连通性)