无 IaC 不 DevOps

随着云计算的发展,这两年DevOps也着实火了一把,IT圈内人士的日常问候语都成了“你们团队DevOps了吗?”。DevOps相关工具、最佳实践层出不穷,甚至有些团队已经把它上升到了文化、战略层面。众所周知DevOps的核心之一是自动化,为了实施DevOps团队引入了各种各样的自动化工具,如下图。

这些玲琅满目的工具功能强大甚至相互渗透,导致大批开发人员迷失其中。统计发现好多用户拿一个工具干了所有的事儿,这是不推荐的。一般地,我们按照抽象级别把这些工具分如下几层。

云计算时代的DevOps已经远远不只是协同开发、自动构建、持续集成那点儿事儿。可以用Packer创建操作系统、开发环境的镜像,一次打包多次分发;用Terraform搭建云资源基础架构,一键部署、基础设施即代码;基于Docker构建容器集群,让开发者更关注应用本身;AnsibleCloud-Init对集群节点按角色进行配置和管理;用Jenkins等工具做持续集成和部署,减少项目风险,让团队作出快速响应。在不同的场景下,配合使用这些工具会起到事半功倍的效果。

接下来,给大家分享一个Terraform配合Cloud-Init使用的典型案例。

案例分析

某开发团队定期在阿里云上搭建集群跑UT测试任务。集群部署在VPC网络环境下。其中Master节点负责任务分发,Worker集群负责执行任务,最后由Master汇总结果并提交回GitHub。

准备工作(基础设施规划)

首先,网络结构我们推荐选择VPC网络类型的云资源,因为VPC网络本身是一个独立隔离环境,同时提供了灵活的网络规划和安全管理方式。用户可以通过规划IP网段、授信专有网络网段访问、配置安全组等策略构建自己的网络环境。

另外,本例VPC中的ECS需要访问公网,目前有三种方式

  • 给每一台ECS都绑定EIP,绑定之后既可以访问公网,也可以被公网访问。
  • 将一台绑定了EIP的ECS配置NAT 策略(配置Iptables),使其成为NAT Instance,VPC内其他的ECS可以通过此NAT Instance访问公网。脚本如下:
    net.ipv4.ip_forward=1
    sysctl -p
    
  • 创建NatGateway和带宽包,配置SNAT,让同一个IP的不同端口号映射到不同的ECS。

    这三种方案各有优缺点。方案一,给每一台ECS都绑定EIP不仅成本高还有一定的安全风险。考虑到每台Worker只需要短暂的外网访问能力,没有必要单独占用网络资源,本例采用方案二。不过在大规模的生产环境,推荐使用高可用的NatGateway产品,它适合对公网带宽需求量较大的企业。

操作步骤

  • 搭建物理资源

    • 创建VPC、ECS、EIP等云资源
    • 搭建VPC环境、配置安全组规则
    • ...
  • 安装依赖环境
    • 安装make
    • 安装make
    • 升级python
    • 安装git
    • ...
  • 运行脚本
  • 收集结果

手工方式面临的问题

  • 运维成本高

    往往部署一套测试环境是非常复杂的,涉及网络的构建、规格的选择、操作系统的选择、中间件的搭建等,这就导致需要更多的运维成本。另外,手动创建基础设施与服务器配置需要很高的时间成本,没有流程化和配置化的工具,整个过程无法追踪,出现问题的时候环境不能快速恢复,可能造成无法挽回的损失。不妨想象一下,当服务器数量在100台以上规模的时候,需要多高的运维成本。

  • 不可复制

    通常企业会在不同的Region搭建相同的基础架构,往往会按环境进行部署,还会对云资源进行划分和归类,对基础架构进行协同维护和版本追踪。面对这样的需求想要做到快速复制,手工方式毫无疑问是无能为力的。

自动化部署方案

我们希望从云基础架构搭建到整个应用程序的部署过程,能够做到全部自动化,来加快初始部署和持续集成的速度。本案的特点是属于短周期类的任务,云基础设施的架构比较复杂,应用部署相对简单。Terraform+Cloud-Init是一个不错的选择。

Terraform

Terraform 是来自HashiCorp家族开源的编排工具,目前支持阿里云、AWS、Azure、GoogleCloud、DigitalOcean等诸多云厂商。Terraform社区活跃,在GitHub上的Fork数将近3000,每周都会有大概200的Commit,代码贡献者达到了750人。另外,其官方提供完备的说明文档以及培训支持服务,解决企业的后顾之忧。

Terrraform还支持预览,它可以生成一个执行计划,帮助我们了解本次构建将会对资源进行哪些更新,以及资源之间的创建顺序。这会使编写模板变得简单和有趣。

对运维人员来说,Terraform是个很实用的工具。公司的需求一直会变,云服务的价格和服务也在变。阿里云的服务更实惠,那么就在阿里云一键部署一套,不再被AWS牵着鼻子走。前段时间S3故障了几个小时,中招的同学请举手

