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

:Terraformを使用して自動スケーリングが有効になっているノードプールを作成する

最終更新日:Oct 29, 2024

デフォルトでは、Container Service for Kubernetes (ACK) のノードプールおよびマネージドノードプール内のノードは、自動的にスケールインまたはスケールアウトすることはできません。 Terraformを使用して、自動スケーリングが有効になっているノードプールを作成できます。 このトピックでは、Terraformを使用して、自動スケーリングが有効になっているノードプールを作成する方法について説明します。

前提条件

  • Terraformがインストールされています。

    説明

    Terraform 0.12.28以降をインストールする必要があります。 terraform -- versionコマンドを実行して、Terraformバージョンを照会できます。

    • デフォルトでは、Cloud ShellにTerraformがプリインストールされており、アカウント情報も指定されています。 設定を変更する必要はありません。

    • Cloud Shell以外の方法でTerraformをインストールする方法の詳細については、「ローカルPCでのTerraformのインストールと構成」をご参照ください。

  • 自動スケーリング機能は、Alibaba Cloudサービスのauto scalingに依存しています。 したがって、ノードの自動スケーリングを有効にする前に、Auto Scalingを有効にし、Auto Scalingのデフォルトロールをアカウントに割り当てる必要があります。 詳細については、「Auto Scalingの有効化」をご参照ください。

    説明

    alicloud_cs_kubernetes_autoscalerコンポーネントを使用した場合、Auto Scalingがアクティブになります。

  • Auto Scaling関連のポリシーは、Resource Access Management (RAM) コンソールでアカウントにアタッチされます。 これにより、Auto Scalingにアクセスするために必要な権限がクラスターに付与されます。 RAMポリシーをアタッチする方法の詳細については、「権限付与」をご参照ください。

  • Operation Orchestration Service (OOS) にアクセスする権限が付与されます。 OOSアクセス権限を提供するAliyunOOSLifecycleHook4CSRoleロールを作成するには、次の手順を実行します。

    1. AliyunOOSLifecycleHook4CSRoleをクリックします。

      説明
      • 現在のアカウントがAlibaba Cloudアカウントの場合、AliyunOOSLifecycleHook4CSRoleをクリックします。

      • 現在のアカウントがRAMユーザーの場合、Alibaba CloudアカウントにAliyunOOSLifecycleHook4CSRoleロールが割り当てられていることを確認します。 次に、AliyunRAMReadOnlyAccessポリシーをRAMユーザーにアタッチします。 詳細については、「RAMユーザーへの権限付与」をご参照ください。

    2. [クラウドリソースアクセス権限付与] ページで、[権限付与に同意する] をクリックします。

  • アカウント情報が設定されています。

    次のコマンドを実行して、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ユーザーへの権限付与」をご参照ください。

背景情報

Terraformは、Terraformプロバイダーを通じて新しいインフラストラクチャをサポートするオープンソースツールです。 Terraformを使用して、クラウドのインフラストラクチャとリソースをプレビュー、設定、管理できます。 詳しくは、「Terraform とは」をご参照ください。

Alibaba Cloud Providerの以前のバージョンでは、ACKはalicloud_cs_kubernetes_autoscalerという名前のコンポーネントを提供します。 alicloud_cs_kubernetes_autoscalerコンポーネントを使用して、ノードの自動スケーリングを有効にできます。 ただし、次の制限が適用されます。

  • 構成は複雑であり、コストが高い。

  • スケーリングされる各ノードはデフォルトのノードプールに追加され、個別に維持することはできません。

  • 一部のパラメータは変更できません。

Alibaba Terraform Provider 1.111.0以降では、alicloud_cs_kubernetes_node_poolコンポーネントを使用して自動スケーリングが有効になっているノードプールを作成できます。 このコンポーネントには次の利点があります。

  • 簡単なスケーリング設定を提供します。 スケーリンググループのノード数の下限と上限を設定するだけです。

  • オプションパラメーターのデフォルト設定を使用して、ノード間の環境の不一致を防ぎます。 これにより、ユーザーエラーが防止されます。 たとえば、ノードごとに異なるオペレーティングシステム (OS) イメージを構成できます。

  • ACKコンソールでノードプール内のノードの変更を明示的に表示できます。

Terraformを使用して自動スケーリングが有効になっているノードプールを作成する

