使用Terraform创建托管版Kubernetes

目前,阿里云容器服务已经可以创建托管版 Kubernetes 集群了。相比于默认的 Kubernetes 集群,托管版本会主动替您运维一套高可用的 Master 组件,免去了默认版本集群中三个 Master ECS 节点,从而节约所需的资金成本及维护时的人力成本。在容器服务控制台,我们为您提供了便捷使用的可视界面一步一步引导式地创建该类型集群。但当您需要反复创建托管版集群、大批量创建集群,或者您就是天生抗拒控制台手工操作的那一类人,可以了解并尝试使用一下 Terraform 了。

Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。关于 Terraform 的基本介绍本文不再赘述,有兴趣的同学可以参考 《云生态下的基础架构资源管理利器Terraform》 等云栖社区的优秀文章。目前我们一直在支持阿里云 Terraform Provider,已经实现了阿里云上面绝大部分的云产品的对接。

在 2018 年圣诞节来临之前,阿里云 Terraform Provider 已经发布 v1.26.0 版本,其中已经支持了创建托管版Kubernetes 集群,下面我们来一起看下如何实现命令行快速部署一个这样的集群。

创建托管版 Kubernetes 集群

首先我们打开《阿里云 Terraform Provider 文档 - 托管版 Kubernetes》的帮助文档,可以看到该资源 Resource 提供的参数列表。参数分为入参 Argument 和出参 Attributes。入参列表内包含了必填参数以及可选参数,例如 name 和 name_prefix 就是一对必填参数,但它们互斥,即不能同时填写。如果填了 name,集群名就是 name 的值,如果填了 name_prefix,集群名会以 name_prefix 开头自动生成一个。我们对照文档中的参数列表 Argument Reference,先草拟出一个集群的描述,为了方便起见,我把填写每个参数的理由都注释在代码中。

# 引入阿里云 Terraform Provider
provider "alicloud" {# 填入您的账号 Access Keyaccess_key = "FOO"# 填入您的账号 Secret Keysecret_key = "BAR"# 填入想创建的 Regionregion     = "cn-hangzhou"# 可选参数,默认不填就使用最新版本version    = "v1.26.0"
}# 必要的资源标识
# alicloud_cs_managed_kubernetes 表明是托管版 Kubernetes 集群
# k8s 代表该资源实例的名称
resource "alicloud_cs_managed_kubernetes" "k8s" {# 集群名称,可以带中划线,一个账户内的集群名称不能相同name = "test-managed-kubernetes"# 可以从 ECS 控制台上面查询到可用区信息,以及对应的 ECS 实例类型库存# 以下代表 Worker 节点将部署在 cn-hangzhou-h 这个可用区,采用 ecs.c5.xlarge 这个机型。availability_zone = "cn-hangzhou-h"worker_instance_types = ["ecs.c5.xlarge"]# 配置该集群 Worker 节点数为 2 个,该数字后续可以再扩容worker_numbers = [2]# Worker 节点使用高效云盘worker_disk_category  = "cloud_efficiency"# 默认为 true,会在 VPC 内创建一个 Nat 网关用于 ECS 连上互联网new_nat_gateway = true# 配置所有 ECS 的默认 Root 密码,此处也可以用密钥对 key_name 代替,但需要提前创建password = "Test12345"# Kubernetes 集群内所有 Pod 使用的子网网段,不能与 service_cidr 和 ECS 所在网段冲突# 默认创建的 VPC 是 192.168.0.0/16 这个网段内的,所以 pod_cidr 和 service_cidr 可以使用 172 网段# 请参考 VPC下 Kubernetes 的网络地址段规划pod_cidr = "172.20.0.0/16"service_cidr = "172.21.0.0/20"# 安装云监控插件install_cloud_monitor = true
}

我们可以将以上的配置保存为一个 main.tf 描述文件,在该文件的当前目录下执行 terraform init 和 terraform apply。

xh4n3@xh4n3:~/ops/terraform-example% terraform init --get-plugins=true -upgradeInitializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider "alicloud" (1.26.0)...Terraform has been successfully initialized!You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.xh4n3@xh4n3:~/ops/terraform-example% terraform applyAn execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:+ createTerraform will perform the following actions:+ alicloud_cs_managed_kubernetes.k8sid:                          <computed>availability_zone:           "cn-hangzhou-h"install_cloud_monitor:       "true"name:                        "test-managed-kubernetes"name_prefix:                 "Terraform-Creation"new_nat_gateway:             "true"password:                    <sensitive>pod_cidr:                    "172.20.0.0/16"security_group_id:           <computed>service_cidr:                "172.21.0.0/20"vpc_id:                      <computed>vswitch_ids.#:               <computed>worker_disk_category:        "cloud_efficiency"worker_disk_size:            "40"worker_instance_charge_type: "PostPaid"worker_instance_types.#:     "1"worker_instance_types.0:     "ecs.c5.xlarge"worker_nodes.#:              <computed>worker_numbers.#:            "1"worker_numbers.0:            "2"Plan: 1 to add, 0 to change, 0 to destroy.Do you want to perform these actions?Terraform will perform the actions described above.Only 'yes' will be accepted to approve.Enter a value:

