ACK One艦隊的應用分發通過分發策略和差異化策略完成。分發策略(PropagationPolicy)用於定義哪些資源需要分發到哪些叢集中,差異化策略(OverridePolicy)用於定義資源在分發至不同叢集時需要哪些差異化配置。本文詳細介紹分發策略(PropagationPolicy)和差異化策略(OverridePolicy)的配置說明。
分發策略
您可以通過定義PropagationPolicy、ClusterPropagationPolicy來配置分發策略,實現應用的多叢集分發,PropagationPolicy和ClusterPropagationPolicy設計參考Karmada開源專案,與Karmada的ClusterPropagationPolicy和PropagationPolicy介面相容。
ClusterPropagationPolicy:用於叢集內應用的分發,支援叢集層級應用的分發,包括PersistentVolume、StorageClass、Namespace、CustomResourceDefinition,也支援任意命名空間(不包括系統命名空間)的應用分發。具體分發資源的RBAC許可權,受多叢集艦隊RBAC許可權的控制。PropagationPolicy:用於命名空間層級的應用分發,只能分發其所在命名空間的應用。
下文以一個通過按靜態權重分發應用的PropagationPolicy為例,介紹如何定義一個分發策略以及各參數含義。
apiVersion: policy.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版本資訊。 | 此處固定為 |
kind | 是 | 分發策略的層級,包括
| PropagationPolicy |
namespace | 否 | 當 | demo |
name | 否 | 分發策略的名稱。 | policy-xxxx |
resourceSelectors | 否 | 選擇一個或者多個要分發的K8s資源。詳情參見下方resourceSelector參數說明。 | |
propagateDeps | 否 | 表示相關資源是否會被自動分發。例如在Deployment引用了ConfigMap的情況下,ConfigMap是否會同步分發到子叢集。 | true或false |
placement | 是 |
| |
dependentOverrides | 否 | 表明依賴的 等待依賴的 | |
failover | 否 | 應用宕機之後的
| |
preserveResourcesOnDeletion | 是 | 表示刪除掉Policy後是否會保留相應分發資源,預設為true。 | false |
resourceSelector參數說明
參數 | 是否必選 | 說明 | 樣本值 |
apiVersion | 是 | 分發資源的API版本。 | v1 |
kind | 是 | 分發資源的類型。 | Deployment |
namespace | 否 | 分發資源的命名空間。 說明 如果使用 | demo |
name | 否 | 分發資源的名稱。 | 任意名稱 |
labelSelector | 否 | 通過標籤選取器來選擇資源。
| |
clusterAffinity參數說明
參數 | 是否必選 | 說明 | 樣本值 |
clusterNames | 否 | 表示需要分發資源的叢集列表,通過叢集ID的形式展示。 | |
excludeClusters | 否 | 表示去除掉的叢集列表叢集ID,通過叢集ID的形式展示。 | |
labelSelector | 否 | 通過標籤選取器選擇待分發的叢集。 | |
replicaScheduling參數說明
參數 | 是否必選 | 說明 | 樣本值 |
replicaSchedulingType | 否 | 副本調度策略,包括
| Duplicated |
customSchedulingType | 否 | 個人化調度策略,目前對於作業工作負載僅支援Gang調度。 | Gang |
replicaDivisionPreference | 否 | 副本拆分策略,包括
| 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: policy.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版本資訊。 | 此處固定為 |
kind | 是 | 差異化策略類型,包括
| OverridePolicy |
namespace | 否 | 當 | demo |
name | 是 | 差異化策略名稱稱。 | 任意名稱 |
resourceSelectors | 是 | resourceSelector數組。詳情請參見下方resourceSelector參數說明。 | |
overrideRules | 是 | ruleWithCluster數組。詳情請參見下方ruleWithCluster參數說明。 | |
resourceSelector參數說明
參數 | 是否必選 | 說明 | 樣本值 |
apiVersion | 是 | 選擇分發資源的 | v1 |
kind | 是 | 分發資源的類型。 | Deployment |
namespace | 否 | 分發資源的命名空間。 說明 如果使用 | demo |
name | 否 | 分發資源名稱。 | 任意名稱 |
labelSelector | 否 | 通過標籤選取器選擇待分發的資源。 | |
clusterAffinity參數說明
參數 | 是否必選 | 說明 | 樣本值 |
clusterNames | 否 | 表示需要分發資源的叢集列表,通過叢集ID的形式展示。 | |
excludeClusters | 否 | 表示去除掉的叢集列表叢集ID,通過叢集ID的形式展示。 | |
labelSelector | 否 | 通過標籤選取器選擇待分發的叢集。 | |
ruleWithCluster參數說明
參數 | 是否必選 | 說明 | 樣本值 |
targetCluster | 是 | 通過 | |
overriders | 是 |
| |
overriders參數說明
參數 | 是否必選 | 說明 | 樣本值 |
imageOverrider | 否 | 修改鏡像的方式。
| |
plaintext | 否 | 通過JSON Patch方式修改資源。
| |
相關文檔
如何在艦隊執行個體中建立應用,並配置相應的分發策略或差異化策略進行多叢集分發,請參見應用分發快速入門。