作者: 鲍江南
引言
在 2021 年四月左右,我有幸在 sealer 启动初期了解到其相关工作,并且不久后就作为初始的几位开发同学之一,加入到了 sealer 的开发工作中。
本文,我将回顾个人参与 sealer 开源项目的机缘巧合,参与过程中的挑战,以及从中获取的所悟所感,写下一段文字进行分享,希望对开源新人有所帮助,能够激励想参与开源工作但还未踏出第一步的同学。
个人简介
各位读者好,本文是我发布到阿里云的第一篇文章,所以我先简单进行下自我介绍。
我是鲍江南,是 sealer [ 1] 的 maintainer。本科毕业于中南大学图灵班。现就读于浙江大学,是 SEL 实验室的一名硕士研究生。目前主要研究方向是混部集群调度。
GitHub: https://github.com/justadogis...
旅途的开始
刚开始研究生生活的我,别人看来可能是踌躇满志、蓄势待发,但当时的我有种莫名的焦虑与迷茫。读研时,我的实验室是浙江大学的 SEL 实验,主要的研究领域是云计算,因此在云计算工业界,我们有众多的师兄师姐们。当时我来到了一家高新科技云计算公司“谐云科技”担任云原生研发实习生,谐云科技与阿里云有众多前沿云原生合作项目,核心团队成员来自于浙大 SEL 实验室。在机缘巧合之下,我进入了谐云&阿里云云原生项目组,认识了在阿里云云原生团队的实验室师兄-孙宏亮,又通过他,认识了 sealer 的发起人-方海涛。他们都有很丰富的开源经历。在闲聊时,得知宏亮师兄曾经是 Docker 的 maintainer 时,我视宏亮师兄为标杆,作为我努力的方向,这应该是多数人确立目标的方法吧。其中有一段对话令我印象深刻,师兄问过我“今年(2021)最想做到的事是什么?”,我的回答是“在开源方面留下一些痕迹(其实在当时,我自己并未想清楚做开源是为什么)“。现在想来,可能就是”焦虑“+”个人规划不清晰”产生的“病急乱投医”的简单想法。但不管如何,当时也给自己定下了初步的目标,我就抱着 “Make it happen” 的态度全心地投入了。
大概在 2021 年 4 月的时候,我加入了 sealer 开源团队,与几位同学着力于开发 sealer(当初叫集群镜像)的核心能力。
责任与挑战
sealer 是一款由阿里云开源的云原生工具,旨在帮助分布式软件进行更好的封装、分发与运行。如今,由于其设计理念的新颖,行业用户基数的增长,sealer 已经捐给 CNCF 基金会,成为一个 CNCF的 sandbox 项目,朝着更广阔的行业标准迈进。
软件诞生之初,往往是混沌伴随着希望。大目标的背后,需要 sealer 团队解决太多的技术问题,如用户接口、镜像格式、分发模式、运行效率,软件架构等等。最初的 sealer 开发分工中,我主要负责的部分是镜像模块,包含集群镜像缓存、集群依赖容器镜像缓存、集群镜像共享等能力。
集群镜像缓存:如何通过集群镜像层的复用,大幅提供镜像构建效率。如 docker build,每次 build 会首先查找之前本地缓存的镜像 build 内容,复用 build cache,减少硬盘占用与提升镜像构建效率。
集群依赖容器镜像缓存:如何将集群依赖的所有容器镜像,在用户无感知的情况下进行缓存。早期, sealer build 构建集群镜像时,需要真实拉起集群,待所有负载正常启动后,再打包集群镜像。其中,很重要的一个部分是缓存所有该集群依赖的容器镜像,使其可打包。
集群镜像共享:任何人都可以如同使用 docker 工具使用 sealer,push/pull/save/load 等方式共享集群镜像。
第一个技术挑战
在 sealer 的众多挑战中,我印象比较深刻的是集群依赖容器镜像缓存与私有仓库的容器镜像代理;记得是海涛哥找到我,说想让我负责 sealer 的一个核心功能,即 “sealer 如何支持在构建过程中,在用户无需提供额外信息,用户无感知的情况下,缓存所有在构建过程中拉取的所有容器镜像”。下面先简单介绍下相关背景。
- 为何 sealer 需要缓存集群依赖的所有容器镜像?