阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

使用 Terraform 与 Consul 自动化现代数据中心

  • 2015-05-25
  • 本文字数:2493 字

    阅读完需:约 8 分钟

2015 年 CraftConf 大会上, Mitchell Hashimoto 提出,当前的提供(provisioning)和配置(configuration)工具不足以成为“现代数据中心”的编排工具。现代数据中心的特点是敏捷和弹性,并为部署其上的应用提供所需的“服务”,如计算资源、DNS 和可跨不同厂商平台的 CDN。Hashimoto 介绍了两款 Hashicorp 公司的工具, Terraform Consul ,可用于在这些有挑战性的环境中提供自动化。

Hashimoto 是 Hashicorp 公司的创始人,同时也是 Vagrant Packer 两个项目的领导者。Hashimoto 首先回顾了数据中心技术的历史。从企业的角度来看,一个典型的数据中心的资源使用是从单物理服务器发展而来的,经历了使用多个裸物理服务器,并最终发展成为使用多个虚拟机实例。这一进化的最新趋势是走向容器化。配置、部署和维护的复杂性一直随着这一演进而增加,人们对自动化的需求变得极为重要。 CFEngine Chef Puppet Ansible 等工具的出现,正是为了满足这些原始需求。

Hashimoto 说,随着公共云和私有云技术的流行,我们现在运作的“现代数据中心”面临着新的挑战。曾经被集成在核心基础设施堆的技术,现在转向以服务为基础的产品,例如,DNS 的 CDN 和数据库。企业也越来越多地使用多个不同厂商的产品来构建自己的基础架构平台。这两个变化在传统配置的基础上,增加了额外的复杂性,Hashimoto 认为,当前的工具不能满足这种要求:

当你想要搭建你的应用程序时,你尽可编写足够多的 Chef 和 Puppet 自动化脚本,但是如果你没有一个自动化的方式来搭建所有需要的服务,那这有什么意义呢?你的应用程序将无法正常工作……

数据中心的核心工作通常包括获取(acquisition)、提供(provision)、更新(update)和销毁(destruction)资源(比如服务器、数据存储和负载平衡器等)。回首过去,这些进程是缓慢的,而结果是相对静态的,但是现在这些活动是快速的,并且输出是弹性可伸缩的。例如当我们要提供计算资源的时侯,这将一目了然。对于传统的数据中心来说,必须购买物理服务器、上机架、配置,并部署为一个固定的单位。然而,对于现代数据中心来说,通过调用 API 获得计算实例,指定启动时的相关配置即可,并且实例通常可以就地水平扩展,或者很容易为水平扩展添加多个实例。

Hashimoto 认为,手动是无法利用起现代数据中心所提供的速度和弹性的——我们必须实现自动化。自动化的现代数据中心的需求体现为:

  • 一条命令部署
  • 弹性分布式系统
  • 自动伸缩、自动健康监测
  • 经过知识梳理获得更好的团队合作

Hashimoto 介绍了 Hashicorp 的 Terraform ,这一款可以有效地构建、结合并启动跨数据中心和不同供应商的基础设施的工具。例如,Terraform 可以启动一个 Amazon Web 服务(AWS) EC2 计算实例和一个 DigitalOcean Droplet 计算实例,然后通过访问 Dyn DNS 服务配置这些实例。Terraform 使用人类友好的文本格式,声明式定义基础设施,而且 Terraform 模块能够执行指定的较低级别的配置操作。

Terraform 可由“terraform apply”一条命令来激活,可以使用“terraform plan”命令来预览活跃的实例。该命令的运行输出是一个有序列表,描述了声明式定义的当前基础设施的状态变更。同时,还能表明变更是就地执行的,还是销毁的性质的(例如,重新启动服务器)。这个信息可用于确定操作是否适用于特定的时间点,例如,维护窗口是否打开。

plan 命令的输出也可以保存到文件中,以便日后决定执行基础设施的变更。Hashimoto 认为,预览基础设施变更的能力是 Terraform 的最重要的特征之一。可以在目前开发的工作流程中,组合基础设施代码的变更和配置计划,如创建 pull 请求、审查 diff 和接受变更。

Hashimoto 讲到,在 Terraform 出现之前,运维团队负责管理生产环境的技术栈是令人难以置信的,因为他们需要深刻地理解当前云平台、确定当前基础设施的状态,并且计算出由此产生的状态转换的结果。 Hashimoto 认为,运维工程师和 DevOps 工程师希望能在技术栈之上工作,像 Terraform 这样的工具可以实现他们的愿望,在很大程度上,这同很多开发工程师已经从汇编语言转到第三代编程语言上工作的情境类似。

这就是我对核心运维工程师与应用运维工程师之间的区别的定义。 在每家公司中都有这样的运维工程师,他们知道如何部署一套高可用的数据库集群,当然也有不知道这些,但是想要知道如何去搭建高可用数据库集群的运维工程师。我们可以选择教他们如何去具体实现,或者为他们提供抽象的封装 [一如 Terraform 所提供的]。

