梗概
控制平面(Control Plane)是 Kubernetes 集群的”大脑”,负责决策和管理整个集群的状态,包括容器调度、集群配置、故障检测与恢复等核心功能。它由多个协同工作的组件组成,共同确保集群始终处于用户定义的期望状态。
详细说明
控制平面组件
1. [child::API服务器](kube-apiserver)
- 集群的统一入口,所有组件和用户通过它与集群交互
- 提供 RESTful API 接口,验证和处理请求
- 将集群状态持久化到 Etcd 数据库
- 实现认证、授权和准入控制机制
2. [child::Etcd]
- 分布式键值存储,保存集群的所有配置数据和状态信息
- 提供高可用性和一致性保证
- 所有控制平面组件通过 API 服务器与 Etcd 交互
- 集群的”真相之源”(source of truth)
3. [child::控制器]管理器(kube-controller-manager)
- 运行各种控制器,如 Deployment 控制器、Node 控制器等
- 每个控制器实现特定资源的控制循环
- 监视集群状态并进行必要的调整,使实际状态与期望状态一致
- 实现集群的自动化和自修复能力
4. 调度器(kube-scheduler)
- 负责将新创建的 Pod 分配到合适的 Node 上
- 考虑资源需求、硬件/软件约束、亲和性/反亲和性规则等因素
- 实现复杂的调度算法,优化集群资源利用率
- 支持优先级和抢占机制
5. 云控制器管理器(cloud-controller-manager)
- 连接 Kubernetes 与云平台的接口
- 管理云资源,如负载均衡器、存储卷等
- 允许云特定代码与 Kubernetes 核心代码分离
- 仅在云平台上运行 Kubernetes 时使用
控制平面高可用性
- 控制平面组件可以部署多个副本,实现高可用性
- Etcd 通常部署为多节点集群,确保数据的可用性和一致性
- API 服务器可以水平扩展,前面可以部署负载均衡器
- 控制器管理器和调度器采用主备模式,确保一致性
控制平面安全性
- 采用 TLS 加密所有组件间通信
- 实现多层次安全机制:认证、授权、准入控制
- 通过 RBAC(基于角色的访问控制)限制权限
- 支持审计日志记录所有操作
工作原理举例
当用户创建一个 Deployment 并指定 3 个 Pod 副本时:
- API 服务器接收请求,验证身份和权限
- API 服务器将 Deployment 对象存储到 Etcd
- Deployment 控制器检测到新 Deployment,创建 ReplicaSet
- ReplicaSet 控制器创建 3 个 Pod 对象
- 调度器为每个 Pod 选择合适的节点
- 节点上的 Kubelet 接收指令,创建容器
- 控制器持续监控 Pod 数量,若某个 Pod 故障,会自动创建新的 Pod
与工作节点的关系
- 控制平面决策,工作节点执行
- 工作节点通过 Kubelet 与控制平面通信
- 控制平面组件通常运行在专用节点上,与工作负载隔离
- 在小型集群中,控制平面也可以运行在工作节点上
father:: kubernetes Cluster