全部產品
Search
文件中心

Container Service for Kubernetes:分發策略與差異化策略

更新時間:Dec 26, 2025

ACK One艦隊的應用分發通過分發策略和差異化策略完成。分發策略(PropagationPolicy)用於定義哪些資源需要分發到哪些叢集中,差異化策略(OverridePolicy)用於定義資源在分發至不同叢集時需要哪些差異化配置。本文詳細介紹分發策略(PropagationPolicy)和差異化策略(OverridePolicy)的配置說明。

分發策略

您可以通過定義PropagationPolicyClusterPropagationPolicy來配置分發策略,實現應用的多叢集分發,PropagationPolicyClusterPropagationPolicy設計參考Karmada開源專案,與Karmada的ClusterPropagationPolicyPropagationPolicy介面相容。

  • ClusterPropagationPolicy:用於叢集內應用的分發,支援叢集層級應用的分發,包括PersistentVolumeStorageClassNamespaceCustomResourceDefinition,也支援任意命名空間(不包括系統命名空間)的應用分發。具體分發資源的RBAC許可權,受多叢集艦隊RBAC許可權的控制。

  • PropagationPolicy:用於命名空間層級的應用分發,只能分發其所在命名空間的應用。

下文以一個通過按靜態權重分發應用的PropagationPolicy為例,介紹如何定義一個分發策略以及各參數含義。

apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
  name: web-demo
  namespace: demo
spec:
  resourceSelectors:
  - apiVersion: apps/v1
    kind: Deployment
    name: web-demo
  - apiVersion: v1
    kind: ConfigMap
    name: cm-demo
  - apiVersion: apps/v1
    kind: Deployment
    labelSelector:
      matchExpressions:
      - key: app
        operator: In
        values:
        - xxxx
  preserveResourcesOnDeletion: true
  placement:
    clusterAffinity:
      clusterNames:
      - cxxxxx # 您的叢集ID。
      - cxxxxx # 您的叢集ID。
    replicaScheduling:
      replicaSchedulingType: Divided
      replicaDivisionPreference: Weighted
      weightPreference:
        staticWeightList:
        - targetCluster:
            clusterNames:
            - cxxxxx
          weight: 2
        - targetCluster:
            clusterNames:
            - cxxxxxx
          weight: 1

主要參數說明

參數

是否必選

說明

樣本值

apiVersion

API版本資訊。

此處固定為policy.one.alibabacloud.com/v1alpha1

kind

分發策略的層級,包括PropagationPolicyClusterPropagationPolicy

  • ClusterPropagationPolicy:分發叢集層級的應用以及叢集內任意命名空間(不包括系統命名空間)的應用。

  • PropagationPolicy:只能分發它所在命名空間的應用。

PropagationPolicy

namespace

kindPropagationPolicy時需要指定已有的命名空間。

demo

name

分發策略的名稱。

policy-xxxx

resourceSelectors

選擇一個或者多個要分發的K8s資源。詳情參見下方resourceSelector參數說明

resourceSelectors:
- apiVersion: apps/v1
  kind: Deployment
  name: nginx
- apiVersion: v1
  kind: ConfigMap
  name: cm

propagateDeps

表示相關資源是否會被自動分發。例如在Deployment引用了ConfigMap的情況下,ConfigMap是否會同步分發到子叢集。

true或false

placement

placement:
  clusterAffinity:
    clusterNames:
    - ${cluster1-id}
    - ${cluster2-id}
  replicaScheduling:
    replicaSchedulingType: Divided
    replicaDivisionPreference: Weighted
    weightPreference:
      staticWeightList:
      - targetCluster:
          clusterNames:
          - ${cluster1-id}
        weight: 2
      - targetCluster:
          clusterNames:
          - ${cluster2-id}
        weight: 1

dependentOverrides

表明依賴的overridePolicy

等待依賴的overridePolicy全部生效後再分發資源。

dependentOverrides:
  - ${overridePolicy1-name}
  - ${overridePolicy2-name}

failover

應用宕機之後的failover行為。

  • decisionConditions:TolerationSeconds:表示容忍應用unhealthy的時間,預設300s

  • purgeMode

    • Immediately:立刻進行驅逐,然後建立新的應用。

    • Graciously:可以進行優雅驅逐,如果在一段時間內應用重新回到healthy,則可以停止驅逐。

    • Never:對Unhealthy的應用不驅逐,無需手動處理。

  • gracePeriodSeconds:當purgeModeGraciously時,此欄位表示優雅驅逐的最大等待時間,預設600s

