ResourceInterpreterCustomization v1alpha1

apiVersion: config.karmada.io/v1alpha1

import "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"

ResourceInterpreterCustomization

ResourceInterpreterCustomization 描述特定资源的配置,方便 Karmada 获取结构。它的优先级高于默认解释器和 webhook 解释器。


ResourceInterpreterCustomizationSpec

ResourceInterpreterCustomizationSpec 是配置的详情。


  • customizations (CustomizationRules),必选

    Customizations 是对解释规则的描述。

    CustomizationRules 是对解释规则的描述。

    • customizations.dependencyInterpretation (DependencyInterpretation)

      DependencyInterpretation 描述了 Karmada 分析依赖资源的规则。Karmada 为几种标准的 Kubernetes 类型提供了内置规则。如果设置了 DependencyInterpretation,内置规则将被忽略。更多信息,请浏览:https://karmada.io/docs/userguide/globalview/customizing-resource-interpreter/#interpretdependency

      DependencyInterpretation 是用于解释特定资源的依赖资源的规则。

      • customizations.dependencyInterpretation.luaScript (string),必选

        LuaScript 是用于解释特定资源的依赖关系的 Lua 脚本。该脚本应实现以下功能:

      1. luaScript: >
      2. function GetDependencies(desiredObj)
      3. dependencies = []
      4. serviceAccountName = desiredObj.spec.template.spec.serviceAccountName
      5. if serviceAccountName ~= nil and serviceAccountName ~= "default" then
      6. dependency = []
      7. dependency.apiVersion = "v1"
      8. dependency.kind = "ServiceAccount"
      9. dependency.name = serviceAccountName
      10. dependency.namespace = desiredObj.metadata.namespace
      11. dependencies[1] = dependency
      12. end
      13. return dependencies
      14. end

      LuaScript 的内容是一个完整的函数,包括声明和定义。

      以下参数将由系统提供:

      • desiredObj:将应用于成员集群的配置。

      返回值由 DependentObjectReference 的列表表示。

  • customizations.healthInterpretation (HealthInterpretation)

    HealthInterpretation 描述了健康评估规则,Karmada 可以通过这些规则评估各类资源的健康状态。

    HealthInterpretation 是解释特定资源健康状态的规则。

    • customizations.healthInterpretation.luaScript (string),必选

      LuaScript 是评估特定资源的健康状态的 Lua 脚本。该脚本应实现以下功能:

      1. luaScript: >
      2. function InterpretHealth(observedObj)
      3. if observedObj.status.readyReplicas == observedObj.spec.replicas then
      4. return true
      5. end
      6. end

      LuaScript 的内容是一个完整的函数,包括声明和定义。

      以下参数将由系统提供:

      1. - observedObj:从特定成员集群观测到的配置。

      返回的 boolean 值表示健康状态。

  • customizations.replicaResource (ReplicaResourceRequirement)

    ReplicaResource 描述了 Karmada 发现资源副本及资源需求的规则。对于声明式工作负载类型(如 Deployment)的 CRD 资源,可能会有用。由于 Karmada 知晓发现 Kubernetes 本机资源信息的方式,因此 Kubernetes 本机资源(Deployment、Job)通常不需要该字段。但如果已设置该字段,内置的发现规则将被忽略。

    ReplicaResourceRequirement 保存了获取所需副本及每个副本资源要求的脚本。

    • customizations.replicaResource.luaScript (string),必选

      LuaScript 是发现资源所用的副本以及资源需求的 Lua 脚本。

      该脚本应实现以下功能:

      1. luaScript: >
      2. function GetReplicas(desiredObj)
      3. replica = desiredObj.spec.replicas
      4. requirement = []
      5. requirement.nodeClaim = []
      6. requirement.nodeClaim.nodeSelector = desiredObj.spec.template.spec.nodeSelector
      7. requirement.nodeClaim.tolerations = desiredObj.spec.template.spec.tolerations
      8. requirement.resourceRequest = desiredObj.spec.template.spec.containers[1].resources.limits
      9. return replica, requirement
      10. end

      LuaScript 的内容是一个完整的函数,包括声明和定义。

      以下参数将由系统提供:

      1. - desiredObj:待应用于成员集群的配置。

      该函数有两个返回值:

      1. - replica:声明的副本编号。
      2. - requirement:每个副本所需的资源,使用 ResourceBindingSpec.ReplicaRequirements 表示。

      返回值将被 ResourceBinding 或 ClusterResourceBinding 使用。

  • customizations.replicaRevision (ReplicaRevision)

    ReplicaRevision 描述了 Karmada 修改资源副本的规则。对于声明式工作负载类型(如 Deployment)的 CRD 资源,可能会有用。由于 Karmada 知晓修改 Kubernetes 本机资源副本的方式,因此 Kubernetes 本机资源(Deployment、Job)通常不需要该字段。但如果已设置该字段,内置的修改规则将被忽略。

    ReplicaRevision 保存了用于修改所需副本的脚本。

    • customizations.replicaRevision.luaScript (string),必选

      LuaScript 是修改所需规范中的副本的 Lua 脚本。该脚本应实现以下功能:

      1. luaScript: >
      2. function ReviseReplica(desiredObj, desiredReplica)
      3. desiredObj.spec.replicas = desiredReplica
      4. return desiredObj
      5. end

      LuaScript 的内容是一个完整的函数,包括声明和定义。

      以下参数将由系统提供:

      1. - desiredObj:待应用于成员集群的配置。
      2. - desiredReplica:待应用于成员集群的期望副本数。

      返回的是修订后的配置,最终将应用于成员集群。

    • customizations.retention (LocalValueRetention)

      Retention 描述了 Karmada 对成员集群组件变化的预期反应。这样可以避免系统进入无意义循环,即 Karmada 资源控制器和成员集群组件,对同一个字段采用不同的值。例如,成员群集的 HPA 控制器可能会更改 Deployment 的 replicas。在这种情况下,Karmada 会保留 replicas,而不会去更改它。

      LocalValueRetention 保存了要保留的脚本。当前只支持 Lua 脚本。

      • customizations.retention.luaScript (string),必选

        LuaScript 是将运行时值保留到所需规范的 Lua 脚本。

        该脚本应实现以下功能:

        1. luaScript: >
        2. function Retain(desiredObj, observedObj)
        3. desiredObj.spec.fieldFoo = observedObj.spec.fieldFoo
        4. return desiredObj
        5. end

        LuaScript 的内容是一个完整的函数,包括声明和定义。

        以下参数将由系统提供:

        1. - desiredObj:待应用于成员集群的配置。
        2. - observedObj:从特定成员集群观测到的配置。

        返回的是保留的配置,最终将应用于成员集群。

  • customizations.statusAggregation (StatusAggregation)

    StatusAggregation 描述了 Karmada 从成员集群收集的状态汇总到资源模板的规则。Karmada 为几种标准的 Kubernetes 类型提供了内置规则。如果设置了 StatusAggregation,内置规则将被忽略。更多信息,请浏览:https://karmada.io/docs/userguide/globalview/customizing-resource-interpreter/#aggregatestatus

    StatusAggregation 保存了用于聚合多个分散状态的脚本。

    • customizations.statusAggregation.luaScript (string),必选

      LuaScript 是将分散状态聚合到所需规范的 Lua 脚本。该脚本应实现以下功能:

      1. luaScript: >
      2. function AggregateStatus(desiredObj, statusItems)
      3. for i = 1, #statusItems do
      4. desiredObj.status.readyReplicas = desiredObj.status.readyReplicas + items[i].readyReplicas
      5. end
      6. return desiredObj
      7. end

      LuaScript 的内容是一个完整的函数,包括声明和定义。

      以下参数将由系统提供:

      1. - desiredObj:资源模板。
      2. - statusItems:用 AggregatedStatusItem 表示的状态列表。

      返回的是状态聚合成的完整对象。

    • customizations.statusReflection (StatusReflection)

      StatusReflection 描述了 Karmada 挑选资源状态的规则。Karmada 为几种标准的 Kubernetes 类型提供了内置规则。如果设置了 StatusReflection,内置规则将被忽略。更多信息,请浏览:https://karmada.io/docs/userguide/globalview/customizing-resource-interpreter/#interpretstatus

      StatusReflection 保存了用于获取状态的脚本。

      • customizations.statusReflection.luaScript (string),必选

        LuaScript 是从观测到的规范中获取状态的 Lua 脚本。该脚本应实现以下功能:

        1. luaScript: >
        2. function ReflectStatus(observedObj)
        3. status = []
        4. status.readyReplicas = observedObj.status.observedObj
        5. return status
        6. end

        LuaScript 的内容是一个完整的函数,包括声明和定义。

        以下参数将由系统提供:

        1. - observedObj:从特定成员集群观测到的配置。

        返回的是整个状态,也可以是状态的一部分,并会被 Work 和 ResourceBinding(ClusterResourceBinding) 使用。

  • target (CustomizationTarget),必选

    CustomizationTarget 表示自定义的资源类型。

    CustomizationTarget 表示自定义的资源类型。

    • target.apiVersion(string),必选

      APIVersion 表示目标资源的 API 版本。

    • target.kind(string),必选

      Kind 表示目标资源的类别。

