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

Container Service for Kubernetes:アプリケーション配布の概要

最終更新日:Mar 18, 2025

Distributed Cloud Container Platform for Kubernetes (ACK One) Fleet は、アプリケーション配布機能を提供します。この機能を使用すると、Fleet インスタンスから、Fleet インスタンスに関連付けられている複数のクラスタにアプリケーションを配布できます。これにより、Git リポジトリに依存することなく、アプリケーション配布が簡素化されます。このトピックでは、Fleet インスタンスでアプリケーションを作成し、PropagationPolicy に基づいて複数のクラスタにアプリケーションを配布する方法について説明します。

前提条件

(オプション) 手順 1: Fleet インスタンスに名前空間を作成する

配布するアプリケーションの名前空間が Fleet インスタンスに存在しない場合は、Fleet インスタンスに名前空間を作成します。名前空間が存在する場合は、この手順をスキップします。

Fleet インスタンスの kubeconfig ファイルを使用して Fleet インスタンスに接続し、次のコマンドを実行して demo という名前のサンプル名前空間を作成します。

kubectl create namespace demo

手順 2: Fleet インスタンスにアプリケーションを作成する

アプリケーションは、ConfigMap、Deployment、Service などのリソースをサポートしています。このトピックでは、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: Fleet インスタンスの PropagationPolicy を作成して、複数のクラスタにアプリケーションを配布する

PropagationPolicy を定義して、配布するアプリケーションと対応するクラスタを選択できます。PropagationPolicy を作成すると、一致するアプリケーションがクラスタに配布されます。

この例では、weighted-deployment という名前の Deployment が、複製された方法で Cluster1 と Cluster2 に配布されます。各クラスタには 3 つのレプリカがあります。

  1. 次のコマンドを実行して、Fleet インスタンスによって管理されるサブクラスタの 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 という名前のファイルを作成し、次の内容をファイルに追加します。

    説明

    ClusterPropagationPolicy を使用すると、クラスタ全体のリソースを配布できます。PropagationPolicy を使用すると、名前空間全体のリソースを配布できます。

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: ClusterPropagationPolicy
    metadata:
      name: web-demo
    spec:
      - apiVersion: v1
        kind: Namespace
        name: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # クラスタの ID。
          - ${cluster2-id} # クラスタの ID。
        replicaScheduling:
          replicaSchedulingType: Duplicated
    ---
    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: web-demo
      namespace: demo
    spec:
      preserveResourcesOnDeletion: true # このパラメーターを true に設定します。Fleet インスタンスからリソースを削除すると、サブクラスタ内のリソースは保持されます。サブクラスタからリソースを同時に削除する場合は、このパラメーターを false に設定します。
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
        namespace: demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # クラスタの ID。
          - ${cluster2-id} # クラスタの ID。
        replicaScheduling:
          replicaSchedulingType: Duplicated

    次の表にパラメーターを示します。詳細については、「PropagationPolicy」をご参照ください。

    パラメーター

    説明

    resourceSelectors

    配布する 1 つ以上の Kubernetes リソースを選択します。

    • apiVersion: 必須。配布するリソースの apiVersion。

    • kind: 必須。配布するリソースのタイプ。

    • Name: 配布するリソースの名前。

    • namespace: 配布するリソースの名前空間。

      説明

      PropagationPolicy では、ポリシーが存在する名前空間のリソースのみを選択できます。

    • labelSelector: ラベルを使用してリソースを選択します。

    placement

    clusterAffinity: リソースを配布するクラスタ。

    リソースを配布するクラスタの ID。その他のオプションについては、「PropagationPolicy」をご参照ください。

    説明

    クラスタ名ではなく、クラスタ ID を入力します。

    replicaScheduling: ポッドを作成するリソースのスケジューリングポリシー。例: Deployment、StatefulSet、Job。

    replicaSchedulingType パラメーターの値は Duplicated で、各リソースがクラスタに複製されることを指定します。各クラスタのレプリカ数は、spec.Replicas パラメーターを使用して構成されます。詳細については、「PropagationPolicy」をご参照ください。

  3. 次のコマンドを実行して、PropagationPolicy を作成します。

    kubectl apply -f propagationpolicy.yaml

(オプション) 手順 4: Fleet インスタンスに OverridePolicy を作成する

OverridePolicy を構成して、さまざまなクラスタとリソースのデプロイ要件を満たすことができます。OverridePolicy を作成すると、選択したクラスタにデプロイされる前にリソースが変更されます。

この例では、replicas の数が 1 に変更され、イメージの registry が Alibaba Cloud の registry に変更されます。

  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」をご参照ください。

    パラメーター

    説明

    resourceSelector

    オーバーライドするリソースを選択します。

    • apiVersion: 必須。オーバーライドするリソースの apiVersion。

    • kind: 必須。オーバーライドするリソースのタイプ。

    • name: オーバーライドするリソースの名前。

    • namespace: オーバーライドする名前空間。

      説明

      PropagationPolicy では、ポリシーが存在する名前空間のリソースのみを選択できます。

    • labelSelector: ラベルを使用してリソースを選択します。

    overrideRules

    オーバーライドルールセットを使用してアプリケーションテンプレートをオーバーライドします。

    • plaintext: JSONPatch を使用してテンプレートをオーバーライドできます。

    • imageOverrider: RegistryRepositoryVersion のいずれかの方法を使用してイメージをオーバーライドできます。

  2. 次のコマンドを実行して、OverridePolicy を作成します。

    kubectl apply -f overridepolicy.yaml

手順 5: 複数のクラスタでアプリケーションのステータスを表示する

次の AMC コマンドを実行して、複数のクラスタでアプリケーションのステータスを確認できます。また、関連付けられたクラスタでアプリケーションの実行ステータスを確認して、Fleet インスタンスのアプリケーションが配布されていることを確認することもできます。

次のコマンドを実行して、アプリケーションのステータスをクエリします。

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

コマンド出力は、アプリケーションが指定されたクラスタに配布されたことを示しています。

手順 6: アプリケーションを更新およびオーバーライドする

  1. 次の内容を使用して web-demo.yaml ファイルを変更します。この例では、replicas の数が増加しています。ビジネス要件に基づいて、アプリケーションリソースをオーバーライドまたは更新できます。

    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. 次のコマンドを実行して、web-demo.yaml ファイルを更新します。

    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

手順 7: アプリケーションリソースを削除する

名前空間のリソースの誤削除を防ぐため、Fleet はリソースを配布しますが、リソースは削除しません。他のリソースの誤削除を防ぐため、Fleet インスタンスのアプリケーションリソースが削除された場合、または PropagationPolicy が削除された場合、デフォルトではサブクラスタのアプリケーションリソースは削除されません。サブクラスタのアプリケーションリソースを削除するには、次の手順を実行します。

  1. ClusterPropagationPolicypreserveResourcesOnDeletion フィールドの値を false に変更します。これは、Fleet インスタンスのアプリケーションリソースが削除されたときに、サブクラスタのアプリケーションリソースが削除されることを指定します。

    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} # クラスタの ID。
          - ${cluster2-id} # クラスタの ID。
        replicaScheduling:
          replicaSchedulingType: Duplicated
  2. 次のコマンドを実行して、PropagationPolicy を更新します。

    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

関連情報