failover:
  application:
    decisionConditions:
      tolerationSeconds: 30
    purgeMode: Immediately

preserveResourcesOnDeletion

表示刪除掉Policy後是否會保留相應分發資源,預設為true。

false

resourceSelector參數說明

參數

是否必選

說明

樣本值

apiVersion

分發資源的API版本。

v1

kind

分發資源的類型。

Deployment

namespace

分發資源的命名空間。

說明

如果使用PropagationPolicy,則命名空間就是其所在的命名空間,該欄位不會在其他命名空間生效。

demo

name

分發資源的名稱。

任意名稱

labelSelector

通過標籤選取器來選擇資源。

  • matchLabels:表示keyvalue索引值對。

  • matchExpressions:表示一個數組,每個元素包含keyoperatorvalues三個參數。

labelSelector:
  matchLabels:
    region: A
    az: zone0
  matchExpressions:
  - key: app
    operator: In
    values:
    - nginx

clusterAffinity參數說明

參數

是否必選

說明

樣本值

clusterNames

表示需要分發資源的叢集列表,通過叢集ID的形式展示。

clusterNames:
- cxxxx
- cxxxx

excludeClusters

表示去除掉的叢集列表叢集ID,通過叢集ID的形式展示。

excludeClusters:
- cxxxx
- cxxxx

labelSelector

通過標籤選取器選擇待分發的叢集。

labelSelector:
  matchLabels:
    region: A
    az: zone0
  matchExpressions:
  - key: app
    operator: In
    values:
    - nginx

replicaScheduling參數說明

參數

是否必選

說明

樣本值

replicaSchedulingType

副本調度策略,包括DuplicatedDivided

  • Duplicated:表示將應用直接複製到每個叢集中。

  • Divided:表示將應用副本數按照叢集權重進行調度,所有關聯集群的副本數之和為艦隊叢集中該應用的spec的副本數。

Duplicated

customSchedulingType

個人化調度策略,目前對於作業工作負載僅支援Gang調度。

Gang

replicaDivisionPreference

副本拆分策略,包括weightedAggregated

  • Weighted:表示按照權重進行副本數的調度。

  • Aggregated:表示會將副本盡量分布到分數高的叢集中。

weighted

weightPreference

表示更傾向於按照動態權重還是靜態權重。

  • dynamicWeight:目前支援AvailableReplicas,可以根據子叢集的資源情況預估可以分發的副本數,根據多個子叢集副本數的比例進行調度拆分。

  • staticWeightList是一個數組,每個元素包含clusterAffinityweight兩個參數。

    • clusterAffinity:表示應用待分發的叢集。詳情參見clusterAffinity參數說明

    • weight:表示選中叢集的權重,數值越大則調度到該叢集的副本數越多。

如下樣本表示Cluster1權重為2,Cluster2權重為1,如果總副本數為3,則有2個副本會調度到Cluster1,1個副本會調度到Cluster2。

weightPreference:
  staticWeightList:
  - targetCluster:
      clusterNames:
      - ${cluster1-id}
    weight: 2
  - targetCluster:
      clusterNames:
      - ${cluster2-id}
    weight: 1

如下則表示動態權重調度:

weightPreference:
  dynamicWeight: AvailableReplicas

差異化策略

在應用分發時,某些不同叢集可能需要不同的配置,差異化策略可以將對應叢集的應用進行差異化部署。您可以通過定義ClusterOverridePolicyOverridePolicy來配置差異化策略。ClusterOverridePolicyOverridePolicy設計參考Karmada開源專案,與Karmada的ClusterOverridePolicy

OverridePolicy介面相容。

  • ClusterOverridePolicy:用於差異化修改叢集層級的資源,包括PersistentVolumeStorageClassNamespaceCustomResourceDefinition,也支援差異化修改任意命名空間(不包括系統命名空間)的資源。

  • OverridePolicy:用於命名空間層級的資源的差異化修改,可以對它所在命名空間的分發資源進行差異化修改。

下文以OverridePolicy為例,介紹如何定義一個差異化策略以及各參數含義。

apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: OverridePolicy
metadata:
  name: demo
  namespace: demo
