デプロイメントセットには、異なる物理サーバーに分散されている 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 コンソールでデプロイメントセットをノードプールに関連付ける
[ACK コンソール] にログオンします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、[ノードプールを作成] をクリックします。 [ノードプールを作成] ダイアログボックスで、パラメーターを構成し、デプロイメントセットを選択して、[注文の確認] をクリックします。
パラメーターの詳細については、「ノードプールを作成する」をご参照ください。

例
同じノードプール内の同じワークロードに属するポッドに対してポッドアンチアフィニティが構成されており、各ノードは 1 つのポッドのみをホストできます
この例では、Deployment 内の 3 つの複製ポッドを 3 つの異なるノードにスケジュールする方法を示します。
3 つのノードを含むノードプールを作成し、ノードプールに関連付けるデプロイメントセットの ID を指定します。 詳細については、「ACK コンソールでデプロイメントセットをノードプールに関連付ける」をご参照ください。
ノードプールを作成した後、[ノードプール] ページでノードプールの名前をクリックします。 [ノード] タブに、ノードプールに含まれるノードが表示されます。

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

次のコンテンツに基づいて 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 つの異なるノードにスケジュールされていることが表示されます。

同じノードプール内の同じワークロードに属するポッドを、複数のゾーンにわたる異なるノードにスケジュールできます
4 つのノードを含むノードプールを作成し、ノードプールに関連付けるデプロイメントセットの ID を指定し、複数のゾーンにデプロイされている vSwitch を選択します。 詳細については、「ACK コンソールでデプロイメントセットをノードプールに関連付ける」をご参照ください。
ノードプールを作成した後、[ノードプール] ページでノードプールの名前をクリックします。 [ノード] タブをクリックすると、4 つのノードと 4 つのゾーンが表示されます。 ECS インスタンスは 4 つの異なるゾーンにデプロイされ、Auto Scaling のバランスのとれた分散ポリシーに基づいて同じデプロイメントセットに追加されます。

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

次のコンテンツに基づいて 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結果
[デプロイメント] ページで、管理するデプロイメントをクリックします。 [ポッド] タブに、同じアプリケーションに属するポッドが複数のゾーンにわたる異なるノードにスケジュールされていることが表示されます。

関連情報
高可用性クラスターアーキテクチャでの推奨構成の詳細については、「HA クラスターを作成するための推奨構成」をご参照ください。