Linux基金会执行董事JimZemlin曾说道:“我见证了开源圈子的两大事件:一个是Linux的成功,一个就是Kubernetes和云原生的大爆发。开源是历史上最成功的全球创新推动方式之一,Linux已经成长为世界上最重要的软件平台,而云原生则在新时代以势如破竹之态爆发。”
年,随着云原生架构的相关讨论逐步热烈,云+AI已成为时代主流。在兴起的这股云原生潮流中,中国贡献巨大:中国的Kubernetes贡献者在全球排名第二,有超过10%的CNCF会员来自中国、26%的Kubernetes认证服务供应商来自中国;云原生理念已经被国内的开发者广泛接受,进入到企业践行的阶段。
百度智能云云原生团队年开始了Kubernetes方向的投入,对于Kubernetes社区的开源贡献,百度在年进入全球前10。但是纵观百度内部,主流服务是基于matrix的容器化部署,Kubernetes+Docker尚未得到成熟应用。在企业服务领域,基于Kubernetes+Docker的开源生态已经成为主流技术架构。爱番番携手基础架构部云原生团队,深度合作了公司内部服务基于Kubernetes+Docker部署的推进,将全部爱番番线上流量切换到Kubernetes,经过2周多的观察,运行稳定。
如果阅读此文的你是一名研发侧的同学,正好也在计划将产品的技术栈往云原生方向去升级,那么你可能会关心爱番番为什么会选择Kubernetes?谁来帮我搞定Kubernates集群?迁移的工作量大么?有什么收益?那么接下来,我们将现身说法,针对大家可能关心的问题做个概述。
1.爱番番为什么要选择Kubernetes在ToB这个方向上,我们一直强调“以客户为中心”、“技术为产品服务、产品为客户服务”,而Kubernetes则是技术达成为产品服务的基石。
随着爱番番业务的深化和推进的加速,原有技术框架暴露的一些问题越来越明显,我们从三个方面来阐述:
快速交付:
如何编排+模块的上线依赖并在1个小时内完成上线?
如何实现两周一迭代,一周两发布目标?
维稳降本:
如何实现长期保持稳定性4个9以上的目标?
如何减少上线期间的pvlost?
如何实现0+服务实例的全面可观察性与治理?
自研的部分微服务基础设施性能/稳定性/吞吐量存在不足,是该持续投入更多人力去改造还是想办法引入开源方案?
开箱即用:
如何实现爱番番(toB产品)多样化售卖需求?
如何规模化,可复制的部署与运维,降低环境差异与心智成本?
我们的答案是采用云原生架构,建设云上爱番番,减少重复造轮子,加速客户价值点交付。
Kubernetes+Docker的技术在业界已经非常成熟,CNCF有非常全面的云原生技术来支撑我们对于容器化、CICD、应用编排、监控分析等方面的诉求,基于已有的开源组件和结合公司内的基础设施,我们能以较少的研发成本快速提升基础技术的能力,以达到支撑产品快速迭代的目标。
2.爱番番和基础架构部协作方式合作的模式为基础架构部(INF)的云原生团队提供Kubernetes的技术研发和支持,爱番番进行服务的升级改造和部署。我们的合作大致分为2个阶段:
第一阶段:Kubernates的技术研发和集群部署,基础架构云原生团队完成Kubernetes适应内网环境的技术研发和集群部署。
第二阶段:爱番番服务部署和流量迁移,爱番番完成+个模块Kubernetes环境部署;按客户维度进行小流量,逐步完成%正式客户流量迁移。
.爱番番迁移Kubernetes方案迁移kubernetes面临的关键问题及解决方案。
.1多种类型和众多服务如何高效的部署难点:差异化的基础设施对持续交付能力的挑战基础设施:基础设施如何运维,保障高可用?镜像仓库如何管理?部署形态:如何零侵入业务的容器化?容器如何管理支持不同类型应用?应用管理:k8s平台上如何维护10+资源?应用如何快速部署回滚?CICD流:CICD流如何对接新的基础设施?CICD流如何进一步提升研发效能?方案:标准化,自动化,云原生的CICD流程名词解释:
agile:支撑百度敏捷开发的企业级持续集成平台archer:统一的部署协议规范适应内网环境的Kubernetes+Docker技术调研与方案设计,实现原平台/Kubernetes两套同时部署,保证服务一致性,提升研发效率。
为达到快速交付的目标,首先要完成研发全生命周期的标准化,需要制定统一的标准与规范,支持多种类型应用。为了实现标准化,爱番番结合公司持续集成平台,并扩展完成三个核心环节,实现全自动化的CICD流程。
统一打包:基于统一的脚手架创建标准的应用包,通过统一打包服务完成应用包标准化为公司的archer部署协议,可以无缝部署于其他平台。
统一容器化:将应用容器化的规则上移,避免容器化的规则散落在各个应用中,便于管理与维护。dockerimagebuild的规则文件与业务源码完全解耦,定义到CI的流程环节中,根据应用的元数据信息,选择不同的Dockerfile模板文件构建镜像,dockerimagetag的版本号根据pipeline的不同,识别git