很多开发人员应该是了解过运维发布相关的平台或实际操作过应用发布,但又通常不是十分熟悉。在一个初创公司,或者没有成熟的运维发布平台的公司,如果让你来搭建一套发布平台,你应该如何去抉择呢?

这里我简单介绍几种。

Tomcat + nginx

有不少公司在初期项目数量很少时有使用这种方式的,一两台云服务器,把项目打个jar上传上去,启动起来完事,主打一个简单便捷。其实这种方式在不少情况下还是不错的选择,并不是所有公司都适合docker、k8s那一套的,这样比较节省服务器资源,low是low了点,适应自己就行。

docker、docker compose

服务器上装个docker,然后把项目代码打成容器镜像,在服务器上运行镜像。

这种方式也有不少开发者在使用,代码打成镜像可以选用阿里云的容器镜像服务,有免费的也有收费的方式,指定代码地址编写Dockerfile即可打成镜像供服务器使用。

纯命令行形式的docker方式其实我不太赞成,毕竟没有可视化界面就很难把控服务的运行状态,以及启动、关闭等操作还得敲命令挺麻烦的,推荐使用portainer这种简易的容器管理界面平台进行管理。操作、查看日志都比较方便。portainer操作简单,功能也不多,基本就是docker的基本管理。

rancher1.6平台

rancher1.6是我长期使用的、也认为是非常适合于中小规模的公司作为企业发布平台,之前曾经写过多篇rancher的使用教程,虽然目前rancher官方已经停止维护1.6版本,而全面转向k8s的2.x版本,但是1.6依旧是可以使用的,目前直接docker pull rancher还是拉取的是1.6版本。

之前的rancher安装教程:安装配置Rancher管理docker-CSDN博客

rancher1.6采用自己的cattle编排方式,通过设置镜像地址的方式来启动各个容器,大家仍然可以采用阿里云容器镜像服务来进行镜像的制作,然后在rancher上添加服务、设置镜像地址即可。

rancher里面还有添加服务依赖的功能,可以将多个服务关联起来,从而进行容器间的服务调用而无需设置IP就能进行访问。同时里面还内置了负载均衡器,可以将服务暴露到外网,作为反向代理进行使用,类似于k8s的ingress的功能。

rancher用来管理规模不大,如50台以下的服务器集群,进行应用服务的容器化编排,其实是非常合适的。内置的编排方式cattle其实是很不错的,和k8s很类似,但整体的学习成本使用成本可比k8s简单太多了,没那么多概念需要理解,上手半小时就能直接进行运维了,而k8s光学习就得好几天。

对于规模不大的服务,可以选择rancher1.6作为发布运维平台。

k8s原生

这年头作为开发要是不会k8s感觉都不好意思跟人打招呼一样,无论多小的公司、三两个服务也得上k8s,对此我只想说,你开心就好。

技术很难,但在合适的场景下能做出正确的选择更重要,过度设计比不会设计更可怕。

目前k8s肯定是主流的运维发布首选,但在上k8s之前,建议还是先考虑考虑是不是有必要性,如果就没几个服务,也不要强行就上springcloud、dubbo之类的微服务框架,至少rancher1.6就可以搞定大部分的场景了。k8s和k3s差不多,有时上个k3s也可以。

这玩意自己搭建的话说实话有点麻烦的,尤其是原生搭建,不建议开发自行尝试,一来要好几台服务器,二来确实步骤多很麻烦,一上来就搭建k8s环境,网上搜很多教程,又搞不成功就容易把你劝退。

目前国内有几个比较成熟的一站式k8s环境搭建的方式,譬如kubersphere、rancher2、rainbond都提供了自己的快速搭建k8s集群的功能,大家访问他们的官网就能看到。如果是用的云服务,那么阿里云的ACK也是搭建好的k8s环境,这些都可以避免手工搭建k8s环境的困难。

如果你头铁,就是要自己在空的服务器上搭建,那么也可以尝试,仅学习即可,学几个命令,搞不定也没关系,反正日后大概率不会用原生的命令部署啥的。

kubersphere、rancher、rainbond

这三个都是开源免费平台,都是用来搭建、管理k8s集群的,但都侧重点不同。

如果你就是普通的开发,想快速的构建起k8s平台并发布运维项目,也不想去学习那么多的k8s的概念,什么deployment、service、ingress等等,也不愿意去学,那么rainbond非常适合你,Rainbond是什么? | Rainbond

它和rancher1.6类似,都是非常容易上手的平台,在自己本机就能搭建起k8s环境并进行发布、管理。也支持发布容器镜像、代码源构建、应用市场等多种来源的应用构建,也支持服务依赖(和rancher1.6的应用关联类似),整体还是比较容易上手的。其中服务间通信也提供了service mesh和k8s原生两种方式。整体我比较推荐rainbond,因为难度最低,对开发来说不需要懂k8s就可以快速上手。

而kubersphere和rancher2.x也都是比较流行的k8s管理平台,其中rancher还创造了k3s。这两个平台我都用过,但都有相当的难度。kubersphere基本上就是把k8s的各个概念组件给界面化了,你需要了解deployment、service等各个k8s的概念才能玩的转,而且查看日志很不方便,里面还需要手工编写一些k8s的yml文件才能发布启动,整体我感觉不适合新手开发。

rancher相对来说不需要手工写一些配置,但也是暴露了很多k8s的概念在里面,你还是需要懂service、ingress等,不然还是跑不起来。

kubersphere和rancher我理解就是将k8s的各个功能给界面化了,并且提供了快速部署起k8s集群的能力,都有相当的操作使用复杂度,对于开发人员来说,并不是很容易。

综上,对于一个尚未有完善运维发布平台的公司,而且后续也不打算招专门的运维人员的场景下,如果规模不大,机器也不多,我建议使用rancher1.6,如果稍复杂,并期望用k8s,我建议上rainbond。并且建议用阿里云的容器镜像服务来进行代码的打包镜像化,不太建议自建jenkins搞流水线那套,运维平台只负责发镜像搞服务关联即可。

Logo

鸿蒙生态一站式服务平台。

更多推荐