Terraform与Kubernetes

简介: 看到Terraform可以替代kubectl管理k8s资源的生命周期,于是调研了下它的使用场景,并对比Terraform和Helm的区别 一.Terraform介绍 Terraform是一款开源工具,出自HashiCorp公司,著名的Vagrant、Consul也出自于该公司。

看到Terraform可以替代kubectl管理k8s资源的生 命周期,于是调研了下它的使用场景,并对比Terraform和Helm的区别

一.Terraform介绍

Terraform是一款开源工具,出自HashiCorp公司,著名的Vagrant、Consul也出自于该公司。其主要作用是:让用户更轻松地管理、配置任何基础架构,管理公有和私有云服务,也可以管理外部服务,如GitHub,Nomad。

区别于ansible和puppet等传统的配置管理工具,Terraform趋向于更上层的一个组装者。

Terraform使用模板来定义基础设施,通过指令来实现资源创建/更新/销毁的全生命周期管理,实现“基础设施即代码”,具体示例如下:

resource "alicloud_instance" "web" {
 # cn-beijing availability_zone = "cn-beijing-b"
 image_id = "ubuntu_140405_32_40G_cloudinit_20161115.vhd"

 system_disk_category = "cloud_ssd"

 instance_type = "ecs.n1.small"
 internet_charge_type = "PayByBandwidth"
 security_groups = ["${alicloud_security_group.tf_test_foo.id}"]
 instance_name = "test_foo"
 io_optimized = "optimized"
}

这是阿里云的一个Terraform逻辑,执行terraform apply,就可以创建一个ECS实例

Terraform AliCloud provider: terraform-provider

二.Terraform支持K8S

17年9月,Terraform官方宣布支持Kubernetes,提供Kubernetes应用程序的完整生命周期管理,包含Pod的创建、删除以及副本控制等功能(通过调用API)。

以下是操作示例:

1.安装kubernete集群

当前k8s的installer列表,已经很多了...

2442504181d76c5baace9b2734bf79b9d63b87f9

使用Terraform在阿里云上安装k8s集群:kubernetes-examples

2.创建应用:

  • 1.初始化k8s-provider
因为是调用apiserver,所以需要指定k8s集群的连接方式

provider "kubernetes" {} // 默认~/.kube/config
或:
provider "kubernetes" {
 host = "https://104.196.242.174"

 client_certificate = "${file("~/.kube/client-cert.pem")}"
 client_key = "${file("~/.kube/client-key.pem")}"
 cluster_ca_certificate = "${file("~/.kube/cluster-ca-cert.pem")}"
}
  • 2.初始化terraform
$ terraform init

Initializing provider plugins...
- Downloading plugin for provider "kubernetes"...

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.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
  • 3.创建RC
// Terraform不支持Deployment // issue:https://github.com/terraform-providers/terraform-provider-kubernetes/issues/3 resource "kubernetes_replication_controller" "nginx" { metadata { name = "scalable-nginx-example" labels { App = "ScalableNginxExample" } } spec { replicas = 2 selector { App = "ScalableNginxExample" } template { container { image = "nginx:1.7.8" name = "example" port { container_port = 80 } resources { limits { cpu = "0.5" memory = "512Mi" } requests { cpu = "250m" memory = "50Mi" } } } } } } 
  • 4.创建service
resource "kubernetes_service" "nginx" {
 metadata {
 name = "nginx-example"
 }
 spec {
 selector {
 App = "${kubernetes_replication_controller.nginx.metadata.0.labels.App}"
 }
 port {
 port = 80
 target_port = 80
 }

 type = "LoadBalancer"
 }
}
  • 4.查看和执行
以上的步骤均为执行计划的定义
执行操作:terraform apply
查看当前执行几乎:terraform plan

三.为什么使用Terraform

  • 1.如果你的基础设施(虚机、BLB等)是用Terraform来管理,那么你无需任何成本,可以用同样的配置语言,来管理k8s集群
  • 2.完整的生命周期管理
  • 3.每个执行的同步反馈
  • 4.关系图谱:比如PVC和PV,如果PV创建失败,则不会去执行PVC的流程

四.与Helm的对比

