34|kube-controller-mananger控制器插件源码剖析

clusterrole-aggregation 控制器功能
- 深入了解
- 翻译
- 解释
- 总结

1. Kubernetes 中的 clusterrole-aggregation 控制器用于对集群级别的角色进行角色聚合,通过聚合一系列通过 label selector 选定的集群角色到当前的角色中,形成一个复合的 ClusterRole。 2. 通过 `aggregationRule` 可以实现更加灵活的角色定义方式,当创建一个与某个已存在的聚合 `ClusterRole` 的标签选择算符匹配的 `ClusterRole`,会触发新的规则被添加到聚合 `ClusterRole` 的操作。 3. Kubernetes 控制器的通用实现原理包括创建并启动一个 Shared Informer,Informer 负责 List-Watch kube-apiserver,获取指定资源的变更事件,并将事件保存在一个限速队列中,以及调用 syncHandler 方法执行资源调谐的执行函数。 4. kube-controller-manager 通过调用 `clusterroleaggregation.NewClusterRoleAggregation`来创建 clusterrole-aggregation 控制器,并通过调用 `Run`方法来启动控制器,指定了 Informer 为 `ClusterRoles`,告诉 Informer List-Watch 集群中的 `ClusterRole`资源对象。 5. `ClusterRoleAggregationController`负责监听 ClusterRole 的变化,将满足聚合标签(selector)的子角色规则合并到目标 ClusterRole 中,包括了 clusterRoleClient、clusterRoleLister、clusterRolesSynced、syncHandler和queue等字段. 6. 在 `NewClusterRoleAggregation`函数中,给 ClusterRole Informer 指定了事件处理器,会在收到 ClusterRole 资源的增加、更新、删除事件时,将变更资源及事件类型保存在限速队列中。 7. 在 `enqueue`方法中,会从调用 `c.clusterRoleLister.List`从 Informer 的 Indexer 缓存中列出所有的 ClusterRole,并调用 `controller.Ke
《Kubernetes 源码剖析与实战》,新⼈⾸单¥68