sealer发展历程

2021-09-08  本文已影响0人  sealyun

很高兴给大家介绍我的两个开源项目:

也会讲述一些我如何把开源与商业化结合的一些有意思的事~

从云原生说起

如果现在你的应用还没有跑在容器里,那确实应该反思一下了,互联网巨头的技术往往是风向标,他们落地容器是有它的道理的。

Docker出现之前,比如你要装个mysql,就需要关心环境是怎么样的,安装工具是啥,依赖工具有哪些以及一系列安装过程,我是真的见过装mysql一个星期装不上的公司,Docker把这一切封装到镜像中,此时不管你安装啥都是docker run ... 细节全部被屏蔽了,就和你的老板告诉你“我只想要结果”一样,你不再需要关心你不想知道的过程。

那为什么还需要kubernetes?Docker很好的解决了单个应用的封装问题,但是如今大部分应用都是分布式的,有非常复杂的组件依赖,组件之间如何协作都是问题。 所以kubernetes像是一个云操作系统,对下抽象计算/存储/网络这些资源,对上管理应用生命周期,帮助应用服务发现,管理应用配置等等。

脚本时代

我之前在一家TOP级的AI上市公司工作,虽然该公司有在用容器的,但是整个公司容器的普及率不到10%。我从事这个领域比较早,当时安装kuberentes非常复杂,一个6k多行的脚本在等着你,而且那时候官方还没有一个高可用教程。

所以我就写了个脚本,解决安装问题,后来一想我用的到别人应该也用的到,就脑洞一开把它放到了阿里云市场上:



一放不得了,发现火了:


image.png
这么个破玩意儿居然有很多人买,多的时候甚至一天有大几十人购买。 但是接着问题就来了,问题一大堆,几乎没有哪个一次性就装成功的,我的维护成本变的极其高。 image.png

我这个时候意识到,把东西做优质的重要性,否则就会完全陷入到无尽的售后答疑问题中,此时我决定彻底优化!

开源ansible版本

只是shell的版本得在每台机器上一通操作,这个体验显然不太好,那当时就想着只需要在主节点上执行一下就能把集群安装上,所以就开始写ansible play book.

然而,依旧还是有很多问题,因为首先sealos的很多用户就卡在了ansible安装上,需要先装python再装ansible再跑play book,还不一定能跑成功,就很烦,问题依旧没减少。

所以我先解决环境问题,把ansible放到了docker里,然而用户就得先装docker。。。 没完没了了。。。

所以必须改变,必须彻底重构,由此我完全用golang写了一个新的版本。

开源golang版本

这个版本在当时确实把安装做到了极致,诠释了什么是大道至简,一个新机器三条命令完全解决:

# 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
$ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos && \
    chmod +x sealos && mv sealos /usr/bin 

# 下载离线资源包
$ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz

# 安装一个三master的kubernetes集群
$ sealos init --passwd '123456' \
    --master 192.168.0.2  --master 192.168.0.3  --master 192.168.0.4  \
    --node 192.168.0.5 \
    --pkg-url /root/kube1.22.0.tar.gz \
    --version v1.22.0

这种东西哪怕是一个连kubernetes都不会拼写的开发者我相信他也能很快的把集群部署起来,这让我非常满意。

sealos有趣的商业化

很难想象sealos是一个拥有大几千付费用户的,我们把源码与资源包分开,资源包里是各种版本kubernetes依赖的二进制,镜像等东西,我们写了个网站把这些资源包放在上面售卖:


image.png

当然我们会提供一些免费版本供开发者做测试,学习什么的。
这也给各位做开源的朋友提供一种变现思路哈。

并不是广告,不指望这个东西能挣多少钱,但是我觉得开源与商业是左右腿,缺一不可,完美结合往往有意想不到的效果。

取之于民 用之于民

网站的所有收入会反馈给开发者,以形成良性循环,sealos非常有意思的一个事情是给sealos贡献几乎都是有偿的


image.png

我们会给每个issue挂上价格

开发者申请任务后可以提供支付宝账号:


image.png

当代码被成功合并后,机器人会自动转账给开发者:


image.png

从未止步

sealos在安装kubernetes这件事上几乎已经做到了大道至简稳如老狗,但是故事并没有结束,依然还有很多值得我反思的事:

我一度很重视用户是如何使用工具的,如何让用户用的简单,但是没有足够重视用户看不到的那一部分东西, sealos金玉其外,败絮其中

sealos代码现在回过头来看,简直一坨*,虽然它work的很好,但是代码结构之烂让它不重构就很难往下继续发展了。

只是安装个集群?格局小了

sealos取这个名字的时候,seal+os,我本期望它能成为云操作系统发型版,奈何它不够争气,在设计上先天不足,比如对mysql,dashboard等这些东西的支持就不友好。

从内往外看问题,而没有从外网内看问题

sealos显然用户定位是云原生生态开发者,这实际上相比广大的开发者并非一个很大的群体,需要提升自己的格局,从一个圈外视角去定义产品,这样可以有更多的受众服务为更多开发者产生价值。sealos在这点上局限了自己。

大胆重构,sealer诞生

sealer的设计哲学非常牛逼,是我从业以来最得意的作品,不仅在使用视角做了高度抽象,实现上也更优雅,每一行代码我都进行仔细review,是在工匠精神诞生的一个优质项目。

开发者想要什么

sealer的核心思想是封装,屏蔽掉那些你不想关心的东西,如:

这点上Docker的思想是很精髓的,那sealer就相当于把Docker的能力上升到了集群维度,集群封装的都是分布式软件,所以sealer我们称之为“集群镜像”,通过技术手段把整个集群打包,实现分布式软件的 构建/交付/运行。

比如安装一个kubernetes集群,可以简单到令人发指:

sealer run kubernetes:v1.19.9 \
    --masters 192.168.0.2,192.168.0.3,192.168.0.4 \
    --nodes 192.168.0.5 \
    --passwd xxx # ssh的密码

如何做到优雅的封装

受Docker启发,我们把kubernetes看成云操作系统,也采用了写时复制的分层技术,让用户可以通过一个叫Kubefile的东西自定义整个集群:

image.png
sealer build -t all-in-one:latest . 就可以build出一个包含mysql redis等服务的集群镜像出来了。

即使使用者完全不懂kubernetes也可以使用这个镜像把他想要的服务run起来:

sealer run all-in-one:latest -m x.x.x.x -n x.x.x.x -p xxxx

懂Docker的朋友可以对比一下Docker就很容易理解:


image.png

还有哪些有追求的事

总结

个人的开源历程就像一次打怪升级,从一个非常low的脚本一路迭代到各方面非常优秀的项目用了三年多时间,中间不断有新的思考和想法,并把这些想法落地。

集群镜像这个词我才提出来的时候有些人觉得比较虚,甚至比较忽悠,我用半年的时间把东西做出来并真的有客户在生产环境中落地,证明我的想法是对的。

sealos至今已经有4k+ star了,保持了快速的增长,sealer目前是个新项目,我坚信它有成为顶尖开源项目的潜力!

上一篇下一篇

猜你喜欢

热点阅读