DevOps助力云原生应用开发实战分享

背景

Cloud Foundry 是业界比较“资深”的PAAS云平台,它不仅支持多种框架、运行时环境,还支持在多种云环境进行部署,包括:AWS, Azure, GCP, OpenStack等。本文分享,基于阿里云进行开发、运维的实战经验。

部署Cloud Foundry首先要用到的工具是BOSH。BOSH是用来部署和管理Cloud Foundry集群的工具。 它定义了一系列管理和操作云资源的接口Cloud Provider Interface,各个云厂商需要适配自己的Provider,这就是本文的开发背景。为了让大家对BOSH和CPI有一个感性的认识,下面简要的介绍几个相关概念。

BOSH的组件结构如上图所示, 这里简单说明一下,详细说明见官方文档

  1. Director会解析部署命令和模板,然后调用CPI模块去创建VM(ECS)实例,实例信息会写到Registry上。
  2. 每个VM上装有Agent负责与Bosh交互,包括:处理Director下发的任务、上报VM的健康状态等。
  3. Agent从Registry拿到当前VM的信息,包括:ID, IP等。
  4. Director/HM和VM之间的通信是通过NATS发布和订阅消息。

重点: 这里的开发任务就是实现阿里云CPI Provider。

开发

Bosh Alicloud CPI是阿里云对CPI GO版本的实现,目前已开源,欢迎试用。

Alicloud CPI实现了对云资源以及Cloud Foundry生命周期的管理,组件结构如下图:

CPI这一层的职责比较规整,包括:模板解析、参数校验、API调用、容错与重试、返回值加工。不过,完美集成到Bosh中并高成功率的部署集群是一件很复杂的事儿,需要大量的验证和测试。

CPI Provider开发流程分为: 代码实现、Code review, 单元测试,集成测试,部署Bosh验证CPI,部署Cloud Foundry集群,在集群上部署应用。

Why DevOps

项目特点如下:

  1. 从事开源项目开发的小团队,没有专门的运维同学,天然的开发即运维。
  2. 立项之初组内没有Cloud Foundry的专家,需要快速的交付到社区去验证,得到反馈之后快速的进行迭代。
  3. Cloud Foundry的部署极其复杂,走一次部署流程消耗大量的人力和时间成本。需要用工具来加快开发和迭代部署的速度,减少重复的手工成本。

为了保证代码质量的前提下快速的进行迭代开发、构建、测试、部署,那么就需要一套实践方法来支撑整个流程。

How to DevOps

工具介绍

Cloud Foundry社区提供了ConcourseCI Pipeline支持各个模块的CI/CD流程, 当然这里也可以选择其他方案,比如:阿里云的CodePipeline。

所谓Pipeline就是一系列手工工作的集合,这里包括:单元测试、构建Release包、集成测试、验收测试、端到端测试、发布正式Release包。简单示意图如下:

每一项任务就是一个Job, 每个Job由输入、输出和若干Task组成。Task在运行时会拉取镜像、启动容器、拿到输入、执行Task、输出结果。

拿一次CI举例,开发人员提交代码到Git仓库,Git会触发Webhook通知CI Server;CI Server会检查Pipelie配置,根据trigger规则触发对应的Job,并下发给CI Worker;Work解析Tasks,拉取Docker镜像启动容器,执行Task;最后Work收集每个Task的结果返回给CI Server。流程入下图所示:

接下来介绍一下在CPI Pipeline中每个Job所负责的内容,对于类似的项目有一定借鉴意义。 CPI Pipeline包括5个主要流程,分别是Unit Test, Build Candidate, Integration Test, Acceptance Test, E2E Test。下图是这5个流程示意图:

Unit Test

  • Source Code
  • Inputs:
    • bosh-cpi-src: 项目源代码
  • Task:
    • go get -v github.com/onsi/ginkgo/ginkgo 安装依赖
    • ginkgo -r -skipPackage integration src/bosh-alicloud-cpi 运行unit-test

