全部產品
Search
文件中心

Container Service for Kubernetes:使用Terraform為節點池指定部署集

更新時間:Oct 25, 2024

部署集是控制ECS執行個體分布的策略,該策略將ECS執行個體分散部署在不同的物理伺服器上,提升業務的高可用性和底層容災能力。通過為節點池指定部署集,能夠保證節點池彈出的ECS執行個體不會分佈於同一物理機上,並通過親和性配置,使您的應用對底層的節點拓撲進行感知,使其均勻地分布在不同節點上,保證應用的容災能力和高可用性。本文介紹如何通過Terraform為節點池指定部署集。

前提條件

  • 已安裝Terraform

    說明

    請確認Terraform版本不低於v0.12.28,可通過terraform --version命令查看Terraform版本。

    • Cloud Shell預設安裝配置了Terraform和阿里雲帳號資訊,無需任何額外配置。

    • 如果您不使用Cloud Shell,關於安裝Terraform的方式,請參見在本地安裝和配置Terraform

  • 建立叢集。若您需要使用Terraform建立,請參見建立ACK託管叢集

  • 啟動節點自動調整前,您需要開通Auto Scaling服務,並完成預設角色授權。具體操作,請參見開通Auto Scaling服務

  • 已建立部署集。具體操作,請參見建立部署集

  • 請確保部署集內ECS執行個體配額充足,預設為20台;所需機型庫存充足。具體資訊,請參見查看和提升資源配額

  • 配置阿里雲帳號資訊。

    執行如下命令,建立環境變數,用於存放身份認證資訊。

    • Linux 環境

      export ALICLOUD_ACCESS_KEY="************"   #替換為阿里雲帳號的AK資訊。
      export ALICLOUD_SECRET_KEY="************"   #替換為阿里雲帳號的SK資訊。
      export ALICLOUD_REGION="cn-beijing"         #替換為您叢集所在的地區。
    • Windows 環境

      set ALICLOUD_ACCESS_KEY="************"   #替換為阿里雲帳號的AK資訊。
      set ALICLOUD_SECRET_KEY="************"   #替換為阿里雲帳號的SK資訊。
      set ALICLOUD_REGION="cn-beijing"         #替換為您叢集所在的地區。
    說明

    為提高許可權管理的靈活性和安全性,建議您建立名為Terraform的RAM使用者,並為該RAM使用者建立AccessKey和授權。具體操作,請參見建立RAM使用者為RAM使用者授權

背景資訊

在同一個可用性區域下,為了保證高可用性,您通常會選擇跨主機部署服務。但當一台物理機出現問題時,會影響到應用的所有副本。為瞭解決這個問題,ECS提供了部署集功能。部署集內的所有ECS執行個體會在指定地區內嚴格分散在不同的物理伺服器上,滿足服務相互隔離的應用架構,大幅降低服務停用幾率。關於部署集的更多資訊,請參見部署集概述

使用限制

叢集中功能使用須知

  • 部署集僅支援ACK專有叢集ACK託管叢集

  • 部署集僅在建立節點池時支援指定,不支援為已有節點池開啟。每個節點池僅支援綁定一個部署集,且不支援更換。

  • 部署集不支援手動添加或移除節點。您可以通過擴縮容節點池的操作,調整部署集中的節點數。具體操作,請參見建立節點池

  • 開啟部署集功能後,不支援建立搶佔式執行個體。

部署集配額與規格限制

  • 節點池部署集預設基於高可用策略實現。高可用策略下,在部署集內建立ECS執行個體時,一個可用性區域內最多能建立20台ECS執行個體,一個阿里雲地區下能建立的ECS執行個體數量為20*可用性區域數量。更多資訊,請參見部署集概述

    一個部署集內能容納的執行個體數量不支援提升。但如果您需要提高當前賬戶可擁有的部署集最大數量,請前往配額平台申請。關於部署集使用限制及配額的更多資訊,請參見部署集使用限制

  • 支援的執行個體規格類型系列限制:

    不同部署集策略僅支援建立特定的執行個體規格類型系列,具體資訊如下。

    說明

    您也可以調用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

    • r8a、r8i、r8ae、r8y

    • ebmc7、ebmg7、ebmr7

  • 在部署集內建立ECS執行個體失敗,或重啟隨用隨付ECS執行個體(節省停機模式)失敗,可能是因為地區內執行個體資產庫存不足,您可以等待一段時間後重試建立執行個體或重啟執行個體。

通過Terraform建立指定部署集的節點池

  1. 使用以下樣本內容,建立指定部署集的節點池。

    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****"] #多可用性區域VSwitch,保證ESS彈出節點能夠均勻分布在不同可用性區域。
      instance_types                = ["ecs.c6.xlarge","ecs.c5.2xlarge","ecs.g5.2xlarge","ecs.i2g.2xlarge"]  #可用機型。
      system_disk_category          = "cloud_ssd"
      system_disk_size              = 120
    
      # 指定部署集ID。
      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
    }
  2. 執行以下命令完成建立。

    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.

    執行結果

    建立成功後,您可以通過以下任意方式查看結果。

    • 您可以在Container Service管理主控台節點池頁面查看到建立的節點池。單擊操作列的編輯,可以查看到指定的部署集。

    • 您可以在terraform.tfstate檔案中,查看到節點池資源套件含deployment_set_id欄位。

      "deployment_set_id": "ds-bp1e19mmbsv3jf64****"

相關文檔

節點池部署集最佳實務