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

Container Service for Kubernetes:デプロイメントセットとノードプールを関連付けるためのベストプラクティス

最終更新日:May 27, 2025

デプロイメントセットには、異なる物理サーバーに分散されている Elastic Compute Service (ECS) インスタンスが含まれています。 デプロイメントセットを使用すると、アプリケーションの可用性を向上させ、ディザスタリカバリを実装できます。 デプロイメントセットに関連付けられているノードプールには、複数の物理サーバーに分散されている ECS ノードが含まれています。 ポッドアフィニティを構成して、アプリケーションポッドを異なる ECS ノードにデプロイできます。 これにより、ディザスタリカバリが実装され、アプリケーションの可用性が向上します。

前提条件

デプロイメントセットが作成されていること。 詳細については、「手順 1: デプロイメントセットを作成する」をご参照ください。

背景情報

ゾーン内のアプリケーションの高可用性を確保するには、複数のホストにアプリケーションをデプロイする必要があります。ただし、物理サーバーがダウンした場合、すべてのアプリケーション ポッドが影響を受けます。この問題を解決するには、ECS によって提供されるデプロイメントセットを使用できます。デプロイメントセットに含まれる ECS インスタンスは、複数の物理サーバーに分散され、互いに分離されています。これにより、単一障害点によって引き起こされるサービスの中断を防ぐことができます。デプロイメントセットの詳細については、「デプロイメントセット」をご参照ください。

制限

クラスタ機能の使用ガイドライン

  • デプロイメントセットは、ACK 専用クラスターACK マネージドクラスターでサポートされています。

  • ノードプールにデプロイメントセットを関連付けることができるのは、ノードプールを作成するときだけです。 既存のノードプールでは、デプロイメントセットを有効にすることはできません。 各ノードプールに関連付けることができるデプロイメントセットは 1 つだけです。

  • デプロイメントセットに ECS インスタンスを手動で追加したり、デプロイメントセットから ECS インスタンスを削除したりすることはできません。 デプロイメントセット内の ECS インスタンスの数を変更する場合は、デプロイメントセットが関連付けられているノードプールをスケーリングできます。 詳細については、「ノードプールを作成および管理する」をご参照ください。

  • デプロイメントセットをノードプールに関連付けると、ノードプールはプリエンプティブルインスタンスをサポートしなくなります。

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

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

    • デフォルトでは、ノードプールのデプロイメントセットは、高可用性戦略に基づいて実装されます。 高可用性戦略を採用するデプロイメントセットでは、ゾーンごとに最大 20 個の ECS インスタンスを作成できます。 Alibaba Cloud リージョン内に作成できるデプロイメントセット内の ECS インスタンスの最大数は、次の式を使用して計算できます。20 × リージョン内のゾーン数 デプロイメントセット内に十分な ECS インスタンスと、必要なインスタンスタイプの十分な在庫があることを確認してください。 詳細については、「デプロイメントセット」をご参照ください。

      デプロイメントセット内の ECS インスタンスの数を増やすことはできません。 ただし、Alibaba Cloud アカウントが持つことができるデプロイメントセットの最大数を増やす場合は、[クォータセンターコンソール] でクォータの増加をリクエストしてください。 デプロイメントセットの制限とクォータの詳細については、「デプロイメントセット」をご参照ください。

    • リージョン内にインスタンスリソースが不足していると、デプロイメントセットで節約モードで停止された従量課金インスタンスの作成または開始に失敗する可能性があります。 しばらく待ってから、インスタンスの作成または開始をもう一度試してください。

  • インスタンスファミリの制限

    使用できるデプロイメント戦略は、インスタンスファミリによって異なる場合があります。 次の表に、さまざまなインスタンスファミリでサポートされているデプロイメント戦略を示します。

    説明

    特定のデプロイメント戦略をサポートするインスタンスファミリをクエリするには、DescribeDeploymentSetSupportedInstanceTypeFamily 操作を呼び出します。

    デプロイメント戦略

    デプロイメント戦略をサポートするインスタンスファミリ

    高可用性戦略または高可用性グループ戦略

    • g8a、g8i、g8y、g7se、g7a、g7、g7h、g7t、g7ne、g7nex、g6、g6e、g6a、g5、g5ne、sn2ne、sn2、および sn1

    • c8a、c8i、c8y、c7se、c7、c7t、c7nex、c7a、c6、c6a、c6e、c5、ic5、および sn1ne

    • r8a、r8i、r8y、r7、r7se、r7t、r7a、r6、r6e、r6a、re6、re6p、r5、re4、se1ne、および se1

    • hfc8i、hfg8i、hfr8i、hfc7、hfg7、hfr7、hfc6、hfg6、hfr6、hfc5、および hfg5

    • d3c、d2s、d2c、d1、d1ne、d1-c14d3、および d1-c8d3

    • i3g、i3、i2、i2g、i2ne、i2gne、および i1

    • ebmg5、ebmc7、ebmg7、ebmr7、sccgn6、scch5、scch5s、sccg5、および sccg5s

    • e、t6、xn4、mn4、n4、e4、n2、および n1

    • gn6i

    低レイテンシ戦略

    • g8a、g8i、g8ae、および g8y

    • c8a、c8i、c8ae、および c8y

    • ebmc8i、ebmg8i、および ebmr8i

    • r8a、r8i、r8ae、および r8y

    • ebmc7、ebmg7、および ebmr7

