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: 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版本信息。 | 此处固定为 |
kind | 是 | 分发策略的级别,包括
| PropagationPolicy |
namespace | 否 | 当 | demo |
name | 否 | 分发策略的名称。 | policy-xxxx |
resourceSelectors | 否 | 选择一个或者多个要分发的K8s资源。详情参见下方resourceSelector参数说明。 |
|
placement | 是 |
|
|
prune | 是 | 表示删除掉 | false |
conflictResolution | 是 | 表示资源分发冲突时处理策略。包括
| Abort |
resourceSelector参数说明
参数 | 是否必选 | 说明 | 示例值 |
apiVersion | 是 | 分发资源的API版本。 | v1 |
kind | 是 | 分发资源的类型。 | Deployment |
namespace | 否 | 分发资源的命名空间。 说明 如果使用 | demo |
name | 否 | 分发资源的名称。 | 任意名称 |
labelSelector | 否 | 通过标签选择器来选择资源。
|
|
clusterAffinity参数说明
参数 | 是否必选 | 说明 | 示例值 |
clusterIds | 否 | 表示需要分发资源的集群列表,通过集群ID的形式展示。 |
|
excludeClusters | 否 | 表示去除掉的集群列表集群ID,通过集群ID的形式展示。 |
|
labelSelector | 否 | 通过标签选择器选择待分发的集群。 |
|
replicaScheduling参数说明
参数 | 是否必选 | 说明 | 示例值 |
replicaSchedulingType | 否 | 副本调度策略,包括
| Duplicated |
replicaDivisionPreference | 否 | 副本拆分策略,设置为weighted,表示按照权重来进行副本数的调度。 | weighted |
weightPreference | 否 |
| 如下示例表示cluster1权重为2,cluster2权重为1,如果总副本数为3,则有2个副本会调度到cluster1,1个副本会调度到cluster2。
|
差异化策略
在应用分发时,某些不同集群可能需要不同的配置,差异化策略可以将对应集群的应用进行差异化部署。您可以通过定义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:
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版本信息。 | 此处固定为 |
kind | 是 | 差异化策略类型,包括
| OverridePolicy |
namespace | 否 | 当 | demo |
name | 是 | 差异化策略名称。 | 任意名称 |
resourceSelectors | 是 | resourceSelector数组。详情请参见下方resourceSelector参数说明。 |
|
overrideRules | 是 | ruleWithCluster数组。详情请参见下方ruleWithCluster参数说明。 |
|
resourceSelector参数说明
参数 | 是否必选 | 说明 | 示例值 |
apiVersion | 是 | 选择分发资源的 | v1 |
kind | 是 | 分发资源的类型。 | Deployment |
namespace | 否 | 分发资源的命名空间。 说明 如果使用 | demo |
name | 否 | 分发资源名称。 | 任意名称 |
labelSelector | 否 | 通过标签选择器选择待分发的资源。 |
|
clusterAffinity参数说明
参数 | 是否必选 | 说明 | 示例值 |
clusterIds | 否 | 表示需要分发资源的集群列表,通过集群ID的形式展示。 |
|
excludeClusters | 否 | 表示去除掉的集群列表集群ID,通过集群ID的形式展示。 |
|
labelSelector | 否 | 通过标签选择器选择待分发的集群。 |
|
ruleWithCluster参数说明
参数 | 是否必选 | 说明 | 示例值 |
targetCluster | 是 | 通过 |
|
overriders | 是 |
|
|
overriders参数说明
参数 | 是否必选 | 说明 | 示例值 |
imageOverrider | 否 | 修改镜像的方式。
|
|
plaintext | 否 | 通过JSON Patch方式修改资源。
|
|
相关文档
如何在舰队实例中创建应用,并配置相应的分发策略或差异化策略进行多集群分发,请参见应用分发快速入门。