赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 分布式云容器平台ACK One
  4. 操作指南
  5. 多集群舰队
  6. 应用分发
  7. 分发策略与差异化策略

分发策略与差异化策略

  • 应用分发
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

ACK One舰队的应用分发通过分发策略和差异化策略完成。分发策略(PropagationPolicy)用于定义哪些资源需要分发到哪些集群中,差异化策略(OverridePolicy)用于定义资源在分发至不同集群时需要哪些差异化配置。本文详细介绍分发策略(PropagationPolicy)和差异化策略(OverridePolicy)的配置说明。

分发策略

您可以通过定义PropagationPolicy、ClusterPropagationPolicy来配置分发策略,实现应用的多集群分发,PropagationPolicy和ClusterPropagationPolicy设计参考Karmada开源项目,与Karmada的ClusterPropagationPolicy和PropagationPolicy接口兼容。

  • ClusterPropagationPolicy:用于集群内应用的分发,支持集群级别应用的分发,包括PersistentVolume、StorageClass、Namespace、CustomResourceDefinition,也支持任意命名空间(不包括系统命名空间)的应用分发。具体分发资源的RBAC权限,受多集群舰队RBAC权限的控制。

  • PropagationPolicy:用于命名空间级别的应用分发,只能分发其所在命名空间的应用。

下文以一个通过按静态权重分发应用的PropagationPolicy为例,介绍如何定义一个分发策略以及各参数含义。

apiVersion: 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版本信息。

此处固定为one.alibabacloud.com/v1alpha1。

kind

是

分发策略的级别,包括PropagationPolicy、ClusterPropagationPolicy。

  • ClusterPropagationPolicy:分发集群级别的应用以及集群内任意命名空间(不包括系统命名空间)的应用。

  • PropagationPolicy:只能分发它所在命名空间的应用。

PropagationPolicy

namespace

否

当kind为PropagationPolicy时需要指定已有的命名空间。

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

是

  • clusterAffinity:表示应用待分发的集群。详情参见下方clusterAffinity参数说明。

  • replicaScheduling:表示有副本数资源的调度策略,例如Deployment、StatefulSet。详情参见下方replicaScheduling参数说明。

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:当purgeMode为Graciously时,此字段表示优雅驱逐的最大等待时间,默认600s。

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

preserveResourcesOnDeletion

是

表示删除掉Policy后是否会保留相应分发资源,默认为true。

false

resourceSelector参数说明

参数

是否必选

说明

示例值

apiVersion

是

分发资源的API版本。

v1

kind

是

分发资源的类型。

Deployment

namespace

否

分发资源的命名空间。

说明

如果使用PropagationPolicy,则命名空间就是其所在的命名空间,该字段不会在其他命名空间生效。

demo

name

否

分发资源的名称。

任意名称

labelSelector

否

通过标签选择器来选择资源。

  • matchLabels:表示key,value键值对。

  • matchExpressions:表示一个数组,每个元素包含key、operator、values三个参数。

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

否

副本调度策略,包括Duplicated和Divided。

  • Duplicated:表示将应用直接复制到每个集群中。

  • Divided:表示将应用副本数按照集群权重进行调度,所有关联集群的副本数之和为舰队集群中该应用的spec的副本数。

Duplicated

customSchedulingType

否

个性化调度策略,目前对于作业工作负载仅支持Gang调度。

Gang

replicaDivisionPreference

否

副本拆分策略,包括weighted、Aggregated。

  • Weighted:表示按照权重进行副本数的调度。

  • Aggregated:表示会将副本尽量分布到分数高的集群中。

weighted

weightPreference

否

表示更倾向于按照动态权重还是静态权重。

  • dynamicWeight:目前支持AvailableReplicas,可以根据子集群的资源情况预估可以分发的副本数,根据多个子集群副本数的比例进行调度拆分。

  • staticWeightList是一个数组,每个元素包含clusterAffinity和weight两个参数。

    • 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

差异化策略

在应用分发时,某些不同集群可能需要不同的配置,差异化策略可以将对应集群的应用进行差异化部署。您可以通过定义ClusterOverridePolicy、OverridePolicy来配置差异化策略。ClusterOverridePolicy、OverridePolicy设计参考Karmada开源项目,与Karmada的ClusterOverridePolicy

和OverridePolicy接口兼容。

  • ClusterOverridePolicy:用于差异化修改集群级别的资源,包括PersistentVolume、StorageClass、Namespace、CustomResourceDefinition,也支持差异化修改任意命名空间(不包括系统命名空间)的资源。

  • 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:
        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版本信息。

此处固定为one.alibabacloud.com/v1alpha1。

kind

是

差异化策略类型,包括ClusterOverridePolicy和OverridePolicy。

  • ClusterOverridePolicy:可以差异化修改集群级别的资源以及集群内任意命名空间(不包括系统命名空间)的资源。

  • OverridePolicy:只能分发它所在命名空间的资源。

OverridePolicy

namespace

否

当kind为OverridePolicy时需要指定已有的命名空间。

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结构体数组,其中包含一些差异化规则,目前支持image和plaintext,可按需选择。详情请参见overriders参数说明。

  • plaintext:通过JSON Patch的path、value、operator来修改。

  • imageOverrider:用于修改镜像。

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

overriders参数说明

参数

是否必选

说明

示例值

imageOverrider

否

修改镜像的方式。

  • predicate(可选):表示待修改的镜像的path,例如/spec/template/spec/containers/0/image,如果为空则所有镜像都会进行修改

  • component:在Registry、Repository、Tag三种类型选择一种方式对镜像进行修改,镜像格式为[registry/]repository[:tag]。

  • operator:支持选择remove、add、replace。

  • value:如果operator为replace和add,表示新的值。

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

plaintext

否

通过JSON Patch方式修改资源。

  • path:表示目标字段的路径。

  • value:表示目标字段的值,如果operator为remove,则该字段为空。

  • operator:支持选择remove、add、replace。

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

相关文档

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

相关文章

应用分发概述 2025-04-18 18:10

您可以通过ACK One舰队的应用分发功能将舰队实例中的应用分发至多个关联集群中。通过在舰队实例中定义分发策略,精准选择出符合条件的Kubernetes资源,并将其分发至策略指定的多个目标集群中。您还可以定义差异化策略来选择需要差异化部署的集群以及应用。相比于GitOps方式,它无需依赖Git仓库。

应用分发快速入门 2025-04-18 18:10

您可以通过ACK One舰队的应用分发功能将舰队实例中的应用分发至多个关联集群中,无需依赖Git仓库,简化应用部署流程。本文介绍如何在舰队实例中创建应用并根据分发策略分发至多集群中。 前提条件 已开启舰队管理功能。 </

分发策略与差异化策略 2025-04-18 18:10

ACK One舰队的应用分发通过分发策略和差异化策略完成。分发策略(PropagationPolicy)用于定义哪些资源需要分发到哪些集群中,差异化策略(OverridePolicy)用于定义资源在分发至不同集群时需要哪些差异化配置。本文详细介绍分发策略(PropagationPolicy)和差异化

动态分发和重调度 2025-04-18 18:10

ACK One舰队可以通过PropagationPolicy根据子集群的可用资源对工作负载(如 Deployment、StatefulSet和Job)进行副本的切分。同时ACK One舰队默认开启重调度能力,由于子集群的可用资源会随着时间变化,原本在子集群中的工作负载可能会存在无法调度的副本。ACK

应用分发状态说明及FAQ 2025-04-18 18:10

本文介绍应用分发能力的实现流程,并提供分发状态说明与常见问题排查思路。 工作原理

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号