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方式修改資源。
|
|
相關文檔
如何在艦隊實例中創建應用,并配置相應的分發策略或差異化策略進行多集群分發,請參見應用分發快速入門。