ResourceInterpreterCustomizationList

ResourceInterpreterCustomizationList 包含 ResourceInterpreterCustomization 的列表。


  • apiVersion: config.karmada.io/v1alpha1

  • kind: ResourceInterpreterCustomizationList

  • metadata (ListMeta)

  • items ([][ResourceInterpreterCustomization](../config-resources/resource-interpreter-customization-v1alpha1#resourceinterpretercustomization)),必选

操作


get:查询指定的 ResourceInterpreterCustomization

HTTP 请求

GET /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}

参数

  • name路径参数):string,必选

    ResourceInterpreterCustomization 的名称

  • pretty查询参数):string

    pretty

响应

200 (ResourceInterpreterCustomization): OK

get:查询指定 ResourceInterpreterCustomization 的状态

HTTP 请求

GET /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}/status

参数

  • name路径参数):string,必选

    ResourceInterpreterCustomization 名称

  • pretty查询参数):string

    pretty

响应

200 (ResourceInterpreterCustomization): OK

list:查询所有 ResourceInterpreterCustomization

HTTP 请求

GET /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations

参数

响应

200 (ResourceInterpreterCustomizationList): OK

create:创建一个 ResourceInterpreterCustomization

HTTP 请求

POST /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations

参数

响应

200 (ResourceInterpreterCustomization): OK