ACK コンソールでデプロイメントセットをノードプールに関連付ける

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

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

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

    パラメーターの詳細については、「ノードプールを作成する」をご参照ください。部署集.png

同じノードプール内の同じワークロードに属するポッドに対してポッドアンチアフィニティが構成されており、各ノードは 1 つのポッドのみをホストできます

この例では、Deployment 内の 3 つの複製ポッドを 3 つの異なるノードにスケジュールする方法を示します。

  1. 3 つのノードを含むノードプールを作成し、ノードプールに関連付けるデプロイメントセットの ID を指定します。 詳細については、「ACK コンソールでデプロイメントセットをノードプールに関連付ける」をご参照ください。

    ノードプールを作成した後、[ノードプール] ページでノードプールの名前をクリックします。 [ノード] タブに、ノードプールに含まれるノードが表示されます。部署集1.png

    [ECS コンソール] にログオンします。 左側のナビゲーションウィンドウで、[デプロイメントと弾力性] > [デプロイメントセット] を選択します。 [デプロイメントセット] ページに、3 つのノードが指定されたデプロイメントセットに属していることが表示されます。部署集2.png

  2. 次のコンテンツに基づいて YAML ファイルを作成します。

    3 つのポッドをデプロイし、アンチアフィニティを構成して、ポッドを 3 つの異なるノードにスケジュールします。

    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

    結果

    [デプロイメント] ページで、管理するデプロイメントをクリックします。 [ポッド] タブに、ポッドが 3 つの異なるノードにスケジュールされていることが表示されます。部署集3.png

同じノードプール内の同じワークロードに属するポッドを、複数のゾーンにわたる異なるノードにスケジュールできます

  1. 4 つのノードを含むノードプールを作成し、ノードプールに関連付けるデプロイメントセットの ID を指定し、複数のゾーンにデプロイされている vSwitch を選択します。 詳細については、「ACK コンソールでデプロイメントセットをノードプールに関連付ける」をご参照ください。

    ノードプールを作成した後、[ノードプール] ページでノードプールの名前をクリックします。 [ノード] タブをクリックすると、4 つのノードと 4 つのゾーンが表示されます。 ECS インスタンスは 4 つの異なるゾーンにデプロイされ、Auto Scaling のバランスのとれた分散ポリシーに基づいて同じデプロイメントセットに追加されます。部署集4.png

    [ECS コンソール] にログオンします。 左側のナビゲーションウィンドウで、[デプロイメントと弾力性] > [デプロイメントセット] を選択します。 [デプロイメントセット] ページに、ノードプール内の 4 つのノードが指定されたデプロイメントセットに属していることが表示されます。部署集5.png

  2. 次のコンテンツに基づいて YAML ファイルを作成します。

    ポッドトポロジスプレッド制約を使用して、同じアプリケーションに属するポッドを複数のゾーンにわたる異なるノードにスケジュールできます。 詳細については、「ポッドトポロジスプレッド制約」をご参照ください。

    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

    結果

    [デプロイメント] ページで、管理するデプロイメントをクリックします。 [ポッド] タブに、同じアプリケーションに属するポッドが複数のゾーンにわたる異なるノードにスケジュールされていることが表示されます。部署集6

関連情報