作者:菲克(邓洋杰)
一、 背景
在应用运维领域中,CI/CD已逐步演化成持续集成(Continous Integration)、持续交付(Continous Delivery)和持续部署(Continous Deployment)三个核心阶段,以支持更加复杂的大型系统建设。
CI依然代表应用开发人员的开发、测试、合并等自动化阶段,而CD已分化成持续交付和持续部署两个关联阶段,为云原生背景下的应用运维提供了更多的可操作空间。其中,持续交付在不同的阶段,都有相对应的事实标准,大致可分为“On-Machine”阶段,“On-Container”阶段以及目前的“On-CloudNative”阶段。
本文主要讲解一下SREWorks在持续交付阶段,镜像构建云原生化的解决方案,一句话概括就是:SREWorks在执行镜像构建时,按需启动一个Pod去执行镜像构建任务。
1. 发展阶段
• “On-Machine”阶段:交付应用往往以一个编译后能正确运行的语言包组成,比如Jar包等。
• “On-Container”阶段:容器技术的出现,此时,容器镜像Image作为应用交付的最终形态,解决了语言包对机器运行环境的强依赖,进一步提升了应用运维的效率。
• “On-CloudNative”阶段:是以“On-Container”为基础的,是前者在云原生时代的高级形态。“On-CloudNative”阶段最终交付物不仅包含最基本的容器镜像Image,还包含了一系列的运维特性,以支持容器编排等云原生场景需求。
2. 持续交付云原生化
云原生是以分布式和云架构为基础的,但其对各种技术架构提出了更标准化的要求。在云原生思想逐步扩展开后,云原生能为传统的CI/CD带来什么影响,成为SREWorks考虑的主要问题之一。
其中最基本的,我们希望持续交付可以基于底座资源池去做弹性构建(按需启动一个构建pod,构建完释放资源),而不用常置一台特定的构建机去做构建。
SREWorks团队在经过不断的探索实践之后,认为云原生化的持续交付应包含以下几个显著的特点:
• 资源弹性:根据构建需要从资源池申请cpu等资源,提高资源利用率。
• 安全性:实时动态地执行构建任务,有明确的归属和权限隔离管控。
• 免运维:不再需要管理特定的构建机器或进程,机器管理统一由底座集群完成。
• 快速交付:底座集群保证构建任务容器能正确调度执行,自动规避故障节点,快速响应构建请求。
SREWorks正是基于上述的几个点,逐步完成自己的镜像构建云原生化建设。