从上述日志中可以看到,terraform init 会把我们用到的 Provider 插件下载好,terraform apply 会根据我们的 main.tf 描述文件计算出需要执行的操作,上述显示将会创建一个 alicloud_cs_managed_kubernetes.k8s 的资源,需要我们输入 yes 来确认创建。确认创建后,创建大约会耗时五分钟,terraform 会输出类似下面的日志。

# 以上省略
Do you want to perform these actions?Terraform will perform the actions described above.Only 'yes' will be accepted to approve.Enter a value: yesalicloud_cs_managed_kubernetes.k8s: Creating...availability_zone:           "" => "cn-hangzhou-h"install_cloud_monitor:       "" => "true"name:                        "" => "test-managed-kubernetes"name_prefix:                 "" => "Terraform-Creation"new_nat_gateway:             "" => "true"password:                    "<sensitive>" => "<sensitive>"pod_cidr:                    "" => "172.20.0.0/16"security_group_id:           "" => "<computed>"service_cidr:                "" => "172.21.0.0/20"vpc_id:                      "" => "<computed>"vswitch_ids.#:               "" => "<computed>"worker_disk_category:        "" => "cloud_efficiency"worker_disk_size:            "" => "40"worker_instance_charge_type: "" => "PostPaid"worker_instance_types.#:     "" => "1"worker_instance_types.0:     "" => "ecs.c5.xlarge"worker_nodes.#:              "" => "<computed>"worker_numbers.#:            "" => "1"worker_numbers.0:            "" => "2"
alicloud_cs_managed_kubernetes.k8s: Still creating... (10s elapsed)
alicloud_cs_managed_kubernetes.k8s: Still creating... (20s elapsed)
alicloud_cs_managed_kubernetes.k8s: Still creating... (30s elapsed)
# 以上省略
alicloud_cs_managed_kubernetes.k8s: Creation complete after 6m5s (ID: cc54df7d990a24ed18c1e0ebacd36418c)Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

当出现 Apply complete! Resources: 1 added 字样的时候,集群已经成功创建,此时我们也可以登录控制台后在控集群列表中看到集群。

修改托管版 Kubernetes 集群

在 Terraform Provider 中,我们提供了一部分参数的修改能力,一般情况下,所有非 Force New Resouce(强制新建资源)的参数都可以被修改。下面我们修改部分参数,注释内容为更新的项目。

provider "alicloud" {access_key = "FOO"secret_key = "BAR"region     = "cn-hangzhou"version    = "v1.26.0"
}resource "alicloud_cs_managed_kubernetes" "k8s" {# 更换集群的名称为 test-managed-kubernetes-updatedname = "test-managed-kubernetes-updated"availability_zone = "cn-hangzhou-h"worker_instance_types = ["ecs.c5.xlarge"]# 修改 worker_numbers 为 3,可以扩容一个 worker 节点worker_numbers = [3]worker_disk_category  = "cloud_efficiency"new_nat_gateway = truepassword = "Test12345"pod_cidr = "172.20.0.0/16"service_cidr = "172.21.0.0/20"install_cloud_monitor = true# 导出集群的连接配置文件到 /tmp 目录kube_config = "/tmp/config"# 导出集群的证书相关文件到 /tmp 目录,下同client_cert = "/tmp/client-cert.pem"client_key = "/tmp/client-key.pem"cluster_ca_cert = "/tmp/cluster-ca-cert.pem"
}

同创建集群一样,修改集群时使用的命令也是 terraform apply。执行后我们得到以下日志输出,输入 yes 并回车,我们就可以把该集群的名称改为 test-managed-kubernetes-updated,worker 节点扩容至 3 节点,同时将导出证书和连接文件到本机的 /tmp 目录。

