分发策略与差异化策略

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

相关文档

如何在舰队实例中创建应用,并配置相应的分发策略或差异化策略进行多集群分发,请参见应用分发快速入门