美文网首页
sealer发展历程

sealer发展历程

作者: sealyun | 来源:发表于2021-09-08 21:38 被阅读0次

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

    • sealos 把kubernetes安装做进一条命令
    • sealer 优雅的把整个集群整体打包,一键拉起所有服务

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

    从云原生说起

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

    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的核心思想是封装,屏蔽掉那些你不想关心的东西,如:

    • 你想要一个高可用mysql: sealer run mysql-ha:5.7 你不需要关心它是否跑在k8s上,你可以完全不懂k8s
    • 客户想要安装一个钉钉企业版:sealer run dingtalk:latest 这样客户才不需要关心钉钉用的数据库是mysql还是pgsql
    • 当然如果你想装kubneretes: sealer run kubernetes:v1.19.9 就像你docker run一个centos一样,给你一个k8s环境

    这点上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

    还有哪些有追求的事

    • sealer中我们为了性能自己写了对接公有云的driver,把云服务器申请性能从3min降低到了19秒
    • 前端我们完全使用rust+wasm去实现,这块目前是个非常新的领域,我们坚定认为wasm是未来趋势未来会有非常广阔的应用场景
    • sealer打包镜像时采用了透明的镜像缓存设计,让用户啥也不用修改就可以把docker镜像缓存到集群镜像中到处交付
    • 我们可以适配支持systemd的大部分主流linux系统
    • 国产化支持只需要使用不同的镜像即可

    总结

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

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

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

    相关文章

      网友评论

          本文标题:sealer发展历程

          本文链接:https://www.haomeiwen.com/subject/dyfcwltx.html