您可以通過ACK One艦隊的應用分發功能將艦隊執行個體中的應用分發至多個關聯集群中,無需依賴Git倉庫,簡化應用部署流程。本文介紹如何在艦隊執行個體中建立應用並根據分發策略分發至多叢集中。
前提條件
已開啟艦隊管理功能。具體操作,請參見開啟艦隊管理功能。
艦隊執行個體已添加多個關聯集群。具體操作,請參見管理關聯集群。
已從ACK One控制台擷取Fleet執行個體的KubeConfig,並通過kubectl串連至Fleet執行個體。
已授予RAM使用者AliyunAdcpFullAccess許可權。具體操作,請參見為RAM使用者授權。
已安裝AMC命令列工具。具體操作,請參見AMC命令列協助。
步驟一(可選):在艦隊執行個體中建立命名空間
如果待分發的應用所在的命名空間在艦隊中不存在,您需要先在艦隊執行個體中建立命名空間,如已存在則跳過此步驟。
使用艦隊執行個體的KubeConfig串連艦隊執行個體,執行以下命令,建立樣本命名空間demo。
kubectl create namespace demo
步驟二:在艦隊執行個體中建立應用
此處應用支援ConfigMap、Deployment、Service等資源,本文以分發單獨一個Nginx Deployment為例介紹。
使用以下內容,建立weighted-deployment.yaml檔案。
apiVersion: apps/v1 kind: Deployment metadata: namespace: demo # 分發的應用所在的命名空間。 name: weighted-deployment spec: replicas: 3 selector: matchLabels: app: weighted-deployment template: metadata: labels: app: weighted-deployment spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
執行以下命令部署應用。
kubectl apply -f weighted-deployment.yaml
步驟三:在艦隊執行個體中建立分發策略為多叢集分發應用
您可以通過定義分發策略(PropagationPolicy)選擇需要分發的應用以及對應的叢集。建立分發策略後會將匹配到的應用分發到對應叢集中。
本文樣本:以複製(Duplicated)方式將Deployment weighted-deployment分發到cluster1和cluster2中,兩叢集副本數一致,均為3個。
使用以下內容,建立propagationpolicy.yaml檔案。
apiVersion: one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: weighted-pp namespace: demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: weighted-deployment placement: clusterAffinity: clusterIds: - ${cluster1-id} # 您的叢集ID。 - ${cluster2-id} # 您的叢集ID。 replicaScheduling: replicaSchedulingType: Duplicated
主要參數說明如下,詳細參數說明請參見分發策略。
參數
說明
參數值
resourceSelectors
選擇一個或多個待分發的K8s資源。
apiVersion
:指定待分發資源的apiVersion,必選。kind
:指定待分發資源的類型,必選。name
:指定待分發資源的名稱。namespace
:指定待分發資源的命名空間。說明PropagationPolicy
只可以選擇其本身所在命名空間的資源。labelSelector
:通過標籤選擇資源。
placement
clusterAffinity
:指定資源要分發的叢集。通過clusterIds數組直接指明叢集ID。更多其他選擇方式請參見分發策略。
說明此處需填寫叢集ID,不是叢集名稱。
replicaScheduling
:指定有副本數資源的調度策略。例如Deployment、StatefulSet、Job。replicaSchedulingType
值為Duplicated,表示會將每個資源都複製到叢集中,即每個叢集都會有spec.Replicas
個副本數。更多說明請參見分發策略。執行以下命令,建立分發策略。
kubectl apply -f propagationpolicy.yaml
步驟四(可選):在艦隊執行個體中建立差異化策略
您可以通過定義差異化策略(OverridePolicy)選擇需要差異化部署的叢集以及資源。建立差異化策略後會將相應的資源進行定製化修改後再部署到選中的叢集中。
本文樣本:將部署到cluster2的應用進行一些差異化修改,將replicas
數修改為1,且將鏡像的registry
修改為阿里雲的registry
。
使用以下內容,建立overridepolicy.yaml檔案。
apiVersion: one.alibabacloud.com/v1alpha1 kind: OverridePolicy metadata: name: example namespace: demo spec: resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: weighted-pp overrideRules: - targetCluster: clusterNames: - ${cluster2-id} # 需要差異化部署的叢集ID。 overriders: plaintext: - operator: replace path: /spec/replicas value: 1 imageOverrider: - component: Registry operator: replace value: registry.cn-hangzhou.aliyuncs.com
主要參數說明如下,詳細參數說明請參見差異化策略。
參數
說明
參數值
resourceSelector
選擇需要差異化修改的資源。
apiVersion
:指定需要差異化修改資源的apiVersion,必選。kind
:指定需要差異化修改的資源類型,必選。name
:指定需要差異化修改的資源名稱。namespace
:指定需要差異化修改的命名空間。說明PropagationPolicy
只可以選擇其本身所在命名空間的資源。labelSelector
:通過標籤來選擇資源。
overrideRules
通過一組覆蓋規則修改應用模板。
plaintext
:使用JSON Patch的方式修改模板。imageOverrider
:可以修改鏡像的registry
、repository
、version
。
執行以下命令,建立差異化策略。
kubectl apply -f overridepolicy.yaml
步驟五:查看多叢集中應用的狀態
您可以通過以下AMC命令查看應用的多叢集分髮狀態,也可以直接去關聯集群中查看應用的運行狀態,以確認艦隊應用分發成功。
執行以下命令,查看應用狀態。
kubectl amc get deploy -n demo
預期輸出:
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION
weighted-deployment cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
weighted-deployment cxxxxxxxxxxxxx 3/3 3 3 3d4h Y
預期輸出表明,應用已經分發至指定的叢集中。
相關文檔
如需對多叢集中分發的應用進行統一監控,請參見監控管理。
如需實現同城容災功能,請參見基於多叢集網關實現同城容災。
關於應用分發策略參數詳細資料,請參見分發策略與差異化策略。