alicloud_cs_kubernetes_autoscalerコンポーネントを使用している場合は、クラスターにAuto Scalingへのアクセスを許可し、次の手順を実行してalicloud_cs_kubernetes_node_poolコンポーネントに切り替えます。 次に、クラスターで自動スケーリングが有効になっているノードプールを作成できます。

説明

alicloud_cs_kubernetes_autoscalerコンポーネントを使用していない場合は、手順1と手順2をスキップします。 ステップ3に進みます。

  1. autoscaler-meta ConfigMapを変更します。

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

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

    3. ConfigMapページの左上隅で、名前空間ドロップダウンリストからkube-systemを選択します。 autoscaler-meta ConfigMapを見つけて、[操作] 列の [編集] をクリックします。

    4. [編集] パネルで、autoscaler-meta ConfigMapの値を変更します。

      tainsの値を文字列型から配列型に変更する必要があります。 この場合、[値] テキストボックスで "taints":"""taints":[] に変更します。

    5. クリックOK.

  2. ノードプールを同期します。

    1. 詳細ページの左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

    2. の右上隅にノードプールページをクリックします。同期ノードプール.

alicloud_cs_kubernetes_autoscalerコンポーネントを使用していない場合は、次の手順を実行します。

  1. Terraformを使用して、自動スケーリングが有効になっているノードプールを作成します

    1. ノードプール設定ファイルを作成します。

      • 次のコードは、既存のACKクラスターで自動スケーリングが有効になっているノードプールを作成する方法の例を示しています。

        サンプルコードを表示する

        provider "alicloud" {
        }
        # Create a node pool that has auto scaling enabled in an existing ACK cluster. 
        resource "alicloud_cs_kubernetes_node_pool" "at1" {
          # The ID of the ACK cluster where you want to create the node pool. 
          cluster_id           = "cf8cbb7e461a7456bafd5841f3a8****"
          name                 = "np-test"
          # The vSwitches that are used by nodes in the node pool. You must specify at least one vSwitch. 
          vswitch_ids          = ["vsw-bp1mdigyhmilu2h4v****"]
          instance_types       = ["ecs.e3.m****"]
          password             = "Hello1234"
         
          scaling_config {
            # The minimum number of nodes in the node pool. 
            min_size     = 1
            # The maximum number of nodes in the node pool. 
            max_size     = 5
          }
        
        }
      • 次のコードでは、ACK管理クラスターと、クラスターで自動スケーリングが有効になっているノードプールを作成する方法の例を示します。Create an ACK managed cluster

        サンプルコードを表示する

        provider "alicloud" {
        }
        
        variable "name" {
          default    = "tf-test"
        }
        
        data "alicloud_zones" default {
          available_resource_creation  = "VSwitch"
        }
        data "alicloud_instance_types" "default" {
          availability_zone            = data.alicloud_zones.default.zones.0.id
          cpu_core_count               = 4
          memory_size                  = 8
          kubernetes_node_role         = "Worker"
        }
        
        resource "alicloud_vpc" "default" {
          cidr_block                   = "10.1.0.0/21"
        }
        resource "alicloud_vswitch" "default" {
          vpc_id                       = alicloud_vpc.default.id
          cidr_block                   = "10.1.1.0/24"
          zone_id            					 = data.alicloud_zones.default.zones.0.id
        }
        
        
        # Create an ACK managed cluster. 
        
        # Create a node pool that has auto scaling enabled in the cluster. 
        resource "alicloud_cs_kubernetes_node_pool" "at1" {
          cluster_id                   = "test12334"
          name                         = var.name
          vswitch_ids                  = [alicloud_vswitch.default.id]
          instance_types               = [data.alicloud_instance_types.default.instance_types.0.id]
        
        
          scaling_config {
            min_size     = 1
            max_size     = 5
          }
        
        }

        次の出力は、ノードプールが作成されたことを示します。

        alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=cc7c582b0b2b546dcb80ae118eef0cb12:np651662dfc3e4440d9979360b24b1a009]
        alicloud_cs_managed_kubernetes.default: Refreshing state... [id=cc7c582b0b2b546dcb80ae118eef0cb12]
        
        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:
        
          ............
        
        
                # (2 unchanged blocks hidden)
            }
        Plan: 5 to add, 0 to change, 0 to destroy.
    2. を実行します。Run theterraform applyコマンドを実行して、ノードプールを作成します。

    ノードプールの作成後、[ノードプール] ページでノードプールを見つけることができます。 ノードプールの名前の下にAuto Scaling Enabledが表示されます。