在 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 的工作流程是:
- Controller Manager 启动时会启动所有的内置控制器。
- 每个控制器都会从 API Server 获取自己负责的资源对象列表。
- 控制器监听对象的变化(包括新增、更新与删除)。
- 一旦检测到对象变化,控制器会根据集群状态和对象规范计算出需要采取的行动。
- 控制器通过 API Server 发出必要的变更请求,如创建、更新或删除对象。
- Etcd 将变更存储在数据库中,同时发出通知。
- 控制器接收到通知后重新计算状态,继续下一循环监听。
- API Server 则更新内存中对象与状态的缓存。
示例:
假设存在一个 ReplicationController,期望的副本数为 3。
- RC 控制器启动时会获取所有 RC 对象,包括该 RC。
- RC 控制器检测该 RC 仅有 2 个副本,小于期望值。
- RC 控制器向 API Server 发送创建 Pod 的请求,增加 1 个副本。
- API Server 通过 Etcd 保存 Pod 对象,同时 RC 控制器接收到创建事件。
- RC 控制器重新计算,发现现在有 3 个副本,达到预期,循环等待下一变化。
- 该过程不断重复,驱动集群达到 RC 配置的预期副本数。
所以总结来说,Controller Manager 的主要作用是通过控制循环维护集群状态,其主要特征是:
- 包含多种控制器(控制循环)来管理不同资源对象。
- 不断监听对象变化并作出响应以达到预期状态。
- 维护集群的高可用性与稳定性。
- 大部分常见资源对象由控制器负责管理与调度。
它的工作流程是:
- Controller Manager 启动内置的所有控制器。
- 每个控制器从API Server获取自己负责的资源对象列表。
- 控制器监听对象变化(创建/更新/删除)。
- 检测到变化时计算需要的响应行动。
- 通过API Server发出必要的请求(创建/更新/删除对象)。
- Etcd保存变更并发出通知。
- 控制器接收通知重新计算状态,进入下一循环。
- API Server更新内存中的对象与状态缓存。