Build Candidate

  • Source Code
  • Inputs:
    • bosh-cpi-src: 项目源代码
    • go-cpi-blobs: golang linux安装包,是运行CPI的基础依赖
    • version-semver: 用来做版本控制
  • Task:
    • bosh2 add-blob ../go-cpi-blobs/go1.8.1.linux-amd64.tar.gz go1.8.1.linux-amd64.tar.gz 加载blob依赖
    • bosh2 create-release --name $cpi_release_name --version $semver --tarball $cpi_release_name-$semver.tgz 打release包,根据版本号生成release包名称
    • mv $cpi_release_name-$semver.tgz ${DESC}/: 把构建物上传到远程地址
  • Outputs:
    • bosh-cpi-dev-artifacts: 用来存储构建物

Integration Test

  • Source Code
  • Inputs:
    • bosh-cpi-src: 项目源代码
    • stemcell: bosh light stemcell, 配置Region和ImageId的对应关系。 同一个镜像在各个Region的分发。
    • terraform-metadata: 用于测试的IaaS层基础环境,包括网络、安全组、负载均衡等。
  • Task:
    • 初始化测试数据
    • ginkgo src/bosh-alicloud-cpi/integration $(GINKGO_ARGS) -v 执行测试脚本

Bosh Acceptance Test

  • Source Code
  • Inputs:
    • pipelines: 准备进行BATs的配置文件仓库
    • bats: BATs测试框架的源码仓库
    • light stemcell: 维护各个region下镜像ID的配置文件
  • Task:
    • prepare-director
    • 从meta-data获取,部署Bosh所需要的IaaS资源信息
    • 动态生成用于部署Bosh的manifest文件 Source Code
    • deploy-director
    • 部署Bosh Source Code
    • 获取director信息,写入环境变量,供后面登陆Bosh使用 Source Code
    • run-bats
    • 动态生成manifest
    • 部署一个batlight Job节点
    • 执行bat测试

End-to-End Test

  • Source Code
  • Inputs:
    • bosh-cpi-src: 项目源代码
    • blobs: 编译Job所依赖的二进制包
  • Task:
    • 登陆Bosh
    • 把依赖包打入Blob
    • 打release包, 然后上传到Bosh
    • 上传light-stemcell, cloud-config
    • 部署Job
    • 执行run-errand任务

Build And Destroy Director

  • Source Code
  • Inputs:
    • terraform-statement: terraform共享状态文件, 用来远程存储terraform执行结果
    • main-tf: terraform编排模板
  • Task:
    • terraform根据编排模板创建IaaS资源
    • 对创建结果进行处理,生成JSON文件
    • 把terraform状态文件同步到远程

最后

欢迎PaaS生态上的合作伙伴和开发者参与Cloud Foundry社区的建设,也欢迎大家来阿里云构建企业自己的PaaS平台。任何问题和建议可以在Github上提Issue

时间: 2025-01-19 19:24:49

DevOps助力云原生应用开发实战分享的相关文章

专访Dan Kohn:阡陌交迭,云原生布局开源生态构建及深度应用

嘉宾简介 Dan Kohn,CNCF执行董事.在加入CNCF之前,他曾是Skymoon Ventures(一个关注半导体和电信基础设施领域的种子期风险资本公司)的普通合伙人,并曾在医疗保健公司Spreemo及广告公司Shopbeam等创业公司担任CTO,还参与创建和启动了Linux基金会核心基础设施计划.此外,Dan曾帮助管理Craig McCaw旗下的大量电信公司,并以担任NetMarket(早期互联网公司之一)的创始人兼首席执行官开始了他的职业生涯.1994年,他率先发展起了网上音乐商店,并

视频出炉:4月15日《阿里云RDS MySQL分支深度定制实战分享》

活动视频 <阿里云RDS MySQL分支深度定制实战分享> PDF地址:https://oss.aliyuncs.com/yqfiles/a5344b5961b367786a95620c636c4640.pdf 分享简介:阿里云RDS MySQL经过多年的积累,不断的进行性能优化,并定制了适合不同行业需求的功能,同时也向官方和社区贡献力量.本次主题主要介绍RDS MySQL分支的深度定制,包括功能扩展.资源管控.性能优化.数据安全.行业解决方案等. 分享者:赵建伟,现任阿里云数据库内核资深研发

