1. 概述
ks-controller-manager 主要作为管理控制器,通过监听etcd中资源的变化,同步配置对应资源的状态,以达到最终状态的一致性。功能与controller-manager的功能类似,不过主要为维护kubesphere新增的资源。
2. 结构分析
ks-controller-manager 整体结构如下。
2.1 InformerFactory
InformerFactory 是watch etcd中指定资源并获取同步信息的一个适配器:
- 同步watch的资源变化并触发用户注册的处理回调
- 提供更新etcd中资源的接口。
ks-controller-manager 即是通过各个InformerFactory完成资源信息的同步,这里有多个SharedInformerFactory,如kubernetes, kubesphere, istio等,主要负责对应相关资源类的信息同步。
虽然有多个InformerFactory句柄,但kubesphere,istio等都是从kubernetes句柄衍生出来的,因此各个SharedInformerFactory最终都是通过kubernetes操作etcd资源。
2.2 controller
controller 是在InformerFactory同步到资源变化后,根据资源变化具体操作对应资源的控制逻辑。
譬如,当istio InformerFactory 获取到网络治理相关配置发生变化时, virtualservice就会操作istio 创建或更新网络策略。
controller 中有 application, cluster, globalrole, helm等,分别提供对应资源同步时的具体操作。
3. 流程说明
- informfactory 监听etcd中资源。
- 资源发生变化时,触发controller回调。
- controller操作对应资源resource。
-
确认操作成功后,controller通过informfactory 将状态信息等更新入etcd。