1. Kubernetes 控制面概述:核心组件功能与职责

Kubernetes 控制面(Control Plane)是集群的“大脑”,负责维护集群的期望状态、调度工作负载、响应故障并对外暴露 API。控制面由一组独立但协作的组件构成,每个组件承担明确的职责。理解这些组件的功能与交互关系,是进行架构选型与资源模型验证的基础。

1.1 控制面核心组件全景

控制面通常包含以下四个核心组件,它们运行在控制面节点(Master Node)上:

  • kube-apiserver:所有组件交互的唯一入口,提供 RESTful API。
  • etcd:分布式键值存储,保存集群所有状态数据。
  • kube-scheduler:为新创建的 Pod 选择最合适的节点。
  • kube-controller-manager:运行多个控制器,确保集群实际状态与期望状态一致。
关键认知: 控制面组件不直接运行用户容器。用户工作负载由工作节点(Worker Node)上的 kubelet 和 kube-proxy 管理。控制面只负责决策与状态维护。
Kubernetes 控制面核心组件架构 Kubernetes 控制面核心组件架构 控制面节点(Control Plane Node) kube-apiserver REST API 入口 · 认证授权 · 准入控制 etcd 分布式键值存储 · 集群状态持久化 kube-scheduler Pod 调度决策 · 节点选择 kube-controller-manager 控制器集合 · 状态调和 所有组件仅通过 API Server 与 etcd 交互,形成星型通信模型

1.2 组件职责详解

1.2.1 kube-apiserver

API Server 是控制面的前端,所有对集群的操作(包括来自 kubectl、其他组件、外部系统的请求)都必须经过它。它负责:

  • 认证与授权:验证请求者身份,检查操作权限。
  • 准入控制:在对象持久化之前执行准入插件(如资源配额校验、PodSecurityPolicy)。
  • 数据验证与存储:校验资源对象的合法性,并将数据写入 etcd。
  • 事件通知:提供 Watch 机制,让其他组件实时感知资源变化。

1.2.2 etcd

etcd 是控制面的状态存储层,以键值对形式保存集群的完整配置和运行时状态。关键特性:

  • 强一致性:基于 Raft 共识算法,保证数据在多个副本间一致。
  • Watch 机制:支持客户端监听键的变化,API Server 利用此机制实现事件推送。
  • 数据持久化:所有数据写入磁盘,重启后不丢失。
重要提示: etcd 是集群的“单点真相源”。如果 etcd 损坏或丢失,整个集群将无法恢复。生产环境必须为 etcd 配置高可用(3 或 5 节点集群)并定期备份。

1.2.3 kube-scheduler

Scheduler 负责为新创建的 Pod 分配工作节点。调度过程分为两个阶段:

  1. 过滤(Predicates):排除不满足 Pod 资源需求、亲和性约束、污点容忍等条件的节点。
  2. 打分(Priorities):对剩余节点按资源利用率、负载均衡等策略打分,选择最优节点。

1.2.4 kube-controller-manager

Controller Manager 是一个组件集合,内部运行多个独立的控制循环(Controller),每个控制器负责一种资源的状态调和。常见控制器包括:

控制器名称 职责 监听资源
Node Controller 监控节点健康状态,处理节点失联 Node
Replication Controller 确保 ReplicaSet 的 Pod 副本数符合期望 ReplicaSet, Pod
Deployment Controller 管理 Deployment 的滚动更新与回滚 Deployment, ReplicaSet
ServiceAccount Controller 为命名空间自动创建默认 ServiceAccount Namespace
Endpoint Controller 维护 Service 与 Pod 的端点映射 Service, Pod

1.3 组件间通信模型

控制面组件遵循严格的通信规则,确保数据一致性与安全性:

  • 星型拓扑:所有组件(Scheduler、Controller Manager、kubelet、kube-proxy)只与 API Server 通信,不直接访问 etcd。
  • Watch 机制:组件通过 API Server 的 Watch API 订阅资源变化,避免轮询开销。
  • 唯一写入路径:只有 API Server 可以向 etcd 写入数据,其他组件只能通过 API Server 读取或提交变更。
控制面组件通信流程 控制面组件通信流程 kube-apiserver REST + Watch API etcd kube-scheduler kube-controller-manager kubelet (工作节点) kube-proxy (工作节点) 所有组件仅通过 API Server 通信,etcd 只接受 API Server 的读写请求

1.4 组件职责对比总结

组件 核心职责 是否直接访问 etcd 对外暴露端口 高可用方式
kube-apiserver API 网关、认证授权、数据校验 是(唯一写入者) 6443 (HTTPS) 水平扩展 + 负载均衡
etcd 状态存储、一致性保证 —(自身是存储) 2379 (客户端), 2380 (集群) Raft 集群(3/5/7 节点)
kube-scheduler Pod 调度决策 否 10259 (HTTPS) 主备选举(leader election)
kube-controller-manager 状态调和、控制器集合 否 10257 (HTTPS) 主备选举(leader election)