自定义资源解释器
资源解释器框架
在将资源从 karmada-apiserver 分发到成员集群的过程中,Karmada 可能需要了解资源的定义结构。以 Propagating Deployment 为例,在构建 ResourceBinding 的阶段,karmada-controller-manager 组件需要解析 deployment 资源的 replicas 字段。
对于 Kubernetes 原生资源来说,Karmada 知道如何解析它们,但是对于由 CRD 定义的资源(或是由聚合层方式注册)来说,由于缺乏对该资源结构信息的了解,它们将仅被当作普通资源来对待,因此,高级调度算法将不能应用于这些资源。
Resource Interpreter Framework 专为解释资源结构而设计,它包括两类解释器:
内置解释器:用于解释常见的 Kubernetes 原生资源或一些知名的扩展资源;自定义解释器: 用于解释自定义资源或覆盖内置解释器。
注意:上述两类解释器之间的主要区别在于,
内置解释器由 Karmada 社区实现并维护,并将其内置到 Karmada 组件中,例如karmada-controller-manager。 相反,自定义解释器是由用户实现和维护的,它应该作为Interpreter Webhook或声明式配置注册到 Karmada(更多详细信息,请参考 Customized Interpreter)。
解释器操作
在解释资源时,我们经常会提取多条信息。Karmada 中定义了多种解释器操作,资源解释器框架为每个操作类型提供服务。
关于资源解释器框架定义的各种操作类型的具体含义,可以参考 Interpreter Operations 。
注意: 并非所有设计的操作类型均受支持(有关支持的操作,请参见下文):
注意:在使用特定的
解释器操作解释资源时,最多只会咨询一个解释器;对于同一个资源,自定义解释器比内置解释器具有更高的优先级。 例如,内置解释器为apps/v1version 的Deployment提供InterpretReplica服务,如果有一个自定义解释器注册到 Karmada 来解释该资源,则自定义解释器获胜,内置解释器将被忽略。
内置解释器
对于常见的 Kubernetes 原生资源或一些知名的扩展资源来说,解释器操作是内置的,这意味着用户通常不需要实现自定义解释器。 如果你希望内置更多资源,请随时提交问题 让我们了解您的用户案例。
内置解释器现在支持以下解释器操作: