Cloud Foundry:从开发到运维

简介: 转载自:http://cnblog.cloudfoundry.com/2013/04/02/534/ [译注]本文作者刘晓光   VMware 上海研发中心资深系统工程师。

转载自:http://cnblog.cloudfoundry.com/2013/04/02/534/

 

[译注]本文作者刘晓光   VMware 上海研发中心资深系统工程师。负责Cloud Foundry发布管理和cloudfoundry.com运维支持。关注Linux、虚拟化、Infrastructure as a Service等技术领域。

代码进入cf-release的过程

Cloud Foundry 是一个复杂的分布式系统。这样的系统部署和升级维护也比较繁琐。所以Cloud Foundry 开发出了BOSH用来管理这类复杂系统的部署和升级。BOSH将被管理的软件系统称为release。 Cloud Foundry 就是以BOSH release的形式发布的,它的地址是https://github.com/cloudfoundry/cf-release ,这就是我们所说的cf-release。在撰写本文时,最新Cloud Foundry release 版本为v127。

Cloud Foundry 由数十个组件构成,比如Router, Cloud Controller,DEA等。基本上每个组件都在自己独立的git repository中进行开发和版本管理。而cf-release作为一个独立的repository,和其它组件的repository是什么关系 呢?实际上cf-release通过git中的submodule引用了其它的repository。进入cf-release的src目录 (https://github.com/cloudfoundry/cf-release/tree/master/src),你就会看到哪些组件的 repository进入了cf-release,以及其对应的commit位置。Cloud Foundry 的每次发布,其实就是各个组件在自己的repository中向cf-release输出(bump)新的commit点,以使自己的新版本代码进入 cf-release中,再由BOSH工具对新的代码树进行打包,生产新的release manifest 文件的过程。

cf- release这个repository上的任何变更也是要经过Gerrit来审阅的。负责这个repository的审阅的工作是由SRE(Site Reliability Engineer)团队来承担的。SRE就是Cloud Foundry中的DevOps,负责线上环境cloudfroundry.com的部署、监控、故障解决,性能管理等工作。SRE 审阅时不会重复看那些已经在组件级repository上审阅和测试过的细节问题,而是从运维的角度,重点看这些组件的行为变更是否对线上环境造成负面影响,是否遵从了运维最佳实践等问题。

cf-release部署到cloudfoundry.com的全过程

细心的cloudfoundry.com的用户可能已经知道,cloudfoundry.com网站通常每周维护两次,时间分别是周三和周五的上午。 每次维护我们都会把最新版的cf-release推送到cloudfoundry.com网站。下面就给大家详细介绍一下整个部署过程。

每个新版本在正式部署前,都要经历Dev环境测试,Staging环境测试,然后才能部署到生产环境。

Picture1

 

1. Dev环境

在正式部署的两个工作日前,cf-release repository的更新会暂时截止。SRE开始在Dev环境中对当前最新的cf-release进行测试。Dev环境是一个小型化的Cloud Foundry开发环境,运行在vSphere上,大概有40到50个虚拟机构成。 保证每个组件都独立运行在一个虚拟机上。整个环境也是由BOSH进行管理。限于篇幅,这里不对BOSH的用法做详细解释。大家如果有兴趣可以参考 Cloud Foundry网站上的文章。

首先要创建一个新的cf-release。 用git pull同步一下cf-release repository最新的内容到本地。然后仔细检查一下git log,确保从上一个版本到现在的新的变更都在项目的发布计划中,并且明确这些变更带来的影响,以及是否要修改BOSH deployment manifest 文件。

cd cf-release

git checkout master

./update

git log

这些都清楚了的话,就将master的内容合并的built分支中,执行bosh create release命令创建一个新的release。

git checkout built

./update

git merge master

git push origin built

bosh create release

假设当前在cloudfoundry.com上运行的版本是v127(下同)。那么刚刚创建出的release版本号会是v127.1- dev。

首先把 Dev环境初始化成v127。对于目前的Cloud Foundry版本来说,要用到50个虚拟机。其中一些关键组件的部署数量和功能见下表:

Picture2

表1 Dev环境主要组件

用bosh upload命令上传这个新的release到DEV环境,修改deployment manifest 文件以采用新的release版本,当有组件的属性发生变化时还要在manifest文件中的properties部分做好相应的修改。然后用bosh deploy命令部署新的版本。BOSH会自动对比当前使用的release (v127)和即将部署的release(v127.1-dev)的差异,更新那些有变化的组件:

bosh upload release

bosh edit deployment

bosh deploy

部署完成后,执行前面提到的End-to-End测试工具Yeti,对当前的DEV环境做全面的测试。如果测试到任何问题,SRE会同相关组件的开发团队一起排查,找到原因并修复问题。如果发现是软件的bug,还要等修复bug后从头进行前面的整个过程。

2. Staging环境

Staging环境作为生产环境的版本验证和问题复现平台,在硬件型号、规模以及网络环境等各个方面都非常接近生产环境。在正式部署的一天前,SRE会在该环境中对cf-release进行测试。

如果前一天测试的release (v127.1-dev)在Dev环境中没有发现问题,这时候就要创建正式版(v128)了。执行bosh create release –final,就会生产正式版的release,版本号v128。releases目录下会创建出appcloud-128.yml文件,各个新的组件也会被打包并上传到http://blob.cfblob.com 上。 执行git push将新的yml文件上传,并在当前位置加一个代表版本号的tag:

git checkout built

bosh create release –final

git add releases/appcloud-128.yml

git commit -a

git push origin built

git tag v128

git push –tags

这时所有人都可以从GitHub的repository中的built分支看见这个新的release了。经过其他人(通常是另外一个SRE)确认该release可用后,就可以把它合并到master了。

git checkout master

git pull –rebase

git submodule update –recursive

git merge built –no-ff

git push origin master

这个时候,新的cf-release就可以被公众下载并在自己的环境中部署了。后面的Staging环境和生产环境的部署,用的都是这个 GitHub中的版本。

Staging和生产环境的部署都要由至少两名SRE一起完成。这样做一方面是可以分担工作量,但更主要的是避免人为错误的发生。在开始Staging环境的部署前,SRE会用一个脚本程序通过NATS向所有DEA发一个消息,获得并保存当前所有在DEA上运行的app列表。这样做的目的是为了与部署后的情况进行对比。如果app的运行状态发生明显变化,很可能是新版本部署中发生了问题。部署的过程与DEV环境类似,相同的部分这里就不再累述。

整个部署过程需要的时间依更新的组件多少以及这些组件的实例数量而不同。比如某个版本只更新了stager的话,整个部署十多分钟就可以结束。但如果新版本中有DEA的更新,则至少要几个小时了。说到这里,大家可能比较关心这么长的升级过程是否会带来长时间的系统停机。其实是不会的,BOSH采用的是滚动的升级方式,即每次只升级一个组件。每个组件有多个实例时每次只升级一部分。再加上组件设计时都考虑到了冗余性和平滑升级的问题。所以在整个部署过程中,系统基本上都是可用的。对于极少数单实例组件,其负责的功能也只会出现几分钟的不可用状态。

部署完成后,SRE会再导出当前在运行的app列表并与之前的列表对比。 如果没发现大的不一致,接下来会用压力测试工具对Staging环境进行15分钟的压力测试,并记录一些性能数据。这些性能数据有助于让我们了解各个版本对在性能上的差异。

同样的,如果整个过程遇到任何问题,SRE和相关开发人员又要一起努力了。由于第二天就要进行生产环境的部署,这时如果发现了问题,时间就会非常紧张。好在这种情况并不多,而且我们的开发团队也是非常给力,有问题通常能很快找到原因并修复。

3. 生产环境

由于前面做了这么多准备工作,生产环境的部署也会水到渠成。一般来说绝大多数问题都会在前面两个环境里被测出过了,所以到了生产环境部署的时候就会顺利很多了。部署过程大同小异,就不重复讲了。但其实Staging环境和生产环境还是不大一样,主要差异就在用户的app上。生产环境上跑的是用户真实的app,而 Staging环境上也有大量的app,却只是内部写的一些测试程序。为了尊重用户的权益,我们内部严格禁止将用户的app程序代码、数据甚至是log从生产环境导出到非生产环境。这就使得有些问题在Staging环境还是测不出来,非要到实际上线的时候才暴露出来。另外有些问题是要在程序运行了相对长的时间后才会暴露出来,所以部署完成也不能松懈。而下一轮新版本的部署工作也很快就开始了。

希望这些内容能对你了解Cloud Foundry社区和cloudfoundry.com有所帮助。希望能有更多的开发者关注Cloud Foundry,并参与到Cloud Foundry开发中来。

目录
相关文章
|
2月前
|
SQL 运维 自然语言处理
Dataphin智能化重磅升级!编码难题一扫光,开发运维更高效!
Dataphin重磅推出三大核心智能化能力:智能代码助手提升SQL开发效率;智能运维助手实现移动化任务管理;智能分析通过自然语言生成SQL,助力数据价值释放。未来将持续开放智能ETL、安全助手等能力,助力企业构建高效、稳定的数据资产体系。
296 0
|
3月前
|
人工智能 OLAP 数据处理
解锁数仓内AI流水线,AnalyticDB Ray基于多模ETL+ML提效开发与运维
AnalyticDB Ray 是AnalyticDB MySQL 推出的全托管Ray服务,基于开源 Ray 的丰富生态,经过多模态处理、具身智能、搜索推荐、金融风控等场景的锤炼,对Ray内核和服务能力进行了全栈增强。
|
5月前
|
运维 监控 数据可视化
一文拆解 YashanDB Cloud Manager,数据库运维原来还能这么“智能”!
传统数据库运维依赖人工,耗时耗力还易出错。YashanDB Cloud Manager(YCM)作为“智能运维管家”,实现主动、智能、可视化的运维体验。它提供实时资源监控、智能告警系统、自动巡检机制、高可用架构支持和强大的权限管理功能,帮助用户统一管理多实例与集群,减少人工干预,构建现代化数据库运维体系,让企业高效又安心地运行数据库服务。
|
5月前
|
运维 监控 数据可视化
从告警到巡检,YashanDB Cloud Manager 帮我省下一半运维时间
数据库运维常依赖人工操作,易引发业务问题。YashanDB Cloud Manager(YCM)改变这一现状:可视化实例管理、全栈资源监控、智能巡检、灵活告警、高可用保障、权限审计体系,助企业降低故障影响、提升DBA效率、强化安全合规、标准化运维流程。若你被数据库运维困扰,可尝试此国产平台。
|
6月前
|
人工智能 运维 安全
AI大模型运维开发探索第四篇:智能体分阶段演进路线
本文探讨了智能体工程的演进历程,从最初的思维链(智能体1.0)到实例化智能体(智能体2.0),再到结构化智能体(智能体3.0),最终展望了自演进智能体(智能体4.0)。文章详细分析了各阶段遇到的问题及解决策略,如工具调用可靠性、推理能力提升等,并引入了大模型中间件的概念以优化业务平台与工具间的协调。此外,文中还提到了RunnableHub开源项目,为读者提供了实际落地的参考方案。通过不断迭代,智能体逐渐具备更强的适应性和解决问题的能力,展现了未来AI发展的潜力。
|
2月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
2月前
|
人工智能 运维 自然语言处理
首个智能体模型实测:产品、开发、运维“全包了”
2025年,AI进入“动手”时代。智谱发布新一代大模型GLM-4.5,全球排名第三、国产第一,专为智能体设计,融合推理、编码与智能体能力,实现自主规划与执行任务。通过8个Demo展示其强大能力,涵盖网页设计、课件制作、小游戏开发等,展现其“带手的脑”特性,推动AI从实验室走向真实场景。
148 0
|
9月前
|
存储 分布式计算 Hadoop
【产品升级】Dataphin V4.4重磅发布:开发运维提效、指标全生命周期管理、智能元数据生成再升级
Dataphin V4.4版本引入了多项核心升级,包括级联发布、元数据采集扩展、数据源指标上架、自定义属性管理等功能,大幅提升数据处理与资产管理效率。此外,还支持Hadoop集群管理、跨Schema数据读取、实时集成目标端支持Hudi及MaxCompute delta等技术,进一步优化用户体验。
806 3
【产品升级】Dataphin V4.4重磅发布:开发运维提效、指标全生命周期管理、智能元数据生成再升级
|
10月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
467 2
|
11月前
|
运维 Java Linux
【运维基础知识】掌握VI编辑器:提升你的Java开发效率
本文详细介绍了VI编辑器的常用命令,包括模式切换、文本编辑、搜索替换及退出操作,帮助Java开发者提高在Linux环境下的编码效率。掌握这些命令,将使你在开发过程中更加得心应手。
131 2