站点图标 兰玉磊的个人博客

云原生多云应用利器 — Karmada 控制器

Controller (控制器) 在 Kubernetes 中是逻辑能力的主要体现所在,根据资源对象的状态来完成调和工作,让资源对象逐步接近期待的状态,这个就是 Kubernetes 的申明式特性。

在 Karmada 中,同样需要对 Karmada 自己的资源对象,实现对应的申明式特性,这就需要实现对应的 Controller。在Karmada 中目前的版本中有 11 个 Controllers,接下来就从每一个控制器所负责的资源对象,以及原理来分析一下,在 Karmada 中是怎样完成多云能力的。

Cluster Controller

cluster controller 主要就是处理 Cluster 资源对象的逻辑,负责处理 Cluster 对应需要的关联资源。

相关资源对象:Cluster

Cluster status controller

cluster status controller 主要就是处理 cluster status 资源对象的逻辑,用来收集 Cluster 的状态,保存到 Cluster 的 status 字段中,同步上报到 Karmada 的控制平面中。

相关资源对象:Cluster

namespace sync controller

namespace sync controller 主要就是处理 namespace 资源对象的逻辑,负责将 Karmada 控制平面创建的 namespace 在集群中同步创建出来。

相关资源对象:namespace

Resourse Template controller

detector 模块中包含了通用 controller 负责 resource template 的 Kubernetes 资源对象的调和处理逻辑,以及匹配 PropagationPolicy。主要就是处理 PropagationPolicy 资源对象的逻辑,来派生出资源对象对应的 ResourceBinding 对象。

相关资源对象:PropagationPolicy, Kubernetes 支持的所有的资源对象 (包括 CRD)

Binding controller

binding controller 主要就是处理 ResourceBinding 资源对象的增删改逻辑,ResourceBinding 的调和能力是派生出 work 对象,work 对象是和特定集群关联的。一个 work 只能属于一个集群,代表一个集群的资源对象的模型封装。

相关资源对象:ResourceBinding 和 ClusterResourceBinding

apiVersion: policy.karmada.io/v1alpha1 
kind: OverridePolicy 
metadata: 
 name: nginx-propagation 
spec: 
 resourceselectors: 
  一 apiVersion: apps/v1 
     kind: Deployment name: nginx 
 targetcluster: 
   clusterNames: 
   -10-23-20-93 
 overriders: 
  plaintext: 
  一 path: "/spec/template/spec/containers/O/image"  
  operator: replace value: "nginx:test"

execution controller

execution controller 主要就是处理 Work 资源对象的增删改逻辑,用于处理 Work,将 Work 负责的 Kubernetes 资源对象在对应的集群上创建出来。

相关资源对象:Work

work status controller

work status controller 主要就是处理 Work 资源对象的状态逻辑,负责收集 Work 的状态,也就是 Work 对应的资源对象的状态,只是这个状态是保存在 Work 的 status 字段里的。

相关资源对象:Work,以及 Work 负责的资源对象。

serviceexport controller

serviceexport controller 主要就是处理 serviceexport 资源对象的状态逻辑,将需要被其它集群发现的服务暴露出来。

相关资源对象:ServiceExport

endpointslice controller

endpointslice controller 主要根据 serviceexport 资源对象对应到处的 Service,Service 对应的 endpointslice 上报到 Karmada 的控制面。

相关资源对象:EndpointSlice 相关的 Work

serviceimport controller

serviceimport controller 主要负责根据 ServiceExport 暴露出来的 Service,在自己负责的集群中创建对应的 service,注意 service 的名称不是完全一样的,同时在自己负责的集群中也创建对应的 EndpointSlice,这个 EndpointSlice 的数据就是来源于 EndpointSlice controller 中上报到 karmada 控制平面的 EndpointSlice 对象,具体是通过在 karmada-webhook 中给 ServiceImport 的 PropagationPolicy 中增加了 EndpointSlice 的下发能力。

相关资源对象:ServiceImport

hpa controller

hpa controller 主要负责将 Karmada 控制面中创建的 HPA 对象通过创建 Work 的方式下发到对应的集群中。

相关资源对象:HPA

退出移动版