题图摄于加州蒙特雷
感谢 InfoQ 万佳 编辑的采访, 本文经授权转载,增加了配图。
相关信息:招聘云原生工程师
“天南地北侃技术,自娱自乐于互联网的缝隙中”,这是公众号亨利笔记的简介。而这个公众号的主人就是张海宁。不久前,笔者在 VMware 北京办公室见到了他:个子挺高,人很瘦,说话不疾不徐。
张海宁是一名资深程序员,从小学起,他就开始学习编程,是中国最早的 iOS 应用开发者之一。他设计和开发的几个 iOS 工具类 App 在苹果应用商店名列前茅,曾获免费应用榜首、付费应用前三名的佳绩。
VMware 中国研发中心技术总监、 Harbor 开源项目创建人和维护者张海宁
如今,他担任 VMware 中国研发中心技术总监,并且是 Harbor 开源项目创建人和维护者。
Harbor 目前在 GitHub 上有 15000+ star,2000+ 贡献者,5000+ 用户,每月有 20000+ 的独立访问者,4000 多次的源代码下载量。显然,Harbor 是成功的。它做对了什么?为什么能取得成功?Harbor 的经历可以为我们带来哪些思考?...... 带着这些疑问,笔者与张海宁进行了一次长谈。
1从 Docker 中看到机会
Harbor 的成功,要从 2014 年说起。这年 6 月,VMware 中国研发中心开始孵化 Harbor 项目。在孵化 Harbor 前,张海宁的团队主要做 Cloud Foundry 的技术布道和推广工作,Cloud Foundry 是业界第一个开源的 PaaS 云平台。
但是,情况在 2013 年发生较大变化:
一是 Cloud Foundry 项目被划到 Pivotal 公司,张海宁所在团队不再负责这个项目,转而做一些其他的技术孵化。
二是这一年,业界突然冒出一个叫 Docker 的开源项目,并在几个月后迅速崛起。
由于团队一直深耕于云原生和 PaaS 平台领域,所以他们注意到 Docker 的横空出世。他说:“我们觉得,Docker 可能是下一代能取代虚拟机的部分功能并且可做 DevOps 相关的 PaaS 平台技术。”
Docker 很“香”
于是,他们在内部进行了调研,认识到 Docker 带来的价值。张海宁表示,Docker 某种意义上算是一种革命性技术。从使用虚拟机到切换成容器,开发者可以更轻量地进行应用的开发、部署和上线,完成一系列事情,“这不仅大大提高了开发运维的效率,而且开发和运维可以是一个流水线做下来”。
具体说来。在 Docker 技术出现前,开发者开发软件,一般的过程是把它编译成一个可执行文件,比如 Windows 的 EXE 文件 或 Linux binary。但是,这个可执行文件面临的一个最大问题是在编译或开发好之后,它在另一个环境不一定能跑起来。因为如果开发环境和运行环境不一样,那么软件最终可能无法正常运行。
为了解决这个痛点,以前也有类似的技术,比如 Solaris,但并未真正解决问题。据张海宁回忆,他早在 Sun Microsystems 做 Solaris 操作系统时,就用过容器技术。
“那时,第一次接触到容器,了解到它的价值和威力。使用后,觉得它有些缺陷,不好用,不够开放。相比 Docker,Solaris 早了 8 年,它是 2004 和 2005 年左右出来的。Sun 的 Solaris 没有流行起来的原因是它没有容器镜像,只是把程序打包成一个 Zip file 或 Tar file。它只有 Zip、Tar 这种格式来传递,且没有标准化,所以不好用,不容易流传,加上 Solaris 早期没有开源,缺乏社区力量,因此虽然早了 8 年,也没有广泛流行起来。”
直到 Docker 技术出现后,这个问题才被解决。Docker 的核心技术是镜像,其好处在于通过镜像把一个运行环境固化下来,可在不同地方使用。这样,开发者的开发环境和软件最终的运行环境是无差别的。
张海宁解释,如果没有 Docker,程序编译好后,可先传到测试环境,安装部署后再跑起来。如果没有问题,再把程序传到生产环境,再跑起来。“这个过程有很多非标准化的步骤,并且手工操作非常多,很耗时“。
他说:“有了 Docker 后,我们基本上不用什么特别的环境,只要是 Linux 操作系统,就可把镜像从一个环境导到另一个环境,程序就能自动跑起来。”
调研结束后,团队发现 Registry 非常重要,因为它是使用容器过程中的关键一环,关乎镜像传输和分发的成败。但是,这个领域最早只有 Docker 提供的基础版 Registry 软件(镜像仓库),它不仅缺少很多功能,而且无法满足诸多场景。因此,他们某种意义上做了一个增强版的镜像仓库,这就是 Harbor。
从 4 个人起步
据悉,Harbor 项目最初只有 4 个人,其中,张海宁是团队负责人,其他三人是工程师(包括一名实习生),主要负责开发工作。
正所谓万事开头难,Harbor 在初创阶段,困难重重。
项目早,用例(use case)少,这是团队面临的第一个挑战。张海宁举了一个例子,他们当时在 VMware 内部推广时遇到困难,“我们讲容器时,其他人一脸茫然,都没听过这个技术,不知道它好不好”,所以,要做说服工作,让别人接受或尝试新技术。
第二个挑战是“我们把它做出来后,具体怎么用,大家从认知到真正去用还有一段时间。所以在某种意义上,找场景也挺花时间,因为用户的痛点是什么,我们不知道。很多时候靠自己的感觉或用户反馈,因为用户肯定不会告诉你他想要什么,他只会说需要解决一些问题”。
这个问题如何解决的?张海宁提到两点:一是凭经验,最主要靠创始人或主要成员的经验。作为 Harbor 创建人,张海宁曾在几家国际 IT 公司工作过,经验丰富。在 Sun 公司时,他不仅了解和使用过容器技术,而且为企业提供身份认证管理服务,在 RBAC(Role Based Access Control, 基于角色的权限管理)、LDAP 多种复制协议等场景中积累了一定的经验,对企业 IT 系统安全管理有较深入的理解。
他说:“我感觉,企业用户非常在意应用系统的安全权限控制,比如谁有权限做什么事。而 Docker Registry 最早那一版没有提供权限管理。换句话说,你有个镜像,什么人都能去访问。对开发者来说,这没有问题。但是对企业来说,生产系统一定会遇到权限管理问题,尤其是核心业务的生产系统,企业肯定不希望谁都来碰,一定要加一道防护门。”
因此,在 Harbor 早期设计中,张海宁他们实现了 RBAC 功能,还有日志审计、镜像复制和图形化管理界面功能。
另一个重要的经验来自张海宁以前开发 App 的经历。开发 App 前,他在一些大企业里开发软件,周期长,搞几个月时间才能发布一个版本,再通过线上和线下反馈它好用不好用,接着再改。通过开发 iOS App,这个周期大大缩短,“写个 App,改两行代码,增加个新功能,然后提交到 App Store,一周审核通过后,新版本发布。发布后,就有用户下载和使用”。从发布一款软件到用户下载使用,过程很快。简言之,小步快跑,快速迭代。
在张海宁看来,一款软件要有生命力,其周期越短越有利。因此,做 Harbor 时,”我们在功能上要少而精准,不要求大而强、高精尖,要解决用户最痛的点。让用户尽快用起来,告诉你方向对不对“。
如果说靠经验,他们向前迈出了第一步,那么接下来,就是根据用户反馈,然后再做优化。具体体现是“从用户中来,到用户中去”。
“从用户中来”就是从用户思维考虑,它能解决用户的痛点或需求是什么。据悉,在开发任何软件前,张海宁都会思考一个问题:用户有这个软件和没有这个软件,他解决问题的方法有什么不同?以 Harbor 为例,如果没有 Harbor,用户如何管理镜像,答案是通过各种 Docker push、pull 等命令去操作镜像,这个流程复杂,且对开发人员要求很高。有了 Harbor,这个事情会变成什么样。
“每做一个功能前,我们都会想这个问题,有这个功能和没这个功能的差别到底有多大,能带来多少好处,比如节约时间、提高效率等”。
“到用户中去”就是反复检验自己的思路是不是跟用户思路一样。张海宁认为,这始终是一个双向过程,“我给用户一点东西,用户觉得好不好用再反馈,我再改,形成正向循环”。
Harbor 的一些功能是由用户提议做的。用户提出意见,能不能提供某个功能,这些想法某种程度上代表了他们的实际需求。这时,团队会判断用户这个需求是个例,还是典型的普适性。怎么判断这个需求?大致分两种情况:
第一种,一个需求很多人都提,肯定是个热点,因为大家都关注,急于解决,或者很多人在 GitHub 上点赞和评论。
第二种是凭经验。大家讨论,分析一下用户的初衷是什么,为什么要提这个问题,甚至找到用户讨论一下。
第三个挑战是资源有限。张海宁表示,“我觉得好多创业团队或创新团队一开始都处于资源有限的境况,Harbor 也是如此,资源非常有限,所以做了很多取舍,走了一些捷径。”
在 Harbor 项目初创时,团队只有 4 个人。因为这属于预研,结果既有可能成功,也有可能失败,所以 Harbor 项目在资源投入上比较受限。不仅投入的工程师比较少,而且经验可能不是很丰富。“某种意义上,这不是一支正规军在作战,而是很小的先遣部队在开拓”。
人力少带来的结果是“人手不够,可有可无的功能只能砍掉,或者暂时不做了”。
据张海宁回忆,他们最开始想做镜像扫描功能,但是苦于人手不够,所以只能放弃。因为这个功能涉及很多集成,包括整合其他软件,所以这个功能一开始就没做。
此外,团队当时在一些开放的标准和 API 上也没有考虑太多。张海宁称,如果希望这个软件具备生命力,希望它与别的东西融合,那么就要更多地考虑其开放能力和接入能力。后来,团队花了很大力气改进 Harbor 的这个问题。因此,Harbor 现在可以对接公有云、私有云,包括阿里云、腾讯云、华为云、谷歌云、微软 Azure 等,各种镜像仓库都能做镜像同步。
当时,因为缺乏人手,张海宁几乎担任过“从看门人到 CEO”之间的所有角色,包括项目经理、产品经理、架构师、布道师、文档编辑、翻译和社区运营等等。
作为项目创建人,他希望三名工程师全力投入开发工作,快速把功能做出来。他说:“工程师大部分时间都在写代码。我不想工程师因为做别的事情而影响到产品的功能开发。并且,我在开源项目上积累了一些经验,包括推广、项目运作和布道等。”
对张海宁来说,做这些“杂事”作用很大。“我对团队讲,大家无论做什么,一定要对外去宣讲。以前有句话,酒香不怕巷子深,但实际并非如此,巷子太深就闻不到味道,别人可能不知道你这有酒。不仅要做事,还要走出去,让更多人知道这个项目,让更多人了解你的工作,这样,你才能获得更高的效益。因为很多工程师可能只愿意写代码,不太愿意干别的,这会制约他们在职业生涯中走得更远”。
作为团队领导者,张海宁如今相当一部分时间要花在参与 meetup、演讲、布道和写文章或博客中等,也鼓励团队工程师多参与公开的技术活动。
2开源半年,一炮而红
2016 年 3 月,Harbor 正式开源。虽然 之前 VMware 内部有几个团队尝试了 Harbor,也有效果,但整体上,公司当时主要使用虚拟机(VM)技术。从开发技术上,用例的场景不多。
对 Harbor 来说,它需要一片更广阔的天地:有更多的用户使用,有更多的应用场景,“我希望有更多用户来尝试一下这个软件,给我们更多的反馈”,所以开源是最佳选择。
据悉,团队在 2015 年底就开始为 Harbor 开源做准备,因为涉及诸多法务、审批之事,比如,项目里使用的开源软件是否具有合适的许可等。花了半年时间,做好准备工作后,张海宁他们才在一场 meetup 活动上正式宣布 Harbor 开源。
2016年云原生论坛上发布Harbor开源项目
Harbor 开源后,种子用户被宣传内容吸引过来,一方面,张海宁和团队撰写了大量的博客和公众号文章;另一方面,团队在一些技术媒体网站发布了很多文章。同时,很多人在各种微信群里自发进行传播。
一段时间后,由于 Harbor 表现不错,因此在开发者群体中口耳相传。张海宁说:“我们问过业内一些朋友,他们都说到处都在用 Harbor。要推荐一个好用的 Registry,都有人说用 Harbor。”
于是,Harbor 在国内自然而然地火起来。
VMware 是云计算领域的国际化公司,来自 VMware 的加持让 Harbor 开始从国内走向国外。2016 年 7 月,VMware 把 Harbor 集成到自己的容器产品 VIC 里,成为一个组件。并且,在当年的 VMware 年度大会上正式对外发布了 这个产品,演示了 Harbor。自此之后,Harbor 真正走向国际社区。
据了解,Harbor 推出仅半年,就在 GitHub 上获得 1000+ star,迅速获得大量用户。可谓一炮而红!
它为什么能快速火起来?这与 Harbor 的设计理念息息相关。Harbor 的第一个设计理念解决了权限认证管理问题。这事关安全,而“安全无小事”。第二个设计理念是自动化,即多数据中心或云环境之间的镜像自动同步。
张海宁说:“从一个地方到另一个地方,按照某种需要传导镜像,这个需求非常大。因为开发环境到生产环境就是一种,不同生产环境之间的导入导出镜像则是另一种。没这个功能时,大家只能手工操作,先下载,再推送出去,或基于这个命令写一些脚本。出问题了,你都不知道问题在哪,Harbor 把这个过程自动化了,从而很好地解决了这个问题。”
这个功能也成为 Harbor 起飞的一个支点。
第三个设计理念是本地化。云原生领域,主流技术都来自国外,项目都是英文界面或没有界面。这就有个问题,软件工程师可能对此无所谓,但是用户不懂英语,用起来比较吃力,所以团队做了全中文界面,很受用户欢迎。
这些很接地气的功能构成了 Harbor 的 MVP (最简化可实行产品),满足了用户 70% 以上的需求,因此 Harbor 开源之后迅速走红。
3进入 CNCF,成首个 CNCF 中国开源项目
据张海宁透露,虽然 Harbor 于 2018 年 7 月才正式进入 CNCF 沙箱,但是他们早在 2017 年已经接洽 CNCF。
2017 年,VMware 中国研发中心总经理任道远与张海宁在杭州见了 CNCF 主要负责人,包括 CNCF 执行董事 Dan Kohn 和 CNCF 亚太区总裁 Keith Chan。对 CNCF 来说,它们希望扩展中国市场,吸引更多中国开发者使用 CNCF 的开源项目。
张海宁说:“我们向他们介绍了 Harbor 情况和 CNCF 在中国的情况。了解到 Harbor 情况后,他们认为 Harbor 是挺符合 CNCF 的理念和要求的。”
一方面,Harbor 是用 Go 语言写的,而与 Harbor 类似的项目则是用 Python 或 Perl 等语言写的,其实不太匹配。另一方面,Harbor 采用了 Apache License 2.0,这个软件是可以商用的。另外,Harbor 在中国有大量的用户,并且在国内影响力比较大。
不过,CNCF 也向他们提了一些建议。张海宁表示,唯一的阻力是 CNCF 希望 Harbor 依赖的 Docker Registry 也能进入 CNCF,但是,Docker 公司迟迟不动,“我们跟 Docker 公司沟通了多次,但它没有太大意愿做这件事“,因为这个问题,Harbor 进入 CNCF 拖延了半年。
双方见面时,CNCF 也正考虑在中国举办第一届 KubeCon 大会。“他们当时犹豫做不做这件事,我们向他们提了一些建议,并对他们说,必须做。因为中国拥有一个很大的开发者市场。这进一步坚定了他们举办 KubeCon 的信心”。
在张海宁看来,CNCF 之所以接受 Harbor,一方面,由于中国的用户基数很大;另一方面,中国是全球第二大的开发者市场。所以,CNCF 认为中国是不可忽略的一支重要技术力量。与此同时,它们希望在中国扩大影响力,因此客观上有吸纳 Harbor 项目的需要。此外,VMware 是一家国际性公司,在国外有很大的影响力,并且是 CNCF 理事会成员之一。
到了 2018 年 7 月,Harbor 正式进入 CNCF。对它而言,开启了一段新旅程。
Harbor 进入 CNCF 的一大变化是流程规范化。张海宁解释,“一开始,我们是野蛮生长,把这个项目做大做好就行了。但是,到后期,它由基金会去管理,其实要满足很多规范。”
这些规范包括要公开开源项目的治理模式,降低社区成员的参与门槛和双周的社区会议(中英文各一场)。同时,流程上也有要求,比如怎样快速响应社区需求。“我们专门开了一个 Slack 频道,专人去关注频道上的提问,并进行回复”。
张海宁表示,流程规范化的一个好处是有章可循,有规可依,尤其是想参与社区的人,原来不知道怎么参与。“最开始,一些用户和朋友通过各种关系找到我,说能不能把这个功能加进去。这有点像私底下的讨论。有了规范后,就不是一个私下讨论,而是一个社区的议题“。
团队在 GitHub 上开一个 PR,大家一起讨论,如果大家都认可,那(它)就可以进去;如果不认可,那就无效。不是由个人左右项目发展,而是有一定的规范化、流程化。
Harbor项目团队在2018年11月首届中国KubeCon上主题演讲
2018 年 11 月,Harbor 进入 CNCF 孵化阶段,并在 2020 年 6 月,正式从 CNCF 毕业。提起在 CNCF 的近 2 年时间,张海宁他们也踩过一些坑。随着 Harbor 应用的场景越来越广,用户数越来越多,安全漏洞就需要特别关注。
有一次,有人发现了一个安全漏洞,“通知了我们后,他很快就公开了这个漏洞”。而业界通行的做法是,如果你发现安全漏洞,第一先通知开发者或厂商,然后他们尽快进行修补。问题解决后,你再在网上公布这个漏洞详情。但是,这个人并未严格遵守这个流程,“他通知了我们,但我们没注意到他马上就公布了这个漏洞,并且写了篇博客。很多人看到这篇博客,宣称 Harbor 有个严重漏洞”。而互联网上有几百甚至上千个这样的实例,结果带来很大风波。
Harbor 在 CNCF 的经历,不仅对自身带来重要影响,而且也让张海宁产生一些认识上的改变。做开源,要舍得放手,Harbor 在进入 CNCF 前,是由 VMware 主导的一个开源项目。后来,把项目贡献出去后,“我们工程师可能还不适应,因为把这个项目从 0 到 1 做出来,现在却要放手”。但实际上,进入 CNCF 后,“不是你一家独大”,要考虑社区的影响,考虑别人的参与,思维方式就要转换过来。
他举了一个例子。有一次开社区会议,有人提出意见,想参与这个项目,为什么不接受他提出的这个功能,而项目的维护者就回答说“产品经理没同意”。张海宁称,从开源角度讲,某个功能不是产品经理说不做了就不做了,更多是一个社区讨论或投票表决的事情。
4未来:云原生拼图里不可缺少的一块
去年,Harbor 发布 2.0 版本,带来众多重要更新,尤其是成为符合 OCI(Open Container Initiatives)规范的开源镜像仓库,能存储多种云原生制品(Artifacts),例如,容器镜像、Helm Chart、OPA、Singularity 等等。
目前,Harbor 已经进入一个相对稳定和成熟的阶段。张海宁表示,“未来会在性能、高可用和其他能力上进行增强和完善,包括 OCI、点对点的分发的集成、自动化等,思路是与周边软件生态融合,进一步做大做强”。
现在,每年都有不少人找 Harbor 团队合作,涵盖安全扫描、在边缘计算的使用等。
当进一步畅想 Harbor 的未来时,张海宁认为,Harbor 最终会成为云原生整个拼图中的一块,解决一大类问题。他一直持有一个观点:Harbor 解决镜像问题,属于云原生中的静态管理。何为静态管理?就是管理一些二进制文件,我们叫制品,关于它的管理就是云原生制品管理”。静态管理对云原生应用的动态管理(即运行状态管理)有重要的支持作用。
5Harbor 的成功之道
Harbor 为什么能成功?张海宁总结了三点:
第一,开源时间很早,心态开放,无论是做社区,还是接触用户,比较接地气,能充分发挥本地化优势,包括产品有中文界面、微信群沟通等。
第二,利用一切可以推广渠道的,包括 meetup、大会、公众号、博客等,通过各种渠道发布内容,进行布道,让更多用户可以接触和使用 Harbor。
第三,具备全球化思维,通过一些渠道走向国外,产生国际影响力。比如使用英文文档、借助 VMware 的渠道和影响力等。“一个项目是否成功,不仅要有国内影响力,还要有国外影响力,两者相结合,才容易做大做强”。
对国内的开源项目来说,Harbor 的经历也可以带来了一些经验:
起步时,立足国内,有一些本地化考量,这样容易站稳脚跟。
中长期,放眼全球,把项目做大。
6写在最后
纵观 Harbor 的发展,先以击中用户痛点,在国内崛起,然后通过良好口碑在开发者群体中口耳相传,再慢慢通过 VMware 的影响力,推广到国外社区,最后通过 CNCF 真正走上国际化道路。在 Harbor 之后,我们有望见到越来越多优秀的源自中国的开源项目。在这开源最好的时代,让我们致敬每一个了不起的开源项目,为每一个开源项目贡献者喝彩!
Harbor 开源地址:https://github.com/goharbor/harbor
相关文章:
Harbor生产使用率猛增7成半 : CNCF中国云原生调查报告
招聘云原生工程师
《Harbor权威指南》目前京东优惠中,点击下图直接购买。
Harbor社区联系方式
双周例会,周三晚9点(中英文):goharbor.community/MEETING_SCHEDULE.md
Email组:harbor_dev @ lists.cncf.io
微信公众号:HarborChina (官方公众号)
GitHub: Github.com/goharbor
要想了解云原生、机器学习和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。
点个在看少个 bug ????