Cloud-Init

有的时候我们希望在server启动的时候能够自动对其做些配置,比如配置网络,写入文件,下载一些包并安装等等,阿里云ECS中提供了支持,就是Cloud-Init和User-Data。

这里首先要说一下Meta-Data API, 所谓Meta-Data就是关于虚拟机的元数据,提供这个API主要是为了能够获取机器自身的原生信息。如 hostname、网络配置信息、资源 InstanceId 等,其主要的形式为键值对。在阿里云主机上可以通过下面的地址查询 Meta-Data信息

curl http://100.100.100.200/latest/meta-data
curl http://100.100.100.200/latest/meta-data/private-ipv4

Cloud-Init 是一个在云主机启动时操作和定制云主机环境的包。它可以在云主机启动时自动执行,Cloud-Init 实现这些功能的基础是 User-Data,它提供给用户传入配置文件和脚本的能力。在阿里云主机上可以通过下面的地址查询 User-Data 信息

curl http://100.100.100.200/latest/user-data

简单的说,Cloud-Init可以在server启动的时候拿到主机信息(Meta-data)去执行用户脚本(User-Data)。不过,当前阿里云ECS执行User-Data还有一些限制,需要VPC类型的IO优化实例,具体请以官方文档为准。

实施部署

依据前面的基础架构规划编写模板,详细的编写说明请参考官方帮助文档,模板片段如下:

  resource "alicloud_instance" "master" {
    image_id = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
    instance_type = "ecs.n1.small"
    security_groups = ["${alicloud_security_group.group.id}"]
    vswitch_id = "${alicloud_vswitch.main.id}"
    instance_name = "master"
    io_optimized = "optimized"
    system_disk_category = "cloud_efficiency"
    password= "Test123456"
    depends_on = ["alicloud_instance.worker"]
    user_data = "${data.template_file.shell.rendered}"
}

如上描述了ECS的详细配置,VPC类型系列二1核2G的IO优化实例,实例在启动的时候会执行我们的user_data脚本,片段如下:

  #!/bin/sh

PostRouting=${vswitch_cidr}
SourceRouting=`ifconfig eth0|grep inet|awk '{print $2}'|tr -d 'addr:'`
echo ${worker_private_ip}>> /etc/sysctl.conf
echo 'net.ipv4.ip_forward=1'>> /etc/sysctl.conf
sysctl -p
iptables -t nat -I POSTROUTING -s $PostRouting -j SNAT --to-source $SourceRouting
iptables -t nat -I PREROUTING -d $SourceRouting -p tcp --dport 80 -j DNAT --to ${worker_private_ip}

您可以直接在我们官方仓库下载完整模板,然后切换到alicloud-ecs-nat目录执行命令terraform apply来体验一键搭建的顺滑感,如果遇到任何问题可以直接给我们提Issue。下图是根据模板生成的资源依赖关系图,是不是有种hold住全场的感觉?

最后

当然,对于更复杂的应用场景,需要综合运用Packer、Ansible、Jenkins等工具来协同作业,后续我们会逐一分享。另外,如果您对DevOps、CI/CD、IaC、虚拟化技术等感兴趣可以关注我们的GitHub

这不是广告

如果您对云计算、开源、DevOps、Docker、虚拟化技术有专长,欢迎加入我们!
您可以Github找到我们,也可以通过这个链接投递简历

时间: 2024-10-28 22:02:14

无 IaC 不 DevOps的相关文章

现代应用架构中的配置管理面临的挑战和应对之道

摘要:过去15年中,互联网产业开始蓬勃发展,基于互联网的各类应用大放异彩,而在信息技术上,企业应用架构也逐渐从传统的ERP,JavaEE集中式应用开始走向互联网.云计算.分布式服务化架构的转型,在这个过程中,数据中心及应用的配置管理这个领域也发生了深刻的变化.本文简单介绍了在现代企业应用架构中,传统的围绕分散的配置文件为中心的配置管理方式在面对诸如微服务.DevOps.容器服务.云计算等新技术形式下面临的挑战,同时会探讨如何通过独立的配置中心服务集中式管理数据中心中的所有配置来解决这一挑战,同时

报名还来得及!运维人的痛点,以及如何转型,尽在今晚——2017运维/Devops在线技术峰会

策划.准备和等待了两个月,2017运维/Devops在线技术峰会直播的"正日子"终于来了. 怀着激动,以及期待大家有所得的心情,我们将和你一起度过这个难忘的"升级"之晚. 今晚的日程 当然,如果你现在还没报名,现在还来得及--这是大会官网,戳此进入报名 报名用户,可以在会后第一时间得到所有学习资料,包括全部视频和PPT. 以下是本次在线技术峰会的背景: 近几个月,运维事件频发.从"炉石数据被删"到"MongoDB遭黑客勒索",

