全部產品
Search
文件中心

Container Service for Kubernetes:使用Terraform建立具備自動調整功能的節點池

更新時間:Jun 19, 2024

ACK的節點池及託管節點池中的節點預設不具備自動調整能力,您也可以通過使用Terraform工具建立開啟自動調整功能的節點池。本文介紹如何通過Terraform建立開啟自動調整功能的節點池。

前提條件

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

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

    說明

    如果您之前已經使用了alicloud_cs_kubernetes_autoscaler組件,預設已開通Auto Scaling服務。

  • 在RAM控制台,為當前叢集添加Auto Scaling服務的授權策略。關於如何授權的詳細資料,請參見授權

  • 已為CloudOps Orchestration Service (OOS)服務授權。您可以通過建立AliyunOOSLifecycleHook4CSRole角色,為OOS服務授權。

    1. 單擊AliyunOOSLifecycleHook4CSRole

      說明
      • 如果當前帳號是阿里雲帳號,單擊AliyunOOSLifecycleHook4CSRole即可授權。

      • 如果當前帳號是RAM使用者,請先確保對應的阿里雲帳號已授權AliyunOOSLifecycleHook4CSRole,並為RAM使用者授予AliyunRAMReadOnlyAccess系統策略。具體操作,請參見為RAM使用者授權

    2. 雲資源訪問授權頁面,單擊同意授權

  • 配置阿里雲帳號資訊。

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

    • 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使用者授權

背景資訊

Terraform是一種開源工具,通過Provider來支援新的基礎架構,用於安全高效地預覽、配置和管理雲基礎架構和資源。更多資訊,請參見什麼是Terraform

Alibaba Cloud Provider的老版本中,ACK提供了一個名為alicloud_cs_kubernetes_autoscaler的組件。alicloud_cs_kubernetes_autoscaler組件可以實現節點的Auto Scaling,但是其能力受限:

  • 配置複雜,使用成本高。

  • 伸縮的節點都會被放置到預設節點池,自動調整的節點未單獨維護。

  • 部分配置參數不可更改。

Alibaba Terraform Provider從1.111.0版本開始可通過組件alicloud_cs_kubernetes_node_pool建立開啟自動調整功能的節點池,優勢如下:

  • 配置簡單,您只需要配置伸縮組內節點數的上下限。

  • 針對非必須配置,ACK使用預設值的配置,以防誤操作帶來的基礎環境不一致的問題,例如:作業系統鏡像。

  • 在ACK控制台中可以直觀地觀察節點池內節點的變化。

使用Terraform建立開啟自動調整功能的節點池

如果您的叢集之前已經使用alicloud_cs_kubernetes_autoscaler組件,在完成上述為當前叢集添加Auto Scaling服務授權後,您需要執行以下步驟平滑切換alicloud_cs_kubernetes_autoscaler至alicloud_cs_kubernetes_node_pool,以建立開啟自動調整功能的節點池。

說明

如果您未在叢集中使用alicloud_cs_kubernetes_autoscaler組件,則跳過以下步驟1和步驟2,請直接進行步驟3的操作。

  1. 修改叢集的autoscaler-meta配置項。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組態管理 > 配置項

    3. 配置項頁面左上方的命名空間下拉框中,選擇kube-system,然後在autoscaler-meta配置項右側操作列下,單擊編輯

    4. 編輯面板中,修改autoscaler-meta配置項的值。

      您需將taints值的String類型改成數群組類型,即在文字框中,修改"taints":"""taints":[]

    5. 單擊確定

  2. 同步節點池。

    1. 在叢集管理頁左側導覽列,選擇節點管理 > 節點池

    2. 節點池頁面右上方,單擊同步節點池

如果您未在叢集中使用alicloud_cs_kubernetes_autoscaler組件,請直接進行以下操作。

  1. 使用Terraform建立開啟自動調整功能的節點池。

    1. 建立節點池的設定檔。

      • 在已有叢集中建立開啟自動調整功能的節點池,配置樣本如下。

        展開查看配置樣本

        provider "alicloud" {
        }
        # 為已有叢集建立開啟自動調整功能的節點池。
        resource "alicloud_cs_kubernetes_node_pool" "at1" {
          # 目的地組群ID。
          cluster_id           = ""
          name                 = "np-test"
          # 節點池內節點使用的vswitch,至少提供一個。
          vswitch_ids          = ["vsw-bp1mdigyhmilu2h4v****"]
          instance_types       = ["ecs.e3.medium"]
          password             = "Hello1234"
         
          scaling_config {
            # 最小節點數。
            min_size     = 1
            # 最大節點數。
            max_size     = 5
          }
        
        }
      • 如果未建立叢集,建立節點池的配置樣本如下,需要先建立叢集,然後才能建立節點池。

        展開查看配置樣本

        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" "at1" {
          cluster_id                   = alicloud_cs_managed_kubernetes.default.0.id
          name                         = var.name
          vswitch_ids                  = [alicloud_vswitch.default.id]
          instance_types               = [data.alicloud_instance_types.default.instance_types.0.id]
          key_name                     = alicloud_key_pair.default.key_name
         
          scaling_config {
            min_size     = 1
            max_size     = 5
          }
        
        }

    2. 執行terraform apply命令完成建立。

    完成建立節點池後,在節點池列表中可以看到建立的節點池,該節點池名稱下會標註已開啟自動調整