すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:単一クラスターアプリケーションをフリートに移行し、複数のクラスターに配布する

最終更新日:Nov 09, 2025

複数のクラスターにまたがるアプリケーションのデプロイには、反復的なタスクが伴い、エラーが発生しやすく、同期が困難です。AMC コマンドラインインターフェイスを使用すると、アプリケーションを複数のクラスターに迅速にデプロイできます。これにより、将来の更新のために統一された管理と自動同期が提供されます。

仕組み

image

  1. ユーザーが kubectl amc promote コマンドを実行して、選択したリソースをクラスターからフリートに同期します。

  2. リソースがフリートに作成され、PropagationPolicy が自動的に生成されます。このポリシーには、target-clusters で指定されたクラスターとソースクラスターである cluster-1 が含まれます。

  3. フリートは、図の cluster-2 など、target-clusters で指定されたクラスターにリソースを配布します。その後、cluster-1 を含むすべてのターゲットクラスター内の同期されたリソースは、フリートによって管理されます。

前提条件

ステップ 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 が作成され、名前空間が配布されます。

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

ステップ 2: promote コマンドを実行してリソースをフリートに同期する

kubectl amc promote コマンドを使用して、単一クラスターのリソースをフリートに同期し、複数のクラスターに配布します。

  1. amc get コマンドを使用して初期状態を確認します。出力は、service1web-demo が cluster-1 の gateway-demo 名前空間にのみ存在することを示しています。ADOPTION は `N` であり、リソースが ACK One フリートの PropagationPolicy によって管理されていないことを示します。

    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 のリソースをフリート管理下に置き、他のクラスターに配布します。

    ${cluster1_id} および ${cluster2_id} パラメーターをクラスター ID に置き換えます。target-clusters パラメーターは、昇格されたリソースが配布されるクラスターを指定します。複数のクラスターを指定するには、${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 に配布され、両方のクラスターのリソースが 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 コマンドは `Duplicated` タイプの配布ポリシー (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 パラメーターを追加して、ポリシーの自動作成を防止します。その後、目的のポリシーを手動で設定できます。詳細については、「配布ポリシーと差別化ポリシー」をご参照ください。