xh4n3@xh4n3:~/ops/terraform-example% terraform apply
alicloud_cs_managed_kubernetes.k8s: Refreshing state... (ID: cc54df7d990a24ed18c1e0ebacd36418c)An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:~ update in-placeTerraform will perform the following actions:~ alicloud_cs_managed_kubernetes.k8sclient_cert:      "" => "/tmp/client-cert.pem"client_key:       "" => "/tmp/client-key.pem"cluster_ca_cert:  "" => "/tmp/cluster-ca-cert.pem"kube_config:      "" => "/tmp/config"name:             "test-managed-kubernetes" => "test-managed-kubernetes-updated"worker_numbers.0: "2" => "3"Plan: 0 to add, 1 to change, 0 to destroy.Do you want to perform these actions?Terraform will perform the actions described above.Only 'yes' will be accepted to approve.Enter a value: yesalicloud_cs_managed_kubernetes.k8s: Modifying... (ID: cc54df7d990a24ed18c1e0ebacd36418c)client_cert:      "" => "/tmp/client-cert.pem"client_key:       "" => "/tmp/client-key.pem"cluster_ca_cert:  "" => "/tmp/cluster-ca-cert.pem"kube_config:      "" => "/tmp/config"name:             "test-managed-kubernetes" => "test-managed-kubernetes-updated"worker_numbers.0: "2" => "3"
alicloud_cs_managed_kubernetes.k8s: Still modifying... (ID: cc54df7d990a24ed18c1e0ebacd36418c, 10s elapsed)
alicloud_cs_managed_kubernetes.k8s: Still modifying... (ID: cc54df7d990a24ed18c1e0ebacd36418c, 20s elapsed)
alicloud_cs_managed_kubernetes.k8s: Still modifying... (ID: cc54df7d990a24ed18c1e0ebacd36418c, 30s elapsed)
# 以上省略
alicloud_cs_managed_kubernetes.k8s: Modifications complete after 4m4s (ID: cc54df7d990a24ed18c1e0ebacd36418c)Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

Terraform apply 运行成功后,控制台中显示的集群信息已经表明现在集群已经变成了我们期望的状态。在本机上,我们也通过导出的连接文件,用 kubectl 连接到集群。

 

附录

控制台创建托管版 Kubernetes 集群帮助文档
https://help.aliyun.com/document_detail/95108.html
云生态下的基础架构资源管理利器Terraform
https://yq.aliyun.com/articles/215592
阿里云 Terraform Provider 代码库
https://github.com/terraform-providers/terraform-provider-alicloud
阿里云 Terraform Provider 文档
https://www.terraform.io/docs/providers/alicloud/index.html
阿里云 Terraform Provider 文档 - 托管版 Kubernetes
https://www.terraform.io/docs/providers/alicloud/r/cs_managed_kubernetes.html
VPC下 Kubernetes 的网络地址段规划
https://help.aliyun.com/document_detail/86500.html
Terraform 部署容器服务Kubernetes集群及Wordpress应用
https://yq.aliyun.com/articles/641627

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

确认! Python夺冠,Java“被迫”退出竞争舞台,网友:崩溃!

2019年转眼已经接近尾声&#xff0c;如果盘点下2019年最火的语言&#xff0c;除了Python还能有谁&#xff1f;你心中的王者语言又是谁&#xff1f;这一年Python风光无限这一年JAVA走向右边这一年&#xff0c;我们都很感慨&#xff0c;你呢&#xff1f;关于Python&#xff0c;编…

阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促

本篇文章来自于2018年12月22日举办的《阿里云栖开发者沙龙—Java技术专场》&#xff0c;梁笑专家是该专场第一位演讲的嘉宾&#xff0c;本篇文章是根据梁笑专家在《阿里云栖开发者沙龙—Java技术专场》的演讲视频以及PPT整理而成。 摘要&#xff1a;2018年双十一平稳度过&#…

首次公开!《阿里计算机视觉技术精选》揭秘前沿落地案例

当下计算机视觉技术无疑是AI浪潮中最火热的议题之一。视觉技术的渗透&#xff0c;既可以对传统商业进行改造使之看到新的商业机会&#xff0c;还可以创造全新的商业需求和市场。无论在电商、安防、娱乐&#xff0c;还是在工业、医疗、自动驾驶领域&#xff0c;计算机视觉技术都…

阿里程序员常用的 15 款开发者工具

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Linux技术责编 | 阿秃从人工到自动化&#xff0c;从重复到创新&#xff0c;技术演进的历程中&#xff0c;伴随着开发者工具类产品的发展。阿里巴巴将自身在各类业务场景下的技术积淀&#xff0c;通过开源、云上实现或工具等形…

一文深度解读阿里云CDN实时日志的前世今生:挖掘实时数据的无限价值

阿里云CDN实时日志服务可以将CDN采集的日志&#xff0c;秒级的交付给用户, 并且可以对采集到的日志进行实时、交互式分析和报表呈现&#xff0c;为监控、报警、渠道分析、运营分析提供实时、可靠的数据参考&#xff0c;让用户远离锁事&#xff0c;专注数据价值。 12月26日&…

推荐系统之信息茧房问题

什么是信息茧房 信息茧房其实是现在社会一个很可怕的现象&#xff0c;从字面意思来看的话其实比喻的是信息被虫茧一般封锁住。这个问题反映了现在随着个性化推荐的普及衍射的一个社会问题。 平时在浏览新闻或者淘宝的时候&#xff0c;平台会自动根据用户的浏览记录获取用户的…

