全部產品
Search
文件中心

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

更新時間:Sep 26, 2024

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

分發策略

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

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

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

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

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

主要參數說明

參數

是否必選

說明

樣本值

apiVersion

API版本資訊。

此處固定為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

placement

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

prune

表示刪除掉Policy後是否會刪除相應分發資源,預設false

false

conflictResolution

表示資源分發衝突時處理策略。包括OverwriteAbort

  • Overwrite:如果叢集已有同名資源,則覆蓋同名資源。

  • Abort:如果叢集已有同名資源,則停止分發該資源。

Abort

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參數說明

參數

是否必選

說明

樣本值

clusterIds

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

clusterIds:
- 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

replicaDivisionPreference

副本拆分策略,設定為weighted,表示按照權重來進行副本數的調度。

weighted

weightPreference

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

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

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

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

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

差異化策略

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

OverridePolicy介面相容。

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

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

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

apiVersion: one.alibabacloud.com/v1alpha1
kind: OverridePolicy
metadata:
  name: demo
  namespace: demo
spec:
  resourceSelectors:
    - apiVersion: apps/v1
      kind: Deployment
      name: example
  overrideRules:
    - targetCluster:
        clusterIds:
          - 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版本資訊。

此處固定為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參數說明

參數

是否必選

說明

樣本值

clusterIds

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

clusterIds:
- 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:
      clusterIds:
      - 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

相關文檔

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