作者:黑夜总好漫长Q | 来源:互联网 | 2023-10-12 11:12
2月9日,在云栖计算之旅线下沙龙上,阿里云容器服务团队的高级研发工程师mmddy分享了《基于容器技术的DevOps探索》。首先介绍了DevOps和CD,接着分析了Docker如何打
2月9日,mmddy,高级研发;阿里巴巴云容器服务团队d工程师,在云起计算之旅线下沙龙分享《基于容器技术的DevOps探索》。首先介绍了DevOps和CD,然后分析了Docker如何打破传统的CD壁垒,最后说明了如何从零开始构建连续交付系统。
回顾:https://yq.aliyun.com/edu/lesson/play/493
开发和持续交付
DevOps
在一个相对成熟的软件和服务交付团队中,从技术上讲,主要分为三个组成部分:开发、测试和运维。开发团队更注重代码是否能运行,运维更注重系统上线后是否能稳定运行,于是差距就产生了。DevOps似乎解决了这个问题。DevOps的作用是将这三个部分紧密连接起来,提供一条从软件开发到质量保证再到技术运营的汽车生产线,加强不同角色之间的沟通与合作,从而减少资源浪费,提高质量,快速将产品推向市场,快速有效地将一个想法转化为价值,交付给客户。
激光唱片
如何实现DevOps?我们定义了连续集成,连续集成是一种方法。光盘有三个要点:自动化、持续有效的反馈。图中从左到右是从代码到交付的过程。
CD过程中可能会出现几个问题,可以概括为三个方面:环境一致性,开发者之间的环境不一致性;版本管理问题;快速响应(发布、回滚)问题。
那么,问题的根源是什么呢?因为开发人员只提供代码和代码依赖关系,并且保持站点运行需要运行环境而不是代码和运行环境之间的依赖关系。
Docker是如何打破传统CD壁垒的?
Docker是最适合实现DevOps的工具之一,甚至改变了软件交付的方式,可以有效解决持续交付过程中遇到的问题。
阿里巴巴云集装箱服务
阿里巴巴云容器服务在资源层面有集群和节点,在内容层面有组合模板和图片,在应用层面有应用、服务和容器。
完整的集装箱化连续交付流程
在传统的开发过程中,开发人员的代码包括逻辑、应用和代码依赖包,而我们的代码将添加Docker File和Docker Compose来制作和传输容器。代码提交成功后,代码服务器会通知CI服务器,CI服务器会拉代码进行代码打包,然后进行单元测试。如果单元测试失败,有效的反馈会立即告诉开发者。如果应用程序被认为包含应用程序,我们将根据代码给出的Docker文件创建映像,服务器将拥有配置的使用权,映像将被推送到阿里巴巴云容器,代码的可交付结果已经生成。
在部署阶段,如果进行了集成测试或回归测试,并且采用了测试环境,则使用Compose模板来描述如何在部署期间进行部署。用Jenkins丰富功能,用各种插件下拉映像部署到应用环境中,实现了代码提交到整个部署过程的变化。
Jenkins2.0
Jenkins版本包含一个新的管道建设和交付系统。流水线的设计理念基于Groovy DSL,实现一套灵活可扩展的连续发布(CD)工作流,将原本在单个节点或多个节点独立运行的任务连接起来,实现一个复杂的发布流程。此外,Jenkins支持直接从代码库中读取脚本。
从头开始构建一个持续的交付系统。
阶段是整个连续交付过程的明确定义。是自己写的,单元测试结果也能完美显示。每个阶段的时间消耗可以直接从日志中读取,也可以将软件打包的结果存储在本地。
持续交付流程设计
从机的动态生成和作业的最终销毁都是通过插件实现的。我们还支持共享存储OSS,上传战报包,镜像存储要交付的东西,部署阿里巴巴云自主开发的插件,调用容器服务的API。
詹金斯大师和经纪人
docker中的Docker表示代理将使用Docker进行图像打包。如果在詹金斯身上执行十个项目,它将
涉及到在所有项目中安装agent非常消耗资源,所以我们采用父子结构,通过透传的方式,可以使用宿主机上Docker的agent服务器执行镜像构建和打包,做到自动化流程内的隔离。
发布策略
容器服务现在支持两种发布方式:
一是rolling update,依次停止老容器,启动新容器,整个过程自动化,无需用户手动操作,适合测试场景,适合于多副本的应用发布;一是蓝绿发布(热部署):不会停止老容器,为新服务启动新容器,需要用户设置路由权重,实现不同版本应用的上线、下线,适合于版本的快速发布,不会停机影响用户。
未来还会支持金丝雀发布(灰度):不会停止老容器,为新服务启动新容器,需要用户设置路由权重,实现不同版本应用的共存,支持A/B测试,适合多方案选择。
关于云栖计算之旅
云栖技术之旅,是由阿里云云栖社区主办,整合了阿里集团内部多个领域顶级技术专家与技术资源,通过线下技术培训的方式,为热爱技术的朋友提供一个交流&分享技术观点、碰撞精彩火花的平台。
第1期精彩回顾:https://yq.aliyun.com/articles/62414
第3期预告(12月23日前端专场):https://yq.aliyun.com/promotion/140
关于阿里云容器服务
阿里云容器服务(Container Service)提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过Docker容器来进行应用生命周期管理。容器服务极大简化了用户对容器管理集群的搭建工作,无缝整合了阿里云虚拟化、存储、网络和安全能力,打造Docker云端最优化的运行环境。容器服务提供了多种应用发布方式和流水线般的持续交付能力,原生支持微服务架构,助力用户无缝上云和跨云管理。
更多深度文章,欢迎关注云栖社区:https://yq.aliyun.com/cloud