介紹
Terraform 是一款 Infrastructure as Code 的工具,可以将雲端資源代碼化。關于 Terraform 的基本介紹本文不再贅述,有興趣的同學可以參考
《雲生态下的基礎架構資源管理利器Terraform》等雲栖社群的優秀文章。阿裡雲容器服務團隊也快速在Terraform上支援了Kubernetes叢集的建立。關于标準版和Serverless版叢集如何使用Terraform 請參考以下文章
前置檢查
- Terraform v0.12.8+
- terraform-provider-alicloud 1.57.2+ (早期版本不支援配置日志服務)
标準版叢集
首先我們打開《阿裡雲 Terraform Provider 文檔 - Kubernetes》的幫助文檔,可以看到該資源 Resource 提供的參數清單。參數分為入參 Argument 和出參 Attributes。入參清單内包含了必填參數以及可選參數,例如 name 和 name_prefix 就是一對必填參數,但它們互斥,即不能同時填寫。我們對照文檔中的參數清單 Argument Reference,先草拟出一個叢集的描述,為了友善起見,我把填寫每個參數的理由都注釋在代碼中。
- 資源描述
# 引入阿裡雲 Terraform Provider
provider "alicloud" {
# 填入您的賬号的 Access Key
access_key = "FOO"
# 填入您的賬号 Secret Key
secret_key = "BAR"
# 填入想建立的 Region
region = "cn-hangzhou"
# 可選參數,預設不填就使用最新版本。不建議該處指定版本,除非很明确知道每個版本的能力
version = "v1.57.2"
}
# 必要的資源辨別
# alicloud_cs_kubernetes 表明是标準版 Kubernetes 叢集
# k8s 代表該資源執行個體的名稱
resource "alicloud_cs_kubernetes" "k8s" {
# 叢集名稱,可以帶中劃線,一個賬戶内的叢集名稱不能相同
name = "tf-kubernetes-20191017"
# 交換機ID ,此處可以輸入同一VPC下的多個交換機,最多可以輸入三個交換機
vswitch_ids = ["vsw-2zelx9t6i28pqe3cca3rv"]
# 是否配置公網通路能力。如果您目前的交換機已配置SNAT規則,或者通過其他代理的方式可以通路公網,則此處可以設定為false,反之,則設定為true,讓系統來完成通路公網的配置
new_nat_gateway = true
# Master節點的執行個體規則配置,可以選擇多個執行個體規格
master_instance_types = ["ecs.c5.xlarge"]
# Master節點系統盤類型
master_disk_category = "cloud_ssd"
# Master節點系統盤大小
master_disk_size = 200
# 工作節點的執行個體規則配置,可以選擇多個執行個體規格
worker_instance_types = ["ecs.c5.xlarge"]
# 工作節點個數
worker_numbers = [1,1,1]
# 節點的登陸密碼
password = "Yourpassword1234"
# 叢集的Pod 網段位址,該位址不可以和VPC網段沖突,同時也不能和相同VPC其他叢集網段沖突
pod_cidr = "10.20.0.0/16"
# 叢集的服務網段位址,該網段不能和pod網段沖突
service_cidr = "172.21.0.0/20"
# 是否安裝雲監控插件
install_cloud_monitor = true
# 是否暴露Api Server公網通路
slb_internet_enabled = true
# 工作節點系統盤類型
worker_disk_category = "cloud_ssd"
# 工作節點系統盤大小
worker_disk_size = 200
# 工作節點資料盤類型
worker_data_disk_category = "cloud_ssd"
# 工作節點資料盤大小
worker_data_disk_size = 200
# 是否開啟日志服務
log_config {
# 日志類型需要是SLS
type = "SLS"
# SLS project名稱,如果指定則需要保證該project存在,不指定系統自動建立。
project = ""
}
}
-
資源檢查
我們可以将以上的配置儲存為一個 main.tf 描述檔案,在該檔案的目前目錄下執行 terraform plan 進行資源檢查

-
初始化provier
再檢查正常之後,我們執行 terraform init 先來初始化provider
-
資源建立
接下來使用terraform apply 執行建立
此時terraform apply 會根據我們的 main.tf 描述檔案計算出需要執行的操作,上述顯示将會建立一個 alicloud_cs_kubernetes.k8s的資源,需要我們輸入 yes 來确認建立。确認建立後,建立大約會耗時十五分鐘,terraform 會輸出類似下面的日志。
在指令行中出現如下資訊的時候,表明叢集已建立成功。
此時我們也可以登入控制台後在控叢集清單中看到叢集。
-
資源釋放
當我們不再需要該叢集的時候,我們可以執行 terraform destroy 來銷毀資源
總結
通過以上操作我們可以完成标準版叢集的建立和銷毀工作。但是在實際使用過程中,模闆比這個更加的複雜,例如一些輸入參數是通過變量的方式傳入的,這樣一個模闆可以适配更多的場景。
由于我們的服務仍然在不斷的演進中,同時Terraform也會不斷的更新疊代,可以關注社群我們版本的疊代。