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

Container Service for Kubernetes:ノードプールのデプロイメントセットに関するベストプラクティス

最終更新日:Sep 16, 2026

ノードプールにデプロイメントセットを割り当てて、Elastic Compute Service (ECS) インスタンスを物理サーバー間に分散させます。アフィニティー設定により、アプリケーションは基盤となるノードトポロジを認識し、ワークロードをノード間に均等に分散させ、ディザスタリカバリと高可用性を向上させることができます。

前提条件

デプロイメントセットが作成済みであること。

背景情報

単一ゾーンでは、高可用性を実現するために通常、サービスを複数のホストにデプロイします。物理サーバーに障害が発生すると、その上のすべてのレプリカが影響を受けます。ECS のデプロイメントセットは、リージョン内の異なる物理サーバーにインスタンスを分散させることで、相互の分離を保証し、サービスの利用不能リスクを低減します。

制限事項

クラスターにおける機能の使用に関する注意事項

  • デプロイメントセットは、ACK マネージドクラスターおよびACK 専用クラスターのみをサポートします。

  • デプロイメントセットは、ノードプールの作成時にのみ指定できます。既存のノードプールに対してデプロイメントセットを有効にすることはできません。各ノードプールは 1 つのデプロイメントセットをサポートします。

  • デプロイメントセットに手動でノードを追加または削除することはできません。ノード数を調整するには、ノードプールをスケーリングします。詳細については、「ノードプールの作成と管理」をご参照ください。

  • デプロイメントセットを持つノードプールは、スポットインスタンス をサポートしません。

デプロイメントセットのクォータとインスタンスタイプの制限

  • デプロイメントセットのクォータ制限:

    • ノードプールデプロイメントセットは、デフォルトで高可用性ポリシーを使用します。デプロイメントセット内では、ゾーンごとに最大 20 個の ECS インスタンスを作成できます。Alibaba Cloud リージョンあたりの ECS インスタンスの総数は 20 × ゾーンの数 です。必要なインスタンスタイプに対して、十分な ECS インスタンスクォータとインベントリを確保してください。詳細については、 デプロイメントセット をご参照ください。

      デプロイメントセットあたりの最大インスタンス数を増やすことはできません。アカウントのデプロイメントセットの最大数を増やすには、Quota Center から申請してください。詳細については、「デプロイメントセットの制限」をご参照ください。

    • デプロイメントセットでの ECS インスタンスの作成、または従量課金インスタンス (エコノミーモード) の再起動が失敗した場合、原因は在庫不足の可能性があります。しばらく待ってから再試行してください。

  • インスタンスファミリーの制限:第 6 世代以降のほとんどのインスタンスファミリーは、高可用性戦略、高可用性グループ戦略、および低遅延戦略を使用するデプロイメントセットをサポートしています。

    デプロイメント戦略ごとに、サポートされる特定のインスタンスファミリーがあります。

    サポートされているインスタンスファミリーの確定的なリストについては、DescribeDeploymentSetSupportedInstanceTypeFamily API オペレーションから返される応答をご参照ください。

    デプロイメント戦略

    サポートされているインスタンスファミリー

    高可用性戦略および高可用性グループ戦略

    • g9a, g9ae, g9i, g8a, g8i, g8ine, g8ise, g8y, g7, g7a, g7h, g7ne, g7nex, g7se, g7t, g6, g6a, g6e, g6h, g5, g5ne

    • c9a, c9ae, c9i, c8a, c8i, c8ine, c8y, c7, c7a, c7nex, c7se, c7t, c6, c6a, c6e, c5

    • r9a, r9ae, r9i, r8a, r8i, r8y, r7, r7a, r7se, r7t, r6, r6a, r6e, r5

    • hfc9i, hfg9i, hfr9i, hfc8i, hfg8i, hfr8i, hfc7, hfg7, hfr7, hfc6, hfg6, hfr6, hfc5, hfg5

    • ebmc9i, ebmg9a, ebmg9i, ebmr9i, ebmc8a, ebmc8i, ebmc8y, ebmg8a, ebmg8i, ebmg8y, ebmr8a, ebmr8y, ebmc7, ebmc7a, ebmg7, ebmg7a, ebmg7se, ebmhfc7, ebmhfg7, ebmhfr7, ebmr7, ebmr7a, ebmg5

    • i5, i5g, i5ge, ic5, i4, i4g, i4r, i3, i3g, i2, i2g, i2gne, i2ne

    • gn6i

    • d3c, d3s, d2c, d2s, d1ne

    • re6, re6p, s6, t6, e4, mn4, n4, re4, xn4, sn2ne, u2a, u2i, se1, se1ne, sn1ne, u1, e

    低遅延戦略

    • g9a, g9ae, g9i, g8a, g8ae, g8i, g8ise, g8y, g7, g5ne

    • c9a, c9ae, c9i, c8a, c8ae, c8i, c8ine, c8y, c7, c7nex

    • r9a, r9ae, r9i, r8a, r8ae, r8i, r8y, r7

    • hfc9i, hfg9i, hfr9i, hfc8i, hfg8i, hfr8i

    • ebmc9i, ebmg9a, ebmg9i, ebmr9i, ebmc8a, ebmc8i, ebmc8y, ebmg8a, ebmg8i, ebmg8y, ebmgn8v, ebmr8a, ebmr8y, ebmc7, ebmc7a, ebmg7, ebmg7a, ebmg7se, ebmgn7ex, ebmhfc7, ebmhfg7, ebmhfr7, ebmr7, ebmr7a

    • i5, i5g, i5ge, i4

    • gn8v

    • hpc8ae, hpc8i, hpc7ip, hpc6id, u2a, u2i

