全部產品
Search
文件中心

Container Service for Kubernetes:單叢集應用遷移至艦隊並分發到多叢集

更新時間:Sep 13, 2025

為解決應用多叢集部署時的重複操作,易出錯,難同步等問題,可使用AMC命令列工具將應用快速部署到多個叢集,並實現後續統一管理和自動同步更新。

工作原理

image

  1. 使用者執行kubectl amc promote命令,將叢集內選定的資源同步到艦隊。

  2. 在艦隊中建立資源並自動產生PropagationPolicy,Policy中會添加target-clusters指定的叢集和cluster-1自身。

  3. 艦隊會將資源分發到target-clusters(圖中cluster-2)中,並且這些叢集(包含cluster-1)中同步後的資源都由艦隊統一管理。

前提條件

步驟一:在艦隊及目的地組群中建立命名空間

將資源分發至多個叢集前,請確保其所屬的命名空間已同時存在於艦隊和所有分發目的地組群中,否則將會分發失敗。下方樣本中,需要分發的資源屬於gateway-demo命名空間。

若命名空間已經存在於艦隊及所有目的地組群中,則可跳過此步驟。
  1. 使用艦隊kubeconfig執行以下命令,在艦隊中建立gateway-demo

    kubectl create ns gateway-demo

  2. 複製並儲存下方YAML到web-demo-ns-policy.yaml中。

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo-ns-policy
    spec:
      resourceSelectors:
      - apiVersion: v1
        kind: Namespace
        name: gateway-demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1_id} # 您的叢集id
          - ${cluster2_id} # 您的叢集id
        replicaScheduling:
          replicaSchedulingType: Duplicated
  3. 使用艦隊kubeconfig執行以下命令,在艦隊中建立ClusterPropagationPolicy,分發Namespace。

    kubectl apply -f web-demo-ns-policy.yaml

步驟二:執行promote命令同步資源到艦隊

使用kubectl amc promote命令將單叢集資源同步到艦隊,並指定分發到多個叢集。

  1. 使用amc get命令查看初始情況:service1web-demo僅存在於cluster-1叢集中的gateway-demo namespace下。ADOPTION為N表示未被ACK One艦隊中的Propagation管理。

    kubectl amc -ngateway-demo get svc -M
    kubectl amc -ngateway-demo get deployment -M

    預期輸出:

    NAME       CLUSTER    CLUSTER_ALIAS   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE    ADOPTION
    service1   c8xxxxxx   cluster-1       ClusterIP   192.168.**.**   <none>        80/TCP    104m   N
    
    NAME       CLUSTER    CLUSTER_ALIAS   READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
    web-demo   c8xxxxxx   cluster-1       2/2     2            2           104m   N
  2. 執行以下命令,將cluster-1的資源納入艦隊管理,並額外分發到其他叢集。

    請使用叢集ID替換命令中的${cluster1_id}${cluster2_id}參數。target-clusters表示要將promote的資源額外分發到哪些叢集中,指定多個叢集格式為${cluster2_id},${cluster3_id}

    kubectl amc promote service service1 -ngateway-demo -m ${cluster1_id} --target-clusters ${cluster2_id} 
    kubectl amc promote deployment web-demo -ngateway-demo -m ${cluster1_id} --target-clusters ${cluster2_id} 

    預期輸出:

    ResourceTemplate (gateway-demo/service1) is created successfully
    PropagationPolicy (gateway-demo/service1-67676f499c) is created successfully
    Resource "/v1, Resource=services"(gateway-demo/service1) is promoted successfully
    
    ResourceTemplate (gateway-demo/web-demo) is created successfully
    PropagationPolicy (gateway-demo/web-demo-6675b99c65) is created successfully
    Resource "apps/v1, Resource=deployments"(gateway-demo/web-demo) is promoted successfully
  3. 再次使用amc get命令查看結果,可見service1web-demo已被分發到cluster-2叢集中,並且2個叢集中的該資源都受ACK One 艦隊管理(ADOPTION為Y)。至此,cluster-1中的web-demo應用已擴充為多叢集部署。

    kubectl amc -ngateway-demo get svc -M
    kubectl amc -ngateway-demo get deployment -M

    預期輸出:

    NAME       CLUSTER    CLUSTER_ALIAS   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE     ADOPTION
    service1   cfxxxxxx   cluster-2       ClusterIP   192.168.**.***   <none>        80/TCP    19s     Y
    service1   c8xxxxxx   cluster-1       ClusterIP   192.168.**.**    <none>        80/TCP    5h58m   Y
    
    NAME       CLUSTER    CLUSTER_ALIAS   READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
    web-demo   c8xxxxxx   cluster-1       2/2     2            2           6h1m   Y
    web-demo   cfxxxxxx   cluster-2       2/2     2            2           24s    Y

修改預設分發策略

promote 命令預設自動建立“複製分發”類型的分發策略(PropagationPolicy),即設定replicaSchedulingType: Duplicated,表明將應用直接複製到每個叢集中。在艦隊中執行下方命令,可查看預設建立的分發策略。

kubectl get pp -ngateway-demo xx -oyaml

預期輸出:

apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
  ...
spec:
  ...
  placement:
    clusterAffinity:
      ...
    replicaScheduling:
      replicaSchedulingType: Duplicated # 複製分發策略

若需使用其他策略,例如副本靜態權重或者動態權重等,可在執行命令時加入 --auto-create-policy=false 參數禁止自動建立,然後手動設定所需的策略。具體操作,請參見分發策略與差異化策略