云原生时代的DevOps平台设计之道( 二 )


云计算时代的兴起以虚拟化技术为基础 , 软件定义基础设施变得炙手可热起来 。运维人员通过建设并维护一套 IaaS 云平台,将计算资源进行池化 。开发人员按需申请自己需要的虚拟机,从而得到一个操作系统界面来进行交互 。与操作系统打交道,对开发人员依然是个巨大的挑战,在 IT 领域,操作系统就像一座漂浮在海上的冰山 , 看似只露出冰山一角,然而其庞大的知识领域“身躯”都隐藏在海平面以下 。和裸机时代相比较,开发人员和运维人员已经是两个完全不同的群体,开发人员已经可以将自己的大部分精力放在业务系统上了 。值得一提的是 , 对操作系统的掌控是不折不扣的运维领域技能 。
容器技术以及 Kuberentes 的横空出世,成为了云计算时代的分水岭 。软件定义基础设施的技术手段已经被发挥到了极致,并且成为了现阶段运维人员的标配技能 。运维人员通过建设并维护一套 PaaS 云平台,终于将操作系统这一座最后的“大山”从开发人员的身上搬开 。开发人员可以将更多的精力放在业务系统上了,除了他们依然需要学习容器技术和 Kubernetes  , 至少他们要学会如何面向 Kubernetes 编写业务系统所需的声明式配置文件 。运维人员也通过 PaaS 云平台得到了自己想要的能力,容器技术和 Kubernetes 为他们带来了弹性、便捷性的巨大提升 。
跟随时代的变迁,我得出了一个结论:从开发人员与运维人员的关系上来看 , IT 领域的演变,就是运维人员通过不断向上接手开发人员眼中“跟开发无关的杂活”,来不断为开发人员减负 。开发人员在得到了解放后,可以将视角更多的聚焦在自己开发的业务系统上,释放出自己的创造力 。
那么跟随结论中的趋势,解放开发人员负担的脚步绝对不会停止 。DevOps 的工作,就是以开发人员为用户群体 , 打造一套可以让开发人员毫无障碍的使用基础设施的“云原生平台“ 。
云原生是一种面向云设计应用的思想理念,充分发挥云效能,组织内 IT 人员相互协作构建弹性可靠、松耦合、易管理、可观测的云应用系统,最终目标是提升软件交付效率,降低运维复杂度 。相比上文中提到的 PaaS 平台 , 起码要能够避免开发人员去编写复杂的 Kubernetes 声明式配置文件 。
现有开源产品情况在云原生平台领域,已经有不少项目在深耕 。在这里我列举了三个各具特色的云原生领域的平台级产品:Rancher、KubeSphere、Rainbond,后续的具体设计思路中,也会关注已有产品的实现 。
这三款开源产品中 , Rancher 是元祖级容器管理平台 , 加入 SUSE 后,能够明显感觉在云原生生态领域不断发力,Rancher 在各个层次可以集成的云原生领域工具集已经非常丰富 。Rancher 专注于帮助 DevOps 团队面对多集群情况下的运维和安全挑战 , 从这一点来说 , Rancher 更偏向于运维人员的使用体验,而非面向开发人员提供更高的易用性 。
KubeSphere 是来自青云的 “面向云原生应用的 容器混合云” 。除了对 Kubernetes 集群内的各种资源的管理能力之外,Kubesphere 主打即插即用的插件式生态扩展能力 。
Rainbond 由北京好雨科技出品,从其介绍来看,它是一款主打易用性的云原生多云管理平台 。
降低业务部署难度诚实地讲,为现代开发语言开发而来的业务系统制作容器镜像并不是什么难以掌握的技能 。但是不可否认的是,绝大多数 IT 从业人员依然会将制作镜像这件事情归为运维人员管理,而不是开发人员要关心的事情 。
那么 DevOps 工程师就有必要考虑 , 如何在开发人员对容器技术一无所知的情况下 , 使之可以直接从代码开始部署业务系统 。
在这个方面,Heroku 是无可争议的先行者 。Heroku 是一个支持多种编程语言的云平台即服务产品 。在2010年被 Salesforce.com 收购 。Heroku 作为最元祖的云平台之一 , 从2007年6月起开发,当时它仅支持 Ruby,但后来增加了对 Java、Node.js、Scala、Clojure、Python 以及 PHP 和 Perl 的支持 。
开发人员在使用云原生平台时,只需要在界面中填写代码仓库的地址,对应的用户名密码等基础信息 , 就可以等待代码构建成为镜像 , 并自由的运行在 Kubernetes 云环境中去 。
现有开源产品也在这方面给予了一定的支持:
RancherKubeSphereRainbond实现方式通过集成 Epinio 项目,继而深入集成了Paketo Buildpacks 来实现源码构建提供定制化的基础镜像来结合用户代码构建项目基于 Heroku buildpack 定制的源码构建能力支持语言类型Java、GraalVM、Golang、.NetCore、Nodejs、PHP、Ruby、PythonJava、Nodejs、PythonJava、Golang、.NetCore、Nodejs、PHP、Python、Html静态使用体验全部命令行操作,使用复杂图形化操作,直接提供代码地址,构建产出镜像 , 进而部署业务图形化操作 , 提供代码地址即可完成构建与部署,构建参数可配置,自由度高更进一步的设计,是将代码的提交、检测、部署等流程都集成到 CI/CD 流水线中去,开发人员只需要进行代码的提交,后续的流程会自动触发完成,生成检测报告,并完成代码的上线部署 。而与之相关的第三方工具集,由 DevOps 团队负责进行维护,开发人员可以充分的发扬拿来主义——拿来用就好 。

推荐阅读