原文作者:治世 原文連結 更多雲原生技術資訊可關注 阿裡巴巴雲原生技術圈
介紹
Terraform 是一款 Infrastructure as Code 的工具,可以将雲端資源代碼化。關于 Terraform 的基本介紹本文不再贅述,有興趣的同學可以參考
《雲生态下的基礎架構資源管理利器Terraform》等雲栖社群的優秀文章。阿裡雲容器服務團隊也快速在Terraform上支援了Kubernetes叢集的建立。關于标準版和Serverless版叢集如何使用Terraform 請參考以下文章
前置檢查
托管版叢集
首先我們打開《阿裡雲 Terraform Provider 文檔 -Managed 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_managed_kubernetes 表明是托管版 Kubernetes 叢集
# k8s 代表該資源執行個體的名稱
resource "alicloud_cs_managed_kubernetes" "k8s" {
# 叢集名稱,可以帶中劃線,一個賬戶内的叢集名稱不能相同
name = "tf-managed-kubernetes-20191017"
# 交換機ID ,此處可以輸入同一VPC下的多個交換機,最多可以輸入三個交換機
vswitch_ids = ["vsw-2zelx9t6i28pqe3cca3rv"]
# 是否配置公網通路能力。如果您目前的交換機已配置SNAT規則,或者通過其他代理的方式可以通路公網,則此處可以設定為false,反之,則設定為true,讓系統來完成通路公網的配置
new_nat_gateway = true
# 工作節點的執行個體規則配置,可以選擇多個執行個體規格
worker_instance_types = ["ecs.c5.xlarge"]
# 工作節點個數,對于Managed Kubernetes叢集至少需要2個工作節點
worker_number = 2
# 節點的登陸密碼
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_data_disk_category = "cloud_ssd"
# 工作節點資料盤大小
worker_data_disk_size = 200
# 是否開啟日志服務
log_config {
# 日志類型需要是SLS
type = "SLS"
# SLS project名稱,如果指定則需要保證該project存在。
project = "tf-managed-sls"
}
}
-
資源檢查
我們可以将以上的配置儲存為一個 main.tf 描述檔案,在該檔案的目前目錄下執行 terraform plan 進行資源檢查

-
初始化provier
再檢查正常之後,我們執行 terraform init 先來初始化provider
-
資源建立
接下來使用terraform apply 執行建立
此時terraform apply 會根據我們的 main.tf 描述檔案計算出需要執行的操作,上述顯示将會建立一個 alicloud_cs_managed_kubernetes.k8s的資源,需要我們輸入 yes 來确認建立。确認建立後,建立大約會耗時十分鐘,terraform 會輸出類似下面的日志。
在指令行中出現如下資訊的時候,表明叢集已建立成功。
此時我們也可以登入控制台後在控叢集清單中看到叢集。
-
修改資源
在 Terraform Provider 中,我們提供了一部分參數的修改能力,一般情況下,所有非 Force New Resouce(強制建立資源)的參數都可以被修改。下面我們我們示範通過修改節點數來完成一次擴容動作。
resource "alicloud_cs_managed_kubernetes" "k8s" {
# 不變的部分此處省略不寫
worker_number = 5
}
調整完模闆後,我們再次執行terraform apply ,我們會看到提示變化的點
更新動作同樣需要我們輸入 yes 來确認更新,此時我們可以通過控制台看到叢集已經處于更新中狀态了。
大概需要五分鐘左右,系統就會完成新購節點并且加入到叢集中,完成後,我們通過控制台可以看到節點數發生了變化。
-
資源釋放
當我們不再需要該叢集的時候,我們可以執行 terraform destroy 來銷毀資源
總結
通過以上操作我們可以完成托管版叢集的建立和銷毀工作。但是在實際使用過程中,模闆比這個更加的複雜,例如一些輸入參數是通過變量的方式傳入的,這樣一個模闆可以适配更多的場景。
由于我們的服務仍然在不斷的演進中,同時Terraform也會不斷的更新疊代,可以關注社群我們版本的疊代。
“ 阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”