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

Container Service for Kubernetes:アプリケーションディストリビューションの開始

最終更新日:Mar 26, 2026

ACK One Fleet を使用すると、Git リポジトリに依存することなく、フリートインスタンスから複数のメンバークラスターにアプリケーションをディストリビューションできます。このガイドでは、PropagationPolicy を使用して NGINX Deployment を 2 つのクラスターにデプロイする手順を説明します。

このガイドの最後までに、以下の操作ができるようになります:

  • フリートインスタンスでのアプリケーションの作成

  • 複数のクラスターにアプリケーションをディストリビューションするための PropagationPolicy の定義

  • (オプション) クラスターごとの構成をカスタマイズするための OverridePolicy の適用

  • ディストリビューションされたリソースの検証、更新、およびクリーンアップ

前提条件

開始する前に、次のことを確認してください。

(オプション) ステップ 1: フリートインスタンスでの名前空間の作成

アプリケーションの名前空間がフリートインスタンスに存在しない場合は、作成します。名前空間がすでに存在する場合は、このステップをスキップしてください。

次のコマンドを実行して、demo という名前の名前空間を作成します。

kubectl create namespace demo

ステップ 2: フリートインスタンスでのアプリケーションの作成

フリートは、ConfigMaps、Deployments、および Services のディストリビューションをサポートしています。この例では、NGINX Deployment を使用します。

  1. 次の内容で web-demo.yaml という名前のファイルを作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: demo
      name: web-demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            ports:
            - containerPort: 80
  2. アプリケーションをデプロイします。

    kubectl apply -f web-demo.yaml

ステップ 3: アプリケーションをディストリビューションするための PropagationPolicy の作成

PropagationPolicy は、ディストリビューションするリソースとターゲットとするクラスターをフリートコントローラーに指示します。作成されると、コントローラーは一致するリソースを自動的に検出し、指定されたクラスターにプッシュします。

この例では、Deployment を Duplicated モードで 2 つのクラスターにディストリビューションするため、各クラスターは 3 つのレプリカを個別に実行します。

  1. フリートインスタンスによって管理されているメンバークラスターの ID を取得します。

    kubectl get mcl

    出力は次のようになります。

    NAME                                HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        3d23h
    cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   true                                  True     True        5d21h
  2. 次の内容で propagationpolicy.yaml という名前のファイルを作成します。${cluster1-id}${cluster2-id} を実際のクラスター ID に置き換えてください。

    ClusterPropagationPolicy はクラスタースコープのリソース (名前空間など) をディストリビューションします。PropagationPolicy は名前空間スコープのリソースをディストリビューションし、ポリシーが存在する名前空間内のリソースのみを選択できます。
    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo
    spec:
      resourceSelectors:
      - apiVersion: v1
        kind: Namespace
        name: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # The ID of your cluster.
          - ${cluster2-id} # The ID of your cluster.
        replicaScheduling:
          replicaSchedulingType: Duplicated
    ---
    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: web-demo
      namespace: demo
    spec:
      preserveResourcesOnDeletion: true # When true, deleting resources from the Fleet instance keeps them in the member cluster. Set to false to delete them together.
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
        namespace: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # The ID of your cluster.
          - ${cluster2-id} # The ID of your cluster.
        replicaScheduling:
          replicaSchedulingType: Duplicated

    次の表に、主要なパラメーターを示します。すべてのパラメーターのリファレンスについては、「PropagationPolicy」をご参照ください。

    パラメーター説明
    resourceSelectorsディストリビューションするリソース。apiVersionkindnamenamespace、または labelSelector を指定してリソースを照合します。demo 名前空間の web-demo Deployment を選択します。
    placement.clusterAffinityディストリビューションのターゲットクラスター。クラスター名ではなくクラスター ID を入力します。${cluster1-id}${cluster2-id}
    replicaScheduling.replicaSchedulingTypeスケジューリングモード。Duplicated は、完全なレプリカ数を各クラスターに複製します。レプリカ数は、ワークロードの spec.replicas で設定されます。Duplicated
  3. PropagationPolicy を適用します。

    kubectl apply -f propagationpolicy.yaml

(オプション) ステップ 4: クラスターごとの構成をカスタマイズするための OverridePolicy の作成