コンソールを使用したデプロイメントセットの割り当て

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  3. ノードプール ページで、ノードプールの作成 をクリックします。ノードプールの作成 ダイアログボックスでパラメーターを設定し、デプロイメントセットを選択して、注文の確認 をクリックします。

    ノードプールのパラメーターについては、「ノードプールの作成と管理」をご参照ください。デプロイメントセットを選択すると、ノードプール内の最大ノード数が制限されます。デフォルトの制限は 20 × ゾーン数です。ノードのスケールアウトが失敗しないように、デプロイメントセットのクォータが十分であることを確認してください。Deployment set

ユースケース

Pod アンチアフィニティー を使用し、同一ワークロードの Pod を各ノードに1つずつスケジュールする

Deployment の 3 つの Pod レプリカを 3 つの異なるノードにスケジュールします。

  1. 3 つのノードを持つノードプールを作成し、デプロイメントセットを割り当てます。

    ノードプール ページでノードプールをクリックします。ノード タブで、3 つのノードが作成されたことを確認します。Deployment set example 1

    ECS コンソール にログインします。左側メニューで、[デプロイメント & 伸縮性] > デプロイメントセット を選択します。デプロイメントセット ページで、3 つのノードすべてがデプロイメントセットに属していることを確認します。Deployment set example 2

  2. 次の YAML を使用してアプリケーションを設定します。

    Pod アンチアフィニティー を設定して、3 つのアプリケーション Pod を異なるノードにスケジュールします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:  # スケジューリングポリシーを設定します。
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - nginx
                topologyKey: kubernetes.io/hostname
          nodeSelector:
              alibabacloud.com/nodepool-id: <nodepool-id>  # ノードプール ID を指定します。
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: 1
              requests:
                cpu: 1

    [実行結果]

    デプロイメント ページで、対象の Deployment をクリックします。ポッド タブで、3 つの Pod が異なるノードにスケジュールされていることがわかります。Deployment set example 3

単一のノードプール内で、同じワークロードの Pod をゾーンとノードに均等に分散させる

  1. 4 つのノードを持つノードプールを作成し、デプロイメントセットを割り当て、複数のゾーンの vSwitch を選択します。

    作成後、ノードプール ページでノードプールをクリックします。ノード タブで、4 つのゾーンにまたがって 4 つのノードが存在することを確認します。Elastic Scaling Service (ESS) の均等分散ポリシーに従い、ECS インスタンスは 4 つのゾーンに分散され、デプロイメントセットに属します。Deployment set example 4

    ECS コンソール にログインします。左側メニューで、[デプロイメント & 伸縮性] > デプロイメントセット を選択します。デプロイメントセット ページで、4 つのノードすべてがデプロイメントセットに属していることを確認します。Deployment set example 5

  2. 次の YAML を使用してアプリケーションを設定します。

    Pod トポロジースプレッド制約 を使用して、同じアプリケーションの Pod をゾーンとノードに均等に分散させます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          topologySpreadConstraints:
            - maxSkew: 1
              topologyKey: kubernetes.io/hostname
              whenUnsatisfiable: DoNotSchedule
              labelSelector:
                matchLabels:
                  app: nginx
            - maxSkew: 1
              topologyKey: topology.kubernetes.io/zone
              whenUnsatisfiable: DoNotSchedule
              labelSelector:
                matchLabels:
                  app: nginx
          nodeSelector:
            alibabacloud.com/nodepool-id: <nodepool-id>  # ノードプール ID を指定します。
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: 1
              requests:
                cpu: 1

    [実行結果]

    デプロイメント ページで、対象の Deployment をクリックします。ポッド タブで、Pod がゾーンとノードに均等に分散されていることがわかります。Deployment set example 6

関連ドキュメント