全部產品
Search
文件中心

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

更新時間:Jun 19, 2024

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

前提條件

  • 已安裝Terraform。具體操作,請參見在本地安裝和配置Terraform

  • 啟動節點自動調整前,您需要開通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託管叢集

  • 部署集僅在建立節點池時支援指定。

  • 每個節點池僅支援綁定一個部署集,且不支援更換部署集。

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

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

  • 選擇開啟部署集功能後,一個可用性區域內最多能建立20台ECS執行個體(該數值根據您使用Elastic Compute Service的情況而變化),一個阿里雲地區下能建立的ECS執行個體數量為20×可用性區域數量(可用性區域數量由節點池選擇的交換器決定)。目前部署集暫不支援配額申請,如有需求,請前往配額平台申請。

  • 部署集支援的執行個體規格類型系列資訊:

    說明

    部分規格類型系列只支援特定的部署集策略,您可以調用DescribeDeploymentSetSupportedInstanceTypeFamily擷取各種部署集策略支援的執行個體規格類型系列資訊。

    部署策略

    支援的執行個體規格類型系列

    高可用策略和部署集組高可用策略

    • g8i、g8y、g7se、g7a、g7、g7t、g7ne、g7nex、g6、g6e、g6a、g5、g5ne、sn2ne、sn2、sn1

    • c8i、c8y、c7se、c7、c7t、c7nex、c7a、c6、c6a、c6e、c5、ic5、sn1ne

    • r8y、r7、r7se、r7t、r7a、r6、r6e、r6a、re6、re6p、r5、re4、se1ne、se1

    • 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" "test" {
        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_id            = "sg-bp1ewlqw7ajyaqaz****"
        install_cloud_monitor        = true
      
        platform                     = "AliyunLinux"
        image_id                     = "aliyun_2_1903_x64_20G_alibase_20210726.vhd"
      
        password                     = "Hello1234"
      
        node_count                   = 3
      }
    • 如果未建立叢集,建立節點池的配置樣本如下。需要先建立叢集,然後才能建立節點池。

      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               = 2
        memory_size                  = 4
        kubernetes_node_role         = "Worker"
      }
      
      resource "alicloud_vpc" "default" {
        name                         = var.name
        cidr_block                   = "10.1.0.0/21"
      }
      
      resource "alicloud_vswitch" "default" {
        name                         = var.name
        vpc_id                       = alicloud_vpc.default.id
        cidr_block                   = "10.1.1.0/24"
        availability_zone            = "data.alicloud_zones.default.zones.0.id
      }
      
      resource "alicloud_key_pair" "default" {
        key_name                     = var.name
      }
      
      # 建立託管版叢集。
      resource "alicloud_cs_managed_kubernetes" "default" {
        name                         = var.name
        count                        = 1
        cluster_spec                 = "ack.pro.small"
        is_enterprise_security_group = true
        worker_number                = 2
        password                     = "Hello1234"
        pod_cidr                     = "172.20.0.0/16"
        service_cidr                 = "172.21.0.0/20"
        worker_vswitch_ids           = [alicloud_vswitch.default.id]
        worker_instance_types        = [data.alicloud_instance_types.default.instance_types.0.id]
      }
      
      # 為叢集建立一個開啟部署集功能的節點池。
      resource "alicloud_cs_kubernetes_node_pool" "test" {
        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_id            = "sg-bp1ewlqw7ajyaqaz****"
        install_cloud_monitor        = true
      
        platform                     = "AliyunLinux"
        image_id                     = "aliyun_2_1903_x64_20G_alibase_20210726.vhd"
      
        password                     = "Hello1234"
      
        node_count                   = 3
      }
  2. 執行以下命令完成建立。

    terraform apply -target=alicloud_cs_kubernetes_node_pool.test

    執行結果

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

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

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

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

相關文檔

節點池部署集最佳實務