OverridePolicy は、デプロイメント前にリソース構成を変更し、個々のクラスターの設定を調整できます。

この例は ${cluster2-id} に適用され、2 つの変更を行います。

  • replicas3 から 1 に削減

  • イメージにレジストリプレフィックスを付加

OverridePolicy を適用する前${cluster2-id} 上の Deployment は次のようになります。

spec:
  replicas: 3
  ...
  containers:
    - image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0

OverridePolicy を適用した後${cluster2-id} 上の Deployment は次のようになります。

spec:
  replicas: 1
  ...
  containers:
    - image: {{Registry}}/registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
  1. 次の内容で overridepolicy.yaml という名前のファイルを作成します。

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: OverridePolicy
    metadata:
      name: example
      namespace: demo
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: web-demo
      overrideRules:
        - targetCluster:
            clusterNames:
              - ${cluster2-id}
          overriders:
            plaintext:
              - operator: replace
                path: /spec/replicas
                value: 1
            imageOverrider:
              - component: Registry
                operator: add
                value: {{Registry}}

    次の表に、主要なパラメーターを示します。すべてのパラメーターのリファレンスについては、「OverridePolicy」をご参照ください。

    パラメーター説明
    resourceSelectorsオーバーライドするリソース。apiVersionkindnamenamespace、または labelSelector を指定します。web-demo Deployment を選択します。
    overrideRules.plaintextJSONPatch を使用してリソースフィールドをオーバーライドします。operatorpath、および value を指定します。spec.replicas1 に変更します。
    overrideRules.imageOverriderイメージコンポーネント (RegistryRepository、または Version) をオーバーライドします。イメージにレジストリプレフィックスを付加します。
  2. OverridePolicy を適用します。

    kubectl apply -f overridepolicy.yaml

ステップ 5: ディストリビューションステータスの表示

次の AMC コマンドを実行して、アプリケーションがすべてのメンバークラスターにディストリビューションされているかどうかを確認します。

kubectl amc get deploy -ndemo -M

出力は次のようになります。

NAME       CLUSTER          READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
web-demo   cxxxxxxxxxxxxx   3/3     3            3           3d4h   Y
web-demo   cxxxxxxxxxxxxx   3/3     3            3           3d4h   Y

READY: 3/3ADOPTION: Y は、アプリケーションが各クラスターで実行されていることを確認します。

ステップ 6: アプリケーションの更新

  1. web-demo.yaml を更新して、replicas4 に増やします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: demo
      name: web-demo
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            ports:
            - containerPort: 80
  2. 更新されたマニフェストを適用します。

    kubectl apply -f web-demo.yaml
  3. 更新がすべてのクラスターに伝播されていることを確認します。

    kubectl amc get deploy -ndemo -M

    出力は次のようになります。

    NAME       CLUSTER          READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
    web-demo   cxxxxxxxxxxxxx   4/4     4            4           3d4h   Y
    web-demo   cxxxxxxxxxxxxx   4/4     4            4           3d4h   Y

    READY: 4/4 は、両方のクラスターのレプリカが更新されたことを確認します。

ステップ 7: アプリケーションリソースの削除

フリートはリソースをディストリビューションしますが、フリートインスタンスからアプリケーションまたは PropagationPolicy を削除しても、デフォルトではリソースを削除しません。これにより、メンバークラスターでのワークロードの偶発的な削除が防止されます。

メンバークラスターからリソースを削除するには、次の手順を実行します。

  1. ClusterPropagationPolicypreserveResourcesOnDeletionfalse に設定します。

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo
    spec:
      preserveResourcesOnDeletion: false
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
      - apiVersion: v1
        kind: Namespace
        name: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # The ID of your cluster.
          - ${cluster2-id} # The ID of your cluster.
        replicaScheduling:
          replicaSchedulingType: Duplicated
  2. 更新されたポリシーを適用します。

    kubectl apply -f propagationpolicy.yaml
  3. アプリケーションリソースを削除します。

    kubectl delete -f web-demo.yaml
  4. リソースがメンバークラスターから削除されたことを確認します。

    kubectl amc get deploy -ndemo -M

    出力は次のようになります。

    cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found
    cluster(cxxxxxxxxxxxxx): deployments.apps "web-demo" not found

関連トピック