デプロイメントセットは、Elastic Compute Service (ECS) インスタンスの配布を管理するために使用されます。 デプロイメントセット内のECSインスタンスは、冗長性を高めるために複数の物理サーバーに分散されています。 これにより、アプリケーションの可用性が向上し、ディザスタリカバリが実装されます。 デプロイメントセットに関連付けられたノードプールには、複数の物理サーバーに分散されたECSノードが含まれます。 ポッドアフィニティを設定して、アプリケーションポッドを異なるECSノードにデプロイできます。 これにより、ディザスタリカバリが実装され、アプリケーションの可用性が向上します。 このトピックでは、Terraformを使用してデプロイメントセットをノードプールに関連付ける方法について説明します。
前提条件
Terraformがインストールされています。
説明Terraform v0.12.28以降をインストールする必要があります。 terraform -- versionコマンドを実行して、Terraformバージョンを照会できます。
デフォルトでは、Cloud ShellにTerraformがプリインストールされており、アカウント情報も指定されています。 設定を変更する必要はありません。
Cloud Shellを使用しない場合は、Terraformを直接インストールできます。 詳細については、「ローカルPCでのTerraformのインストールと設定」をご参照ください。
クラスターを作成します。 Terraformを使用してContainer Service For Kubernetes (ACK) クラスターを作成する方法については、「ACKマネージドクラスターの作成」をご参照ください。
ノードの自動スケーリングを有効にする前に、Auto Scalingが有効になり、Auto Scalingのデフォルトロールがアカウントに割り当てられます。 詳細については、「Auto Scalingの有効化」をご参照ください。
デプロイメントセットが作成されます。 詳細については、「デプロイメントセットの作成」をご参照ください。
デプロイメントセットのECSクォータは十分であり、指定されたインスタンスタイプの十分なECSインスタンスが利用可能です。 デフォルトでは、各デプロイメントセットは各ゾーンに最大20個のECSインスタンスを含めることができます。 詳細については、「リソースクォータの表示と増加」をご参照ください。
アカウント情報が設定されています。
次のコマンドを実行して、ID認証情報を保存する環境変数を作成します。
Linux環境
export ALICLOUD_ACCESS_KEY="************" # Replace the value with the AccessKey ID of your Alibaba Cloud account. export ALICLOUD_SECRET_KEY="************" # Replace the value with the AccessKey secret of your Alibaba Cloud account. export ALICLOUD_REGION="cn-beijing" # Replace the value with the ID of the region in which your cluster resides.
Windows環境
set ALICLOUD_ACCESS_KEY="************" # Replace the value with the AccessKey ID of your Alibaba Cloud account. set ALICLOUD_SECRET_KEY="************" # Replace the value with the AccessKey secret of your Alibaba Cloud account. set ALICLOUD_REGION="cn-beijing" # Replace the value with the ID of the region in which your cluster resides.
説明権限管理の柔軟性とセキュリティを向上させるために、Terraformという名前のResource Access management (RAM) ユーザーを作成することをお勧めします。 次に、RAMユーザーのAccessKeyペアを作成し、RAMユーザーに権限を付与します。 詳細については、「RAMユーザーの作成」および「RAMユーザーへの権限付与」をご参照ください。
背景情報
ゾーン内のアプリケーションの高可用性を確保するには、複数のホストにアプリケーションを配置する必要があります。 ただし、物理サーバーがダウンすると、すべてのアプリケーションポッドが影響を受けます。 この問題を解決するには、ECSが提供するデプロイメントセットを使用します。 デプロイメントセットに含まれるECSインスタンスは、複数の物理サーバーに分散され、互いに分離されます。 これにより、単一障害点によって引き起こされるサービスの中断を防ぐことができます。 デプロイメントセットの詳細については、「デプロイメントセット」をご参照ください。
制限
クラスター機能の使用ガイドライン
デプロイメントセットは、ACK専用クラスターとACKマネージドクラスターでサポートされています。
ノードプールを作成する場合にのみ、デプロイメントセットをノードプールに関連付けることができます。 既存のノードプールでは、デプロイメントセットを有効にすることはできません。 各ノードプールに関連付けることができるデプロイメントセットは1つだけで、ノードプールに関連付けられているデプロイメントセットを変更することはできません。
ECSインスタンスを手動でデプロイメントセットに追加したり、ECSインスタンスを削除したりすることはできません。 デプロイメントセット内のECSインスタンスの数を変更する場合は、デプロイメントセットが関連付けられているノードプールをスケーリングできます。 詳細については、「ノードプールの作成」をご参照ください。
デプロイメントセットをノードプールに関連付けた後、ノードプールはプリエンプティブルインスタンスをサポートしません。
デプロイメントセットのクォータと仕様の制限
デフォルトでは、ノードプール配置セットは高可用性戦略に基づいて実装されます。 高可用性戦略を採用したデプロイメントセットでは、ゾーンごとに最大20個のECSインスタンスを作成できます。 次の式を使用して、Alibaba Cloudリージョン内のデプロイメントセットに作成できるECSインスタンスの最大数を計算できます。
20 × リージョン内のゾーン数
。 詳細については、「デプロイメントセット」をご参照ください。デプロイメントセット内のECSインスタンスの数を増やすことはできません。 ただし、Alibaba Cloudアカウントが持つことができるデプロイメントセットの最大数を増やす場合は、quota Centerコンソールでクォータの増加をリクエストしてください。 デプロイメントセットの制限とクォータの詳細については、「デプロイメントセットの制限」をご参照ください。
インスタンスファミリーの制限
使用できるデプロイ戦略は、インスタンスファミリーによって異なります。 次の表に、さまざまなインスタンスファミリーでサポートされているデプロイメント戦略を示します。
説明特定のデプロイメント戦略をサポートするインスタンスファミリーを照会するには、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、およびsn1ne
r8a、r8i、r8y、r7、r7se、r7t、r7a、r6、r6e、r6a、re6、re6p、r5、re4、se1ne、およびse1
hfc8i、hfg8i、hfr8i、hfc7、hfg7、hfc7、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
リージョン内のインスタンスリソースが不足していると、ECSインスタンスの作成に失敗したり、デプロイメントセットでエコノミーモードで停止した従量課金インスタンスの起動に失敗する可能性があります。 しばらく待ってから、インスタンスを再度作成または起動してください。
Terraformを使用してノードプールを作成し、デプロイメントセットに関連付ける
次のYAMLテンプレートを使用して、ノードプールを作成し、デプロイメントセットをノードプールに関連付けます。
provider "alicloud" { } resource "alicloud_cs_kubernetes_node_pool" "default" { name = "tf-deploymentset" cluster_id = "c51a1ae4fcd754d4f9bc3b1****" vswitch_ids = ["vsw-bp1kh6qfb83vt****","vsw-bp13d9ojhwiimya****","vsw-bp1eyw8wt9k1d1l****","vsw-bp1nftkf9sk3fz****"] #Specify vSwitches that are deployed in different zones. This way, nodes that are added by Auto Scaling are evenly distributed across multiple zones. instance_types = ["ecs.c6.xlarge","ecs.c5.2xlarge","ecs.g5.2xlarge","ecs.i2g.2xlarge"] #Specify instance types. system_disk_category = "cloud_ssd" system_disk_size = 120 # Specify the ID of the deployment set. deployment_set_id = "ds-bp1e19mmbsv3jf64****" instance_charge_type = "PostPaid" security_group_ids = ["sg-bp1ewlqw7ajyaqaz****"] install_cloud_monitor = true image_type = "AliyunLinux3" image_id = "aliyun_3_x64_20G_alibase_20240528.vhd" password = "Hello1234" desired_size = 3 }
次のコマンドを実行して、ノードプールを作成します。
terraform apply
次の情報が返された場合、ノードプールはデプロイメントセットに関連付けられます。
alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=c51a1ae4fcd754d4f9bc3b1****:np651662dfc3e4440d9979360b24b1****] alicloud_cs_managed_kubernetes.default: Refreshing state... [id=c51a1ae4fcd754d4f9bc3b1****] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: ............ alicloud_cs_kubernetes_node_pool.default: Still creating... [50s elapsed] alicloud_cs_kubernetes_node_pool.default: Still creating... [1m0s elapsed] alicloud_cs_kubernetes_node_pool.default: Creation complete after 1m1s [id=c51a1ae4fcd754d4f9bc3b1****:np651662dfc3e4440d9979360b24b1****] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
結果
ノードプールの作成後、次のいずれかの方法で結果を確認できます。
作成したノードプールは、[ACKコンソール] の [ノードプール] ページで確認できます。 [操作] 列の [編集] をクリックすると、関連するデプロイメントセットが表示されます。
terraform.tfstateファイルのノードプール定義の下に、
deployment_set_id
フィールドがあります。"deployment_set_id": "ds-bp1e19mmbsv3jf64****"