别让安全问题拖慢了 DevOps!

DEVSECOPS 所面临的挑战 敏捷开发和 DevOps 方法的出现使软件开发的速度与质量都有所提升,但它们不经意地也为安全机构增压不少.从前的安全策略是基于静态数据的,而在产品上线前才应用这些策略,或手动调整规则,会使设定策略的时间非常紧张,从而影响到发布产品的质量,增加出错的风险,拖慢整个 DevOps 周期.同时,使用 DevOps 配置工具来设定安全策略,也会使公司暴露于风险之中,因为这些工具都缺少临界控制,同时无法集成到安全架构的其他部分中去. CLOUDPASSAGE 公司的 HA

无人化运维离我们有多远?阿里智能化运帷平台深度揭秘

DevOps 的概念提出接近10年了,提升协作效率,降低开发成本,更稳健可持续的业务运营是DevOps的主旋律.阿里巴巴是如何开展DevOps的? 阿里集团基础架构事业群运维中台负责人如柏,在2017杭州云栖大会上,详细介绍了阿里运维体系的演进和在智能化运维方面的工作,希望能给大家带来一些启发和借鉴. 阿里巴巴是怎么看运维的? 阿里大致也是经历了这么几个阶段:从最开始的人肉运维, 到简单的工具.自动化, 到系统化和平台的过程, 自动化到一定程度后,开始探索智能化,无人化运维这些领域, 并在阿里的

独家:阿里巴巴DevOps落地实践玩法及思路解析

互联网时代,随着业务的迅猛发展,企业越来越希望通过实施DevOps来提升研发.运维等IT部门的效率,支撑业务发展.互联网企业如何利用工具让DevOps落地?传统企业如何提升研发效能,更快速的互联网化?这些都是企业面临的问题.   7月26日,阿里巴巴持续集成持续交付平台--云效,在深圳阿里中心举办了一场"业务为王时代,DevOps怎么玩?"主题沙龙,由阿里巴巴技术专家从云效新概念的提出,到阿里巴巴DevOps落地实践.到企业如何利用云效进行高效研发.再到阿里巴巴CI/CD之分层自动化,

阿里云专家理解的DevOps

2017运维/DevOps在线技术峰会上,阿里云平台研发高级专家连铭带来DevOps的相关演讲.本文主要从什么是DevOps开始聊起,接着对比了DevOps与传统模式的区别,并且列举了DevOps的难点和需要解决的问题,包括寻找平衡点.责权划分和制约考核,最后进行了简要总结.一起来了解下吧.   以下是精彩内容整理: 近几个月,运维事件频发.从"炉石数据被删"到"MongoDB遭黑客勒索",从"Gitlab数据库被误删"到某家公司漏洞被组合攻击.

DockOne微信分享(九十八):Insta360容器化&DevOps之路

本文讲的是DockOne微信分享(九十八):Insta360容器化&DevOps之路[编者的话]作为一个全景/VR创业公司,随着公司人员增加以及全球化方向转变,刀耕火种的CI/CD方式已经不能满足当前的需求.综合考虑当前的人员状况与技术架构的拓展性后,我们采用一套以阿里云为基础,Docker为核心,第三方服务为工具的开发.测试.部署流程,以及内部的代码提交,版本管理规范. 背景 我司是一家集硬件研发与软件开发为一体的互联网创业公司.2016被称为全景/VR元年,预示了机遇到来的同时,也注定了我们

让天下没有难做的研发:解读阿里CI/CD、DevOps、分层自动化技术

在互联网时代,产品快速迭代的重要性不言而喻.不管是传统企业还是初创企业,在提升研发效能方面都有很强的需求,如果能使用一套对项目流程管理和专项自动化提效工具,来支持项目的快速迭代发布,实现24小时持续集成.持续交付整个流程,不但可以提高研发效率,还能增强产品的竞争力! 1月12日,阿里巴巴旗下一站式研发提效平台--云效联手 InfoQ 在阿里巴巴西溪园区举办了一场旨在帮助研发团队提升研发效率的线下沙龙,邀请了阿里巴巴技术专家之岳.许晓斌.鲁小川和一佛,分享了阿里云效平台从生态规划,到 CI/CD

年度十佳 DevOps 博客文章(前篇)

如果说 15 年你还没有将 DevOps 真正应用起来,16 年再不实践也未免太落伍了.国内 ITOM 领军企业 OneAPM 工程师为您翻译整理了,2015 年十佳 DevOps 文章,究竟是不是深度好文,大家一起来看看吧! 本文译自 Hasan Yasar 的文章 the Top 10 Devops Posts of 2015. 2015 年 8 月,DevOps 博客 推出了自己的平台.DevOps 博客针对越来越多采用 DevOps 的企业(自 2011 年来占比高达 26%),提供各种