DevOps和IaaS开启云时代的开发和测试

背景 在软件发展的几十年历程中,人们一直在孜孜不倦地追求用更快的速度交付更高质量的软件及服务.无论是不断革新的软件工程思想,还是持续优化的编程语言及工具,亦或是纷纷出现的可复用开发.测试框架,无不大大提高了整个软件开发及交付的效率.但是,与此同时,软件系统复杂度急速上升,可靠性要求越来越高,这让软件快速交付依然非常具有挑战.尤其是进入互联网和云计算时代,市场竞争异常激烈,人们对于软件交付的周期已经从原来的以季度.年度为单位缩短到以天计算,以便在市场中快速试错,找到真正的用户需求.这些都给传统的软

《AR与VR开发实战》——2.8 云识别

本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.8节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 2.8 云识别 在开发项目的过程中,当我们需要将识别图放置在服务器后台而不是App内部的时候,需要使用Vuforia的云识别功能,在本节中,我们将介绍Vuforia云识别的实现步骤和方法.1.创建License Key登录Vuforia开发者官网,点击Develop,在License Manager下面创建一个License K

云存储 之 OSS实战进阶分享

摘要:本文的整理自2017云栖大会-成都峰会上阿里云产品专家陆晶丹的分享讲义对象存储(Object Storage Service,简称OSS)是面向互联网的分布式存储服务,非常适合用来存储非结构化数据,比如视频.图像.日志.文本等各种类型的文件.不仅简单易用,稳定可靠,而且强安全,低成本. 在2017云栖大会-成都峰会上,阿里云产品专家陆晶丹做了云存储之OSS实战进阶的分享.与相同容量的硬盘相比,云存储(OSS)有着诸如:服务高可用.文件个数不限,支持高并发,储存容量无限,支持高并发,集成数据

云原生(Cloud Native)- 移动App研发新范式

什么是云原生(Cloud Native)App 云原生的话题近期异常火热,对于它的概念,大家也有不同的解读.从我个人的视角而言,云原生代表了一种应用构建的方法论:如何最大程度地利用云计算服务模型的优势低成本.快速地构建一款弹性的应用.本质上而言,云原生的研发模型旨在降低业务的技术风险,让开发者的形态更单纯.专注: 所有的运行环境透明化,按需扩展: 所有的研发流程流水化,高效交付: 所有的基础设施服务化,按量付费: 云原生应用 我们通常意义下的云原生应用意指传统的后端应用,Container.Mi

利用Docker轻松实现云原生应用 - 高可用架构设计

本文为利用Docker和容器服务轻松实现云原生应用系列的第一篇 高可用架构设计(本文) Spring Boot + Redis分布式会话 最近对应用迁云的讨论很多,很多用户对云环境中的应用架构和运维方式还不了解.直接利用云服务器替换自有物理机并不是使用云的正确姿势. Cloud Native Application(云原生应用)是当下一个热门名词,简单而言就是针对云计算的特性,来设计应用架构,并优化应用的交付.运维流程.Linux基金会旗下的云原生计算基金会 CNCF(Cloud Native

项目DevOps研发云CI实践之路

本文讲的是项目DevOps研发云CI实践之路[编者的话]DevOps是Develop与Operations的缩写.DevOps不是凭空冒出来的,是我们持续集成思想的延伸. 使用敏捷或其他软件开发过程与方法,项目要求加快产品交付的速率,虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍,都促使我们不断向DevOps方向发展. 因此,现在的业务开发,对传统的CI提出了更新更高的要求,借助于云技术,我们可以在DesOps趋势下实现从传统CI向云化CI的演变. 一.项目痛点 笔者所在项目在敏捷推

云原生:云计算时代命题之终极解决方案

Cloud Native?云原生?很多人一看到这个词就懵了,到底什么是云原生? 云原生这个词其实由来已久,IT行业永远也不缺乏新概念.2015 年,Pivotal公司的Matt Stine提出Cloud Native这一概念,并结合这个概念包装了自己的新产品Pivotal Web Service和Spring Cloud.在Matt Stine所著的Migrating to Cloud Native Application Architectures一书中,他对云原生的概念进行了详细的阐述.该书