如何使用 Terraform 管理容器服务 Kubernetes 集群

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。本文将为大家讲解如何使用 Terraform 来管理容器服务 Kubernetes 集群。

原文作者:治世
原文链接
更多云原生技术资讯可关注阿里巴巴云原生技术圈

介绍

Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。关于 Terraform 的基本介绍本文不再赘述,有兴趣的同学可以参考 《云生态下的基础架构资源管理利器Terraform》 等云栖社区的优秀文章。阿里云容器服务团队也快速在Terraform上支持了Kubernetes集群的创建。关于标准版和Serverless版集群如何使用Terraform 请参考以下文章

前置检查

  • Terraform v0.12.8+
  • terraform-provider-alicloud 1.57.2+ (早期版本不支持配置日志服务)

托管版集群

首先我们打开《阿里云 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 进行资源检查

5.png

  • 初始化provier
    再检查正常之后,我们执行 terraform init 先来初始化provider

6.png

  • 资源创建
    接下来使用terraform apply 执行创建

7.png

此时terraform apply 会根据我们的 main.tf 描述文件计算出需要执行的操作,上述显示将会创建一个 alicloud_cs_managed_kubernetes.k8s的资源,需要我们输入 yes 来确认创建。确认创建后,创建大约会耗时十分钟,terraform 会输出类似下面的日志。
8.png

在命令行中出现如下信息的时候,表明集群已创建成功。
9.png

此时我们也可以登录控制台后在控集群列表中看到集群。
10.png

  • 修改资源
    在 Terraform Provider 中,我们提供了一部分参数的修改能力,一般情况下,所有非 Force New Resouce(强制新建资源)的参数都可以被修改。下面我们我们演示通过修改节点数来完成一次扩容动作。
resource "alicloud_cs_managed_kubernetes" "k8s" {
  # 不变的部分此处省略不写
  worker_number = 5
}

调整完模板后,我们再次执行terraform apply ,我们会看到提示变化的点
11.png

更新动作同样需要我们输入 yes 来确认更新,此时我们可以通过控制台看到集群已经处于更新中状态了。
12.png

大概需要五分钟左右,系统就会完成新购节点并且加入到集群中,完成后,我们通过控制台可以看到节点数发生了变化。
13.png

  • 资源释放
    当我们不再需要该集群的时候,我们可以执行 terraform destroy 来销毁资源

14.png

总结

通过以上操作我们可以完成托管版集群的创建和销毁工作。但是在实际使用过程中,模板比这个更加的复杂,例如一些输入参数是通过变量的方式传入的,这样一个模板可以适配更多的场景。
由于我们的服务仍然在不断的演进中,同时Terraform也会不断的更新迭代,可以关注社区我们版本的迭代。

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
16 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
5天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
38 17
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
18天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
101 0
|
20天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
19 1
|
21天前
|
Kubernetes 网络协议 Docker
K8S核心插件-coredns服务
K8S核心插件-coredns服务
15 0
|
25天前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
213 0
|
28天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
26 0
|
30天前
|
存储 Kubernetes 监控
Kubernetes(k8s)集群健康检查常用的五种指标
Kubernetes(k8s)集群健康检查常用的五种指标
86 1

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版