Kubernetes 中的 Controller Manager 是什么?

在 Kubernetes 中,Controller Manager 是集群控制平面组件之一,主要负责维护集群的状态与工作负载。它通过控制循环(Control Loop)不断地监听集群状态与资源对象的变化,并作出响应以驱动集群达到期望状态。

Controller Manager 的主要作用是:

  • 实现控制循环,不断监听资源对象的变化并作出响应。
  • 负责集群中大部分资源对象的管理与调度。
  • 维护集群的高可用性与稳定性。

Controller Manager 中包含的主要控制器有:

  • Replication Controller:负责维护任意数目的 Pod 副本。
  • Endpoints Controller:填充 Endpoint 对象(即加入 Service 的所有 Pod)。
  • Pod GC Controller:删除已完成的 Pod。
  • Namespace Controller:初始化默认 Namespace。
  • Service Account & Token Controllers:为新的 Namespace 创建默认账号与 API 访问令牌。
  • PV Claim Controller:绑定 PersistentVolumeClaim 并挂载提供的存储卷。
  • HPPA Controller:启用或禁用 Node 的高可用模式。
  • DaemonSet Controller:运行所有(或部分)节点上的 Pod。
  • Job Controller:运行定期或一次性任务的 Pod。
  • Deployment Controller:实现对 Deployment 的滚动更新。

Controller Manager 的工作流程是:

  1. Controller Manager 启动时会启动所有的内置控制器。
  2. 每个控制器都会从 API Server 获取自己负责的资源对象列表。
  3. 控制器监听对象的变化(包括新增、更新与删除)。
  4. 一旦检测到对象变化,控制器会根据集群状态和对象规范计算出需要采取的行动。
  5. 控制器通过 API Server 发出必要的变更请求,如创建、更新或删除对象。
  6. Etcd 将变更存储在数据库中,同时发出通知。
  7. 控制器接收到通知后重新计算状态,继续下一循环监听。
  8. API Server 则更新内存中对象与状态的缓存。

示例:
假设存在一个 ReplicationController,期望的副本数为 3。

  1. RC 控制器启动时会获取所有 RC 对象,包括该 RC。
  2. RC 控制器检测该 RC 仅有 2 个副本,小于期望值。
  3. RC 控制器向 API Server 发送创建 Pod 的请求,增加 1 个副本。
  4. API Server 通过 Etcd 保存 Pod 对象,同时 RC 控制器接收到创建事件。
  5. RC 控制器重新计算,发现现在有 3 个副本,达到预期,循环等待下一变化。
  6. 该过程不断重复,驱动集群达到 RC 配置的预期副本数。

所以总结来说,Controller Manager 的主要作用是通过控制循环维护集群状态,其主要特征是:

  1. 包含多种控制器(控制循环)来管理不同资源对象。
  2. 不断监听对象变化并作出响应以达到预期状态。
  3. 维护集群的高可用性与稳定性。
  4. 大部分常见资源对象由控制器负责管理与调度。

它的工作流程是:

  1. Controller Manager 启动内置的所有控制器。
  2. 每个控制器从API Server获取自己负责的资源对象列表。
  3. 控制器监听对象变化(创建/更新/删除)。
  4. 检测到变化时计算需要的响应行动。
  5. 通过API Server发出必要的请求(创建/更新/删除对象)。
  6. Etcd保存变更并发出通知。
  7. 控制器接收通知重新计算状态,进入下一循环。
  8. API Server更新内存中的对象与状态缓存。