DevOps工具链系列Tools(1)--Terraform

从本篇开始我们开始探讨的是Devops相关工具链的具体知识体系 :

在我们整个的Devops工具链里面,我们需要重点掌握以下几种工具:
1.Jenkins:持续集成工具
2.Ansible:持续部署工具
3.SonarQbe:代码检查工具
4.Terraform:基础设施管理工具
5.GitHub:代码管理工具
6.Prometheus:监控工具
7.Kubernetes:容器编排工具
8.Docker:容器
这些工具贯穿于整个Devops系统的各个环节,我们需要对其有深刻的理解才能更好的搭建一套高可用的Devops工具链。
工欲善其事,必先利其器。在所有的工作开始之前,我们需要一个比较完整的Infra层面的支撑,我们可以使用基于云平台的VM,或者是本地的物理机。在这里,我们还是依旧拿AWS作为基础平台来搭建整个的知识体系,所以对于工具链我们首先来熟悉一下 IT 基础架构自动化编排工具——Terraform 。

Terraform 基本概念:

Terraform 是一个 IT 基础架构自动化编排工具,它的口号是 "Write, Plan, and create Infrastructure as Code", 基础架构即代码。Terraform 几乎可以支持所有市面上能见到的云服务,比如AWS ,阿里云,Azure,Google Cloud Platform ,Oracle Cloud Platform等,还有些私有的云比如OpenSatck等等。
下面我们根据步骤来一步步使用Terraform:

1.安装TerraForm:

首先我们必须在机器上安装terraform,下载地址:
terraform
Terraform打包为zip存档。下载Terraform后,解压缩包。Terraform作为单个二进制文件运行terraform。可以安全地删除包中的任何其他文件,Terraform仍然可以运行。

curl https://releases.hashicorp.com/terraform/0.11.13/terraform_0.11.13_linux_amd64.zip -o terraform.zip
1.download terraform

2.解压terraform
查看terraform版本:terraform --version
3.terraform安装成功
2.Terraform 基本命令:
1.mkdir:创建一个干净的工作目录,为后续操作做准备,该目录就像git的仓库

2.example.tf:需要创建一个.tf文件,指定provider等信息,工作目录下需要有至少一个tf文件,否则后续命令无法进行,在本文的例子中,我们默认为example.tf

3.terraform init:类似于git init,对当前目录做初始化,下载tf中的provider,并为后续的操作准备必要的环境条件

4.terraform plan:预览执行计划,不是必须的,但是强烈建议,主要是展示此次操作的具体内容。

5.terraform apply:真正执行编排计划

6.terraform show:显示当前状态。

7.terraform destroy:销毁云服务,将tf中的云服务清理干净,此操作跟AWS中CloudFormation的销毁操作类似,会回收所有的按照此tf文件创建出来的那内容
3.基础环境搭建:

安装Terraform后,让我们直接进入它并开始创建一些基础架构:
用于描述Terraform中基础结构的文件集简称为Terraform 配置,这边大家可以先了解下,下面会一个个讲解:


4.terraform配置文件
  • example.tf
    第一个配置来启动单个AWS EC2实例:
    首先必须强调一下的是,对于每个terraform配置组来说,provider是必须的,在这里,为了演示方便,我们使用的是dafault的VPC:
provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region     = "${var.region}"
}
resource "aws_instance" "gtxy_ec2_1" {
  ami           = "ami-053617c9d818c1189"
  instance_type = "t2.micro"
  provisioner "local-exec" {
    command = "echo ${aws_instance.gtxy_ec2_1.public_ip} > ip_address.txt"
  }
}
resource "aws_eip" "ip" {
  instance = "${aws_instance.gtxy_ec2_1.id}"
}
provider:IaaS层提供商,例如AWS,Auzre等
resource:IaaS层资源类型,我们这里定义的是一个AWS Instance
    - aws_instance :instance 类型
    - gtxy_ec2_1 :instance 名称
  • variables.tf
    有些参数我们不想通过硬编码的方式写入到tf中,我们就会采用变量方式来搞定这种场景,一般我们会把所有的变量都单独拿到一个tf文件里去声明,例如variables.tf,虽然不是必须要命名成variables.tf,但是我们约定俗成这么做。
variable "access_key" {}
variable "secret_key" {}
variable "region" {
  default = "cn-north-1"
}

很好理解,脚本里region我们给了默认值cn-north-1,但是其他两个值均未给出,所以我们需要动态赋值。在其他tf中引用方式如下:

方式一:命令参数设置
$ terraform apply -var 'access_key=foo' -var 'secret_key=bar'
方式二:默认参数文件
Terraform默认会加载terraform.tfvars的文件为初始化参数的文件,文件内容是键值对的方式:
access_key = "foo"
secret_key = "bar"
方式三:命令制定参数文件
如果不按照方式二的命名规则,而是自己自定义文件名,可以采用方式一和方式二结合的方式指定参数文件:
$ terraform apply -var-file="secret.tfvars" -var-file="production.tfvars"
  • backend.tf
    将Terraform的state文件维护在云端或远程服务器,这样既可以保证高可用性,也可以方便多名编排人员共同维护
    5.backend配置文件
    这样在执行terraform init时就会在本地和remote端各维护一份状态文件
  • ip_address.txt
    当resource创建完毕后可以将EIP写到ip_address.txt文件中
    6.将EIP写到本地
  • outputs.tf
    控制台输出,也方便后续资源使用该资源:
    7.控制台输出ip
  • 小技巧
    我们可以将整个的堆栈以图形化的方式展现:
yum install graphviz
terraform graph | dot -Tsvg > graph.svg
image.png
8.terraform构建栈
4.小结:

Terraform在Iaas基础维护方面的侧重点,只是对云平台实例级别的管理,如果要对实例内部进行更复杂的编排需要配合Ansible组件。下一章我们会详细介绍下Ansible相关内容~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容