ACK的節點池及托管節點池中的節點默認不具備自動伸縮能力,您也可以通過使用Terraform工具創建開啟自動伸縮功能的節點池。本文介紹如何通過Terraform創建開啟自動伸縮功能的節點池。
前提條件
已安裝Terraform工具。具體操作,請參見在本地安裝和配置Terraform。
自動伸縮功能依賴彈性伸縮(Auto Scaling,舊稱ESS)服務。啟動節點自動伸縮前,您需要開通彈性伸縮服務,并完成默認角色授權。具體操作,請參見開通彈性伸縮服務。
說明如果您之前已經使用了alicloud_cs_kubernetes_autoscaler組件,默認已開通彈性伸縮服務。
在RAM控制臺,為當前集群添加彈性伸縮服務的授權策略。關于如何授權的詳細信息,請參見授權。
已為系統運維管理 OOS(CloudOps Orchestration Service)服務授權。您可以通過創建AliyunOOSLifecycleHook4CSRole角色,為OOS服務授權。
單擊AliyunOOSLifecycleHook4CSRole。
說明如果當前賬號是阿里云賬號,單擊AliyunOOSLifecycleHook4CSRole即可授權。
如果當前賬號是RAM用戶,請先確保對應的阿里云賬號已授權AliyunOOSLifecycleHook4CSRole,并為RAM用戶授予AliyunRAMReadOnlyAccess系統策略。具體操作,請參見為RAM用戶授權。
在云資源訪問授權頁面,單擊同意授權。
配置阿里云賬號信息。
執行如下命令,創建環境變量,用于存放身份認證信息。
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是一種開源工具,通過Provider來支持新的基礎架構,用于安全高效地預覽、配置和管理云基礎架構和資源。更多信息,請參見什么是Terraform。
在Alibaba Cloud Provider的老版本中,ACK提供了一個名為alicloud_cs_kubernetes_autoscaler的組件。alicloud_cs_kubernetes_autoscaler組件可以實現節點的彈性伸縮,但是其能力受限:
配置復雜,使用成本高。
伸縮的節點都會被放置到默認節點池,自動伸縮的節點未單獨維護。
部分配置參數不可更改。
Alibaba Terraform Provider從1.111.0版本開始可通過組件alicloud_cs_kubernetes_node_pool創建開啟自動伸縮功能的節點池,優勢如下:
配置簡單,您只需要配置伸縮組內節點數的上下限。
針對非必須配置,ACK使用默認值的配置,以防誤操作帶來的基礎環境不一致的問題,例如:操作系統鏡像。
在ACK控制臺中可以直觀地觀察節點池內節點的變化。
使用Terraform創建開啟自動伸縮功能的節點池
如果您的集群之前已經使用alicloud_cs_kubernetes_autoscaler組件,在完成上述為當前集群添加彈性伸縮服務授權后,您需要執行以下步驟平滑切換alicloud_cs_kubernetes_autoscaler至alicloud_cs_kubernetes_node_pool,以創建開啟自動伸縮功能的節點池。
如果您未在集群中使用alicloud_cs_kubernetes_autoscaler組件,則跳過以下步驟1和步驟2,請直接進行步驟3的操作。
修改集群的autoscaler-meta配置項。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在配置項頁面左上角的命名空間下拉框中,選擇kube-system,然后在autoscaler-meta配置項右側操作列下,單擊編輯。
在編輯面板中,修改autoscaler-meta配置項的值。
您需將
taints
值的String類型改成數組類型,即在值文本框中,修改"taints":""
為"taints":[]
。單擊確定。
同步節點池。
在集群管理頁左側導航欄,選擇 。
在節點池頁面右上方,單擊同步節點池。
如果您未在集群中使用alicloud_cs_kubernetes_autoscaler組件,請直接進行以下操作。
使用Terraform創建開啟自動伸縮功能的節點池。
創建節點池的配置文件。
在已有集群中創建開啟自動伸縮功能的節點池,配置示例如下。
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 } }
執行
terraform apply
命令完成創建。
完成創建節點池后,在節點池列表中可以看到新建的節點池,該節點池名稱下會標注已開啟自動伸縮。