梗概

控制平面(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 副本时:

  1. API 服务器接收请求,验证身份和权限
  2. API 服务器将 Deployment 对象存储到 Etcd
  3. Deployment 控制器检测到新 Deployment,创建 ReplicaSet
  4. ReplicaSet 控制器创建 3 个 Pod 对象
  5. 调度器为每个 Pod 选择合适的节点
  6. 节点上的 Kubelet 接收指令,创建容器
  7. 控制器持续监控 Pod 数量,若某个 Pod 故障,会自动创建新的 Pod

与工作节点的关系

  • 控制平面决策,工作节点执行
  • 工作节点通过 Kubelet 与控制平面通信
  • 控制平面组件通常运行在专用节点上,与工作负载隔离
  • 在小型集群中,控制平面也可以运行在工作节点上

father:: kubernetes Cluster