1、云原生简介
云原生,英文Cloud Native。字面直译为原生应用上云。
谈起云原生的发展历程,不得不提起:Pivotal公司和CNCF基金会。
Pivotal公司,一家低调的以技术立命、坚持开源的硬核公司。其最早于2013年提出云原生概念,并提出云原生4要点:容器化、微服务、持续交付、DevOps,为业内广泛接收。
CNCF基金会,云原生计算基金会,2015年成立,目的是为了引导和规范云原生技术的发展路线。其于2018年提出了云原生1.0版本定义。
其中,容器、服务网格、微服务、不可变基础设施、声明式API是云原生的代表技术。
从个人理解来看,更趋向于CNCF对云原生的定义。Pivotal公司对云原生的定义有点局限性,可能其定义时更偏向于公司的Paas产品。
2、DevOps简介
参考百度百科,对DevOps的定义为:
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营(Operations)和质量保障部门(QA)之间的沟通、协作与整合。它是一种重视软件“开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
这个定义是标准的,笼统的,可能读完后还是对DevOps没有一个直观的影响,下面通过一张图,来进一步阐述DevOps的内容。
首先,计划阶段:项目负责人发起功能开发计划;代码阶段:开发人员开始按照计划进行功能开发;构建阶段:功能开发完成后,需要构建应用打包;测试阶段:对应应用包交给测试人员进行测试;
发布阶段:测试人员将应用包发布到对应测试环境;部署阶段:测试验证没问题后,开始线上环境的应用更新。运营阶段:根据应用状态,作出一些运维变更,比如应用突然网络异常,需紧急恢复等。
最后是监控阶段,发布后的应用须有日志搜索、链路查询、告警功能等来保障应用的运行态。
3、DevOps产品能力
从如上DevOps的定义,我们可以看出DevOps的能力贯穿了软件开发~测试~上线~监控的全流程。
通过自动化串联研发过程中的各个活动,能打通企业内部各平台的能力数据,如测试平台、安全扫描平台等,最终高效完成应用的研发交付。
这里,将DevOps能力按3个维度进行拆解来规划建设,如下图:
在Dev研发域,有需求管理、项目协作、版本管理、应用构建、制品管理、测试管理;每个大项下有对应的目标能力。
在Ops运维域,有持续部署、监控告警、自助运维;持续部署项严格来说,也可以部分属于Dev研发域。
在Metrics效能度量域,有指标管理,工程师画像,效能分析与预警等。通过对应维度的指标度量,可以为项目研发过程中找到过程瓶颈,进而实现降本增效的目的。
如上,是DevOps产品建设能力矩阵图,具体的能力建设程度可以参考企业内部场景需求度。也可以参考中国信通院发布的《研发运营一体化(DevOps)能力成熟度模型》来建设。
4、DevOps平台应用架构示例
企业从0到1建设DevOps平台能力,按最小版本迭代原则一般遵循的路线为:
1、实现最基本的构建应用、发布应用能力,流水线引擎一般为jenkins;即为1.0阶段
2、实现流水线能力,具备高可用性和扩展性;即为2.0阶段
3、扩展流水线模板能力,增加扫描、测试、卡点等能力;即为3.0阶段。
4、增加度量统计,同时各能力指标对应信通院评级模型来升级建设;即为4.0阶段。
这里,以3.0阶段,分享一个具备一定可用性的DevOps平台应用架构:
系统说明:
接入层:有web控制台和OpenApi流量接入。
服务层:由流水线引擎模块、CI模块、CD模块组成。CI模块主要由一层服务,封装jenkinsApi来实现,底层由Jenkins集群执行,同时jenkins插件支持。
CD模块应用发布,如果是容器,以k8s-API来触发;如果是虚拟机或物理机,则以salt-stack或ansible或自建命令通道来触发。
代码动态扫描,主流有jacoco等,可进行二次开发jacoco来扩展覆盖率扫描功能。
存储层:由对象存储、noSql中间件等组成。
5、后记
云原生技术的盛行推进了DevOps技术的蓬勃发展,同时也给DevOps过程提出了越来越高的安全、稳定、高效要求。
在如何构造高性能、高可用、高安全DevOps平台能力方面,我们还有很多路要继续探索。