介绍
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也会不断的更新迭代,可以关注社区我们版本的迭代。
更多参考
Terraform官网
Terraform Alibaba Provider
Terraform Alibaba Provider Kubernetes
Kubernetes介绍
Terraform系列课程