乐闻世界logo
搜索文章和话题

Kubernetes 控制平面(Control Plane)由哪些组件组成?每个组件的作用是什么?

2月19日 19:18

Kubernetes 控制平面(Control Plane)是集群的"大脑",负责管理和控制整个集群的状态。它由多个组件组成,每个组件都有特定的职责。

控制平面组件

1. API Server(kube-apiserver)

API Server 是 Kubernetes 控制平面的核心组件,是集群的统一入口。

主要职责

  • 提供 REST API 接口,供用户、其他组件和外部系统调用
  • 验证和配置 API 对象的数据(如 Pod、Service、Deployment)
  • 处理认证、授权和准入控制
  • 作为 etcd 的唯一客户端,所有数据读写都通过 API Server

特点

  • 无状态设计,可以水平扩展
  • 默认监听 6443 端口(HTTPS)
  • 支持 Swagger/OpenAPI 文档

2. etcd

etcd 是 Kubernetes 的分布式键值存储,用于存储集群的所有配置和状态数据。

主要职责

  • 存储集群状态数据
  • 提供数据一致性和可靠性保证
  • 支持分布式部署和故障恢复

特点

  • 基于 Raft 一致性算法
  • 支持事务和 Watch 机制
  • 默认使用 2379(客户端)和 2380(集群通信)端口

最佳实践

  • 定期备份 etcd 数据
  • 使用 TLS 加密通信
  • 配置合理的资源限制

3. Scheduler(kube-scheduler)

Scheduler 负责将新创建的 Pod 分配到合适的 Node 上运行。

主要职责

  • 监听未调度的 Pod
  • 根据调度策略选择最优的 Node
  • 将调度结果写入 API Server

调度流程

  1. 过滤(Predicates):排除不满足条件的 Node
  2. 打分(Priorities):对满足条件的 Node 进行评分
  3. 选择:选择得分最高的 Node

调度策略

  • 资源请求和限制
  • 节点选择器(nodeSelector)
  • 亲和性和反亲和性(Affinity/Anti-Affinity)
  • 污点和容忍度(Taints and Tolerations)
  • 节点资源利用率

4. Controller Manager(kube-controller-manager)

Controller Manager 运行多个控制器,这些控制器负责维护集群的期望状态。

主要控制器

  1. Node Controller

    • 监控 Node 状态
    • 在 Node 不可用时标记为 NotReady
    • 在 Node 故障时驱逐 Pod
  2. Replication Controller

    • 确保 Pod 副本数符合期望值
    • 创建或删除 Pod 以维持副本数
  3. Endpoints Controller

    • 维护 Service 和 Pod 的对应关系
    • 更新 Endpoint 对象
  4. Service Account & Token Controller

    • 为新的 Namespace 创建默认 ServiceAccount
    • 管理 API 访问令牌
  5. Deployment Controller

    • 管理 Deployment 的滚动更新
    • 创建和更新 ReplicaSet
  6. StatefulSet Controller

    • 管理 StatefulSet 的 Pod 生命周期
    • 维护 Pod 的稳定标识
  7. DaemonSet Controller

    • 确保在每个 Node 上运行一个 Pod 副本
  8. Job Controller

    • 管理一次性任务
    • 确保任务成功完成
  9. CronJob Controller

    • 管理定时任务
    • 根据时间表创建 Job

特点

  • 每个控制器独立运行
  • 使用 Watch 机制监听资源变化
  • 通过 API Server 更新资源状态

5. Cloud Controller Manager(cloud-controller-manager)

Cloud Controller Manager 是云提供商特定的控制器,用于将 Kubernetes 与云平台集成。

主要职责

  • 管理云提供商的 Node 生命周期
  • 管理云路由
  • 管理云存储卷
  • 管理服务负载均衡器

优势

  • 将云相关逻辑与 Kubernetes 核心分离
  • 提高代码可维护性
  • 便于支持多个云提供商

控制平面工作流程

  1. 用户请求:用户通过 kubectl 或 API 发送请求到 API Server

  2. 认证授权:API Server 验证用户身份和权限

  3. 数据存储:API Server 将数据写入 etcd

  4. 控制器监听:各控制器通过 Watch 机制监听资源变化

  5. 状态协调:控制器根据期望状态协调实际状态

  6. 调度决策:Scheduler 为未调度的 Pod 选择 Node

  7. 状态更新:控制器和 Scheduler 将更新结果写回 API Server

高可用部署

为了提高控制平面的可用性,建议:

  1. API Server:部署多个实例,使用负载均衡器
  2. etcd:部署奇数个节点(3、5、7),使用堆叠或外部 etcd 拓扑
  3. Scheduler 和 Controller Manager:部署多个实例,使用 Leader 选举

监控和调试

  1. 查看组件状态
bash
kubectl get componentstatuses
  1. 查看 Pod 日志
bash
kubectl logs -n kube-system kube-apiserver-xxx
  1. 查看事件
bash
kubectl get events -n kube-system

最佳实践

  1. 资源限制:为控制平面组件设置合理的 CPU 和内存限制

  2. 安全加固

    • 启用 RBAC
    • 使用 TLS 加密通信
    • 限制 API Server 访问
  3. 备份策略:定期备份 etcd 数据

  4. 监控告警:监控控制平面组件的健康状态

  5. 版本升级:遵循 Kubernetes 版本升级策略,逐步升级

  6. 日志管理:集中收集和分析控制平面日志

标签:Kubernetes