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 管理。控制面只负责决策与状态维护。
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 分配工作节点。调度过程分为两个阶段:
- 过滤(Predicates):排除不满足 Pod 资源需求、亲和性约束、污点容忍等条件的节点。
- 打分(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 读取或提交变更。
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) |