【快讯】阿里云张建锋:数据成为经济发展的新生产要素

在2019阿里云广东峰会上&#xff0c;阿里云智能总裁张建锋表示&#xff0c;全面迈入数字经济时代&#xff0c;数据成为社会经济发展的新生产要素&#xff0c;云智能是新基础设施。 “数字经济时代&#xff0c;最大的不一样是有一种新的生产要素是数据。”张建锋表示&#xff0c…

Flutter Exception降到万分之几的秘密

1. flutter exception 闲鱼技术团队于2018年上半年率先引入了Flutter技术实现客户端开发&#xff0c;到目前为止成功改造并上线了复杂的商品详情和发布业务。随着flutter比重越来越多&#xff0c;我们开始大力治理flutter的exception,起初很长一段时间内闲鱼内flutter的except…

mac vim php 颜色,mac vim 配色

syntax onset nuset noicset t_Co256set tabstop4set nocompatibleset shiftwidth4set softtabstop4set backspace2set autoindentset expandtabset smartindentset hlsearch"状态栏显示当前执行的命令set showcmd"粘贴时保持格式set paste"允许使用鼠标点击定位…

云栖专辑 | 阿里开发者们的第6个感悟:享受折磨

2015年12月20日&#xff0c;云栖社区上线。2018年12月20日&#xff0c;云栖社区3岁。 阿里巴巴常说“晴天修屋顶”。 在我们看来&#xff0c;寒冬中&#xff0c;最值得投资的是学习&#xff0c;是增厚的知识储备。 所以社区特别制作了这个专辑——分享给开发者们20个弥足珍贵的…

2019年人工智能硬件与应用大趋势

2019年即将到来&#xff0c;人工智能将往什么方向发展&#xff1f;机器学习将如何演变为人工智能&#xff1f;在神经网络领域具有20年的技术经验Eugenio Culerciello&#xff0c;在硬件和软件两方面都有经验积累。他预测&#xff0c;在硬件和应用两方面&#xff0c;2019年的人工…

阿里专家杜万:Java响应式编程,一文全面解读

本篇文章来自于2018年12月22日举办的《阿里云栖开发者沙龙—Java技术专场》&#xff0c;杜万专家是该专场第四位演讲的嘉宾&#xff0c;本篇文章是根据杜万专家在《阿里云栖开发者沙龙—Java技术专场》的演讲视频以及PPT整理而成。 摘要&#xff1a;响应式宣言如何解读&#xf…

日站会——你的站会姿势正确吗?

今天我们讲讲如何利用站会&#xff0c;更好地实现促进团队有效协作和聚焦&#xff0c;促进价值顺畅流动和交付&#xff0c;同时及时的暴露问题和风险。 站会的目标 说到站会&#xff0c;人们最熟悉的Scrum站会&#xff0c;典型的形式是团队围成一圈&#xff0c;依次回答三个问…

TableStore实战:DLA+SQL实时分析TableStore

一、实战背景 什么是DLA&#xff08;DataLake Analytics数据湖&#xff09;&#xff1f;他是无服务器化&#xff08;Serverless&#xff09;的云上交互式查询分析服务。作为分布式交互式分析服务&#xff0c;是表格存储计算生态的重要组成之一。为了使用户更好的了解DLA的功能…

云栖专辑 | 阿里开发者们的第8个感悟:在信息大爆炸的时代,保持专注度显得尤为可贵

2015年12月20日&#xff0c;云栖社区上线。2018年12月20日&#xff0c;云栖社区3岁。 阿里巴巴常说“晴天修屋顶”。 在我们看来&#xff0c;寒冬中&#xff0c;最值得投资的是学习&#xff0c;是增厚的知识储备。 所以社区特别制作了这个专辑——分享给开发者们20个弥足珍贵的…

手机秒变IoT设备?——巧妙利用阿里云物联网平台

什么&#xff1f;嵌入五行代码可以实现用户定位&#xff0c;用户在线数量统计&#xff0c;还能和云端消息交互&#xff01; 没错得益于阿里云物联网套件创建设备免费&#xff0c;消息收费也只有百万消息三块六&#xff08;先使用后付费&#xff0c;不满不要钱&#xff09;&…

阿里CEO逍遥子:学会“用人做事”,而不是“做事用人”

你们知道的&#xff0c;双11之后&#xff0c;我们做了一件晴天修屋顶的事儿&#xff0c;就是进行组织架构的调整——阿里云升级为阿里云智能&#xff1b;天猫升级为“大天猫”&#xff0c;形成天猫事业群、天猫超市事业群、天猫进出口事业部三大板块&#xff1b;加强技术、智能…