如果是对K8S做上层的资源管理,大多数人会想到用Helm:参考

以下是Helm与Terraform都创建一个APP的操作对比:https://dzone.com/articles/te...

Terraform的优势:

  • 1.如果你的基础设施已经用了Terraform,那么k8s集群管理也可以直接用这个,没有学习成本
  • 2.Terraform不需要在k8s集群中安装任何组件,它通过APISERVER管理资源

Terraform的缺点:

  • 1.对K8S的支持还比较弱,而且17年9月才开始支持,项目还在初期
  • 2.严重依赖Terraform的基础设施provider,比如外部磁盘、consul等没有支持的话,k8s中无法使用
  • 2.不支持beta资源,这个是硬伤,如:Deployment/StatefulSet/Daemonset不支持
  • 3.没有生态和市场的概念,比如helm中的仓库,共享大家的应用仓库

五.吐槽

对于Terraform,不支持Deployment这一条,足以让很多人放弃这个方案,而issue中对于这个的讨论,也有点不太乐观

b380bf8c09886d5e943047ab13c064259cd21c37

必须在v1中的资源才会支持。对于Deployment大家只能用RC代替、或者kube exec加进去(尬

但对于kubernetes而言,beta阶段的很多资源,已经被大家广泛使用(Deployment、Daemonset),而且新版本的Deployment已经变成了apps/v1。

本文转自SegmentFault-Terraform与Kubernetes

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
216 0
|
Kubernetes NoSQL 持续交付
使用Terraform/Ansible/Kubernetes在阿里云上自动部署MongoDB
Terraform, Ansible, Kubernetes, MongoDB, AliCloud
593 1
|
存储 Kubernetes Linux
Terraform管理Kubernetes的初体验
Terraform管理Kubernetes的初体验
454 0
|
弹性计算 人工智能 运维
将 Terraform 生态粘合到 Kubernetes 世界
为了更高效,统一的管理云服务,IaC 思想近年来盛行,其中 Terrafrom 更是成功得到了几乎所有的云厂商的采纳和支持。以 Terrafrom 模型为核心的云服务 IaC 生态已经形成。然而在 Kubernetes 大行其道的今天,IaC 被冠以更广大的想象空间,Terraform IaC 能力和生态成果如果融入 Kubernetes 世界,我们认为这是一种强强联合。
将 Terraform 生态粘合到 Kubernetes 世界
|
存储 弹性计算 Kubernetes
Terraform Aliyun 创建ecs, kubernetes 实例
terraform demo for aliyun 创建vpc, 网关, EIP, ecs, kubernetes, Serverless Kubernetes env : Terraform v0.12.28 provider.alicloud v1.92.0
1313 0
|
Kubernetes 监控 Cloud Native
如何使用 Terraform 管理容器服务 Kubernetes 集群
Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。本文将为大家讲解如何使用 Terraform 来管理容器服务 Kubernetes 集群。
1086 0
如何使用 Terraform 管理容器服务 Kubernetes 集群
|
数据中心 容器 Serverless
如何使用Terraform管理容器服务Kubernetes集群之--Serverless集群
#### 介绍 Terraform 是一款 Infrastructure as Code 的工具,可以将云端资源代码化。关于 Terraform 的基本介绍本文不再赘述,有兴趣的同学可以参考 [《云生态下的基础架构资源管理利器Terraform》](https://yq.aliyun.com/articles/215592) 等云栖社区的优秀文章。
2065 0
|
10月前
|
运维 安全 IDE
加速阿里云部署:Terraform在甄云科技的深度应用
甄云科技是一家领先的数字化采购平台服务商,通过Terraform实现全球云基础设施的高效管理与快速部署。公司成立于2017年,已服务全球30多个行业的中大型企业,客户遍布20多个国家和地区。利用IaC(基础架构即代码)理念和Terraform工具,甄云科技显著提升了开发与运维效率,减少了人为错误,加快了迭代速度,并支持业务快速扩展,为全球化战略提供了稳固的云基础架构支持。未来,公司将持续优化技术框架,回馈社区,助力更多企业的数字化转型。
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
427 58
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
|
弹性计算 持续交付 API
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B

热门文章

最新文章

推荐镜像

更多