天天看點

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集

介紹

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 進行資源檢查

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集
  • 初始化provier

    再檢查正常之後,我們執行 terraform init 先來初始化provider

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集
  • 資源建立

    接下來使用terraform apply 執行建立

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集

此時terraform apply 會根據我們的 main.tf 描述檔案計算出需要執行的操作,上述顯示将會建立一個 alicloud_cs_kubernetes.k8s的資源,需要我們輸入 yes 來确認建立。确認建立後,建立大約會耗時十五分鐘,terraform 會輸出類似下面的日志。

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集

在指令行中出現如下資訊的時候,表明叢集已建立成功。

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集

此時我們也可以登入控制台後在控叢集清單中看到叢集。

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集
  • 資源釋放

    當我們不再需要該叢集的時候,我們可以執行 terraform destroy 來銷毀資源

如何使用Terraform管理容器服務Kubernetes叢集之-标準版叢集

總結

通過以上操作我們可以完成标準版叢集的建立和銷毀工作。但是在實際使用過程中,模闆比這個更加的複雜,例如一些輸入參數是通過變量的方式傳入的,這樣一個模闆可以适配更多的場景。

由于我們的服務仍然在不斷的演進中,同時Terraform也會不斷的更新疊代,可以關注社群我們版本的疊代。

更多參考

Terraform官網 Terraform Alibaba Provider Terraform Alibaba Provider Kubernetes Kubernetes介紹 Terraform系列課程

繼續閱讀