演讲的第二部分介绍了 Hashicorp 的 Consul ,这是一款以跨数据中心、高可用的方式提供服务发现、配置和编排的工具。Hashimoto 表示,Consul 可以用来回答一个企业的基础设施中,诸如下列这些问题:“服务 X 在哪里”、“服务Ÿ的实例是否健康”、“当前正在运行的服务是什么”、“服务 Z 的配置是怎样的”,以及“在我的平台上是否还有其他人在执行操作 A?”。

Consul 通过 DNS 或 HTTP API 提供服务发现功能,同时支持跨数据中心的内部服务或外部服务的发现。 使用shell 脚本实现了健康检查,并允许创建自定义的服务验证协议。 Consul 还提供了高可用的键值对存储,由此可以暴露一致的存储值,用于配置参数的调优,而不必非要执行配置管理工具。 可调优的操动实例包括指定服务的位置、指明系统处于维护模式,或者设置服务的 QoS 参数。

Hashimoto 说,Consul 还提供了一套编排原语、通过 UDP 协议跨数据中心广播异步“事件”、
通过 TCP 协议让指定的计算机同步执行“exec”指令,以及通过实现长轮询、react、事件机制或者其他操作实现定制化的监控。

关于 Mitchell Hashimoto 中 CraftConf 的演讲,“自动化现代数据中心,从开发到生产”,包括视频等更多详细信息,请参阅大会网站 Terraform v0.5 的下载地址在 Terraform.io 网站,Consul v0.5 的下载地址在 Consul.io 网站。

查看英文原文: Automating the Modern Datacenter with Terraform and Consul


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-05-25 10:3710349

评论

发布
暂无评论
发现更多内容

WEB开发人员应该知道 10 个 Docker 命令

devpoint

Docker 前端开发 docker image Docker 镜像

一个比一个牛皮的5个杨辉三角特性!

风铃架构日知录

Java 程序员 算法 IT 杨辉三角

系统风险处置

agnostic

风险系统 业务风险 操作风险

天翼云第八代云主机助力企业攻克上云“大象流”加密处理业务难题

Geek_2d6073

读懂深度学习,走进“深度学习+”阶段

脑极体

深度学习 百度 #飞桨#

【架构设计】你真的理解软件设计中的SOLID原则吗?

小小怪下士

Java 程序员 架构设计

SAP 交货单与HU指派关系数据不一致问题的解决方案

SAP虾客

SAP 公司间STO 外向交货单 HU DEBUG改表

Tapdata 杨庆麟:实时数据如何赋能制造业,实现业务卓越与持续发展?

tapdata

2022年终总结:今年学完的付费课程

石云升

学习 知识付费 年终总结 1月月更

PyCharm创建Jupyter Notebook

IT蜗壳-Tango

Python

详解ThreadLocal

threedayman

兼容东西,贯通南北:超聚变的“四水归堂”

脑极体

科技 算力 超聚变

Tapdata Cloud 场景通关系列:数据入湖仓之 MySQL → Doris,极简架构,更实时、更简便

tapdata

#45 A002-B端产品经理小A故事-走进客户2

非典型产品经理笔记

个人成长 产品经理 b端产品经理

tinyrpc源码阅读

骑牛上青山

golang 源码 RPC

photozoompro2023下载激活教程

茶色酒

PhotoZoom photozoompro

架构训练营第10期模块四作业

Geek_4db2d5

【Redis实战专题】「性能监控系列」全方位探索Redis的性能监控以及优化指南

洛神灬殇

redis监控 Redis优化 redis性能

2023-01-14:给定一个二维数组map,代表一个餐厅,其中只有0、1两种值 map[i][j] == 0 表示(i,j)位置是空座 map[i][j] == 1 表示(i,j)位置坐了人 根据防

福大大架构师每日一题

算法 rust Solidity 福大大

#46 A003-B端产品经理小A故事-你是在画猫吗?

非典型产品经理笔记

个人成长 产品经理 b端产品经理

PowerShell 中运行 maven 参数无法识别

HoneyMoose

GEAR框架: Tractian的敏捷工程文化

俞凡

敏捷 大厂实践

总结一下经典机器学习算法

风铃架构日知录

Java 程序人生 算法 后端 IT

Pytorch 基础-tensor 数据结构

嵌入式视觉

Tensor ndarray 张量的基本操作 view函数 reshape

模块九-设计电商秒杀系统

李某人

架构训练营

架构训练营-模块三作业

Sam

架构实战营

Date & Time组件(上)

智趣匠

Android Studio DATE类型 time

【架构设计】你真的理解软件设计中的SOLID原则吗?

JAVA旭阳

Java 架构

Tapdata Cloud 场景通关系列:将数据导入阿里云 Tablestore,获得毫秒级在线查询和检索能力

tapdata

Alluxio 2022技术干货年终大赏

Alluxio

大数据 分布式 案例 Alluxio 数据编排

David Murray 加入 VeraViews 担任需求总监

鳄鱼视界

使用Terraform与Consul自动化现代数据中心_亚马逊云科技_Daniel Bryant_InfoQ精选文章