spec:
  resourceSelectors:
    - apiVersion: apps/v1
      kind: Deployment
      name: example
  overrideRules:
    - targetCluster:
        clusterNames:
          - cxxxxx #您的叢集Id
      overriders:
        plaintext:
          - operator: replace
            path: /spec/replicas
            value: 1
        imageOverrider:
          - component: Registry
            operator: add
            value: registry.cn-hangzhou.aliyuncs.com/xxxx

主要參數說明

參數

是否必選

說明

樣本值

apiVersion

API版本資訊。

此處固定為policy.one.alibabacloud.com/v1alpha1

kind

差異化策略類型,包括ClusterOverridePolicyOverridePolicy

  • ClusterOverridePolicy:可以差異化修改叢集層級的資源以及叢集內任意命名空間(不包括系統命名空間)的資源。

  • OverridePolicy:只能分發它所在命名空間的資源。

OverridePolicy

namespace

kindOverridePolicy時需要指定已有的命名空間。

demo

name

差異化策略名稱稱。

任意名稱

resourceSelectors

resourceSelector數組。詳情請參見下方resourceSelector參數說明

resourceSelectors:
- apiVersion: apps/v1
  kind: Deployment
  name: nginx
- apiVersion: v1
  kind: ConfigMap
  name: cm

overrideRules

ruleWithCluster數組。詳情請參見下方ruleWithCluster參數說明

overrideRules:
    - targetCluster:
        clusterNames:
          - ${cluster1-id}
      overriders:
        imageOverrider:
          - component: Registry
            operator: add
            value: registry.cn-hangzhou.aliyuncs.com

resourceSelector參數說明

參數

是否必選

說明

樣本值

apiVersion

選擇分發資源的apiVersion

v1

kind

分發資源的類型。

Deployment

namespace

分發資源的命名空間。

說明

如果使用OverridePolicy,則命名空間就是其所在的命名空間,該欄位不會在其他命名空間生效。

demo

name

分發資源名稱。

任意名稱

labelSelector

通過標籤選取器選擇待分發的資源。

labelSelector:
  matchLabels:
    region: A
    az: zone0
  matchExpressions:
  - key: app
    operator: In
    values:
    - nginx

clusterAffinity參數說明

參數

是否必選

說明

樣本值

clusterNames

表示需要分發資源的叢集列表,通過叢集ID的形式展示。

clusterNames:
- cxxxx
- cxxxx

excludeClusters

表示去除掉的叢集列表叢集ID,通過叢集ID的形式展示。

excludeClusters:
- cxxxx
- cxxxx

labelSelector

通過標籤選取器選擇待分發的叢集。

labelSelector:
  matchLabels:
    region: A
    az: zone0
  matchExpressions:
  - key: app
    operator: In
    values:
    - nginx

ruleWithCluster參數說明

參數

是否必選

說明

樣本值

targetCluster

通過clusterAffinity參數進行叢集選擇。詳情請參見resourceSelector參數說明

  clusterAffinity:
      clusterNames:
      - cxxxxx # 您的叢集ID。
      - cxxxxx # 您的叢集ID。

overriders

overriders結構體數組,其中包含一些差異化規則,目前支援imageplaintext,可按需選擇。詳情請參見overriders參數說明

  • plaintext:通過JSON Patch的pathvalueoperator來修改。

  • imageOverrider:用於修改鏡像。

overriders:
  imageOverrider:
    - component: Registry
      operator: add
      value: registry.cn-hangzhou.aliyuncs.com

overriders參數說明

參數

是否必選

說明

樣本值

imageOverrider

修改鏡像的方式。

  • predicate(可選):表示待修改的鏡像的path,例如/spec/template/spec/containers/0/image,如果為空白則所有鏡像都會進行修改

  • component:在RegistryRepositoryTag三種類型選擇一種方式對鏡像進行修改,鏡像格式為[registry/]repository[:tag]

  • operator:支援選擇removeaddreplace

  • value:如果operatorreplaceadd,表示新的值。

imageOverrider:
  - component: Registry
    operator: add
    value: registry.cn-hangzhou.aliyuncs.com

plaintext

通過JSON Patch方式修改資源。

  • path:表示目標欄位的路徑。

  • value:表示目標欄位的值,如果operatorremove,則該欄位為空白。

  • operator:支援選擇removeaddreplace

plaintext:
  - operator: replace
    path: /spec/replicas
    value: 1

相關文檔

如何在艦隊執行個體中建立應用,並配置相應的分發策略或差異化策略進行多叢集分發,請參見應用分發快速入門