201 (ResourceInterpreterCustomization): Created

202 (ResourceInterpreterCustomization): Accepted

update:更新指定的 ResourceInterpreterCustomization

HTTP 请求

PUT /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}

参数

响应

200 (ResourceInterpreterCustomization): OK

201 (ResourceInterpreterCustomization): Created

update:更新指定 ResourceInterpreterCustomization 的状态

HTTP 请求

PUT /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}/status

参数

响应

200 (ResourceInterpreterCustomization): OK

201 (ResourceInterpreterCustomization): Created

patch:更新指定 ResourceInterpreterCustomization 的部分信息

HTTP 请求

PATCH /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}

参数

  • name路径参数):string,必选

    ResourceInterpreterCustomization 的名称

  • body: Patch,必选

  • dryRun查询参数):string

    dryRun

  • fieldManager查询参数):string

    fieldManager

  • fieldValidation查询参数):string

    fieldValidation

  • force查询参数):boolean

    force

  • pretty查询参数):string

    pretty

响应

200 (ResourceInterpreterCustomization): OK

201 (ResourceInterpreterCustomization): Created

patch:更新指定 ResourceInterpreterCustomization 状态的部分信息

HTTP 请求

PATCH /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}/status

参数

  • name路径参数):string,必选

    ResourceInterpreterCustomization 的名称

  • body: Patch,必选

  • dryRun查询参数):string

    dryRun

  • fieldManager查询参数):string

    fieldManager

  • fieldValidation查询参数):string

    fieldValidation

  • force查询参数):boolean

    force

  • pretty查询参数):string

    pretty

响应

200 (ResourceInterpreterCustomization): OK

201 (ResourceInterpreterCustomization): Created

delete:删除一个 ResourceInterpreterCustomization

HTTP 请求

DELETE /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations/{name}

参数

  • name路径参数):string,必选

    ResourceInterpreterCustomization 名称

  • body: DeleteOptions

  • dryRun查询参数):string

    dryRun

  • gracePeriodSeconds查询参数):integer

    gracePeriodSeconds

  • pretty查询参数):string

    pretty

  • propagationPolicy查询参数):string

    propagationPolicy

响应

200 (Status): OK

202 (Status): Accepted

deletecollection:删除所有 ResourceInterpreterCustomization

HTTP 请求

DELETE /apis/config.karmada.io/v1alpha1/resourceinterpretercustomizations

参数

响应

200 (Status): OK