【k8s系列4】kubernetes(k8s)的社区与其他开源项目的区别

本文转载自:谈谈Kubernetes开源社区和未来走向

我们知道 Kubernetes 这个项目是托管在 CNCF 基金会下面的。但是,我在专栏最前面讲解容器与 Kubernetes 的发展历史的时候就已经提到过,CNCF 跟 Kubernetes 的关系,并不是传统意义上的基金会与托管项目的关系,CNCF 实际上扮演的,是 Kubernetes 项目的 Marketing 的角色。
这就好比,本来 Kubernetes 项目应该是由 Google 公司一家维护、运营和推广的。但是为了表示中立,并且吸引更多的贡献者加入,Kubernetes 项目从一开始就选择了由基金会托管的模式。而这里的关键在于,这个基金会本身,就是 Kubernetes 背后
的“大佬们”一手创建出来的,然后以中立的方式,对 Kubernetes 项目进行运营和 Marketing
通过这种方式,Kubernetes 项目既避免了因为 Google 公司在开源社区里的“不良作风”和非中立角色被竞争对手口诛笔伐,又可以站在开源基金会的制高点上团结社区里所有跟容器相关的力量。而随后 CNCF 基金会的迅速发展和壮大,也印证了这个思路其实是非常正确和有先见之明的。
不过,在 Kubernetes 和 Prometheus 这两个 CNCF 的一号和二号项目相继毕业之后,现在 CNCF 社区的更多职能,就是扮演一个传统的开源基金会的角色,吸纳会员,帮助项目孵化和运转
只不过,由于 Kubernetes 项目的巨大成功,CNCF 在云计算领域已经取得了极高的声誉和认可度,也填补了以往 Linux 基金会在这一领域的空白。所以说,你可以认为现在的 CNCF,就是云计算领域里的 Apache ,而它的作用跟当年大数据领域里 Apache 基金会的作用是一样的。
不过,需要指出的是,对于开源项目和开源社区的运作来说,第三方基金会从来就不是一个必要条件。事实上,这个世界上绝大多数成功的开源项目和社区,都来自于一个聪明的想法或者一帮杰出的黑客。在这些项目的发展过程中,一个独立的、第三方基金会的作用,更多是在该项目发展到一定程度后主动进行商业运作的一部分。开源项目与基金会间的这一层关系,希望你不要本末倒置了
另外,需要指出的是,CNCF 基金会仅仅负责成员项目的 Marketing, 而绝不会、也没有能力直接影响具体项目的发展历程。无论是任何一家成员公司或者是 CNCF 的 TOC(Technical Oversight Committee,技术监督委员会),都没有对 Kubernetes 项目“指手画脚”的权利,除非这位 TOC 本人就是 Kubernetes 项目里的关键人物。
所以说,真正能够影响 Kubernetes 项目发展的,当然还是 Kubernetes 社区本身。可能你会好奇,Kubernetes 社区本身的运作方式,又是怎样的呢?
通常情况下,一个基金会下面托管的项目,都需要遵循基金会本身的管理机制,比如统一的 CI 系统、Code Review 流程、管理方式等等。
但是,在我们这个社区的实际情况,是先有的 Kubernetes,然后才有的 CNCF,并且 CNCF 基金会还是 Kubernetes “一手带大”的。所以,在项目治理这个事情上,Kubernetes 项目早就自成体系,并且发展得非常完善了。而基金会里的其他项目一般各自为阵,CNCF 不会对项目本身的治理方法提出过多的要求
而说到 Kubernetes 项目的治理方式,其实还是比较贴近 Google 风格的,即:重视代码,重视社区的民主性。
首先,Kubernetes 项目是一个没有“Maintainer”的项目。这一点非常有意思,Kubernetes 项目里曾经短时间内存在过 Maintainer 这个角色,但是很快就被废弃了。取而代之的,则是 approver+reviewer 机制。这里具体的原理,是在 Kubernetes 的每一个目录下,你都可以添加一个 OWNERS 文件,然后在文件里写入这样的字段:

approvers:
- caesarxuchao
reviewers:
- lavalamp
labels:
- sig/api-machinery
- area/apiserver

比如,上面这个例子里,approver 的 GitHub ID 就是 caesarxuchao (Xu Chao),reviewer 就是 lavalamp。这就意味着,任何人提交的 Pull Request(PR,代码修改请求),只要修改了这个目录下的文件,那么就必须要经过 lavalamp 的 Code Review,然后再经过 caesarxuchao 的 Approve 才可以被合并。当然,在这个文件里,caesarxuchao 的权力是最大的,它可以既做 Code Review,也做最后的 Approve。但, lavalamp 是不能进行 Approve 的。
当然,无论是 Code Review 通过,还是 Approve,这些维护者只需要在 PR 下面 Comment /lgtm 和 /approve,Kubernetes 项目的机器人(k8s-ci-robot)就会自动给该 PR 加上 lgtm 和 approve 标签,然后进入 Kubernetes 项目 CI 系统的合并队列,最后被合并。此外,如果你要对这个项目加标签,或者把它 Assign 给其他人,也都可以通过 Comment 的方式来进行。
可以看到,在上述整个过程中,代码维护者不需要对 Kubernetes 项目拥有写权限,就可以完成代码审核、合并等所有流程。这当然得益于 Kubernetes 社区完善的机器人机制,这也是 GitHub 最吸引人的特性之一。
顺便说一句,很多人问我,GitHub 比 GitLab 或者其他代码托管平台强在哪里?实际上, GitHub 庞大的 API 和插件生态,才是这个产品最具吸引力的地方。
当然,当你想要将你的想法以代码的形式提交给 Kubernetes 项目时,除非你的改动是 bugfix 或者很简单的改动,否则,你直接提交一个 PR 上去,是大概率不会被 Approve 的。这里的流程,一定要按照我下面的讲解来进行:

  1. 在 Kubernetes 主库里创建 Issue,详细地描述你希望解决的问题、方案,以及开发计划。而如果社区里已经有相关的 Issue 存在,那你就必须要在这里把它们引用过来。而如果社区里已经存在相同的 Issue 了,你就需要确认一下,是不是应该直接转到原有 issue 上进行讨论。
  2. 给 Issue 加上与它相关的 SIG 的标签。比如,你可以直接 Comment /sig node,那么这个 Issue 就会被加上 sig-node 的标签,这样 SIG-Node 的成员就会特别留意这个 Issue。
  3. 收集社区对这个 Issue 的信息,回复 Comment,与 SIG 成员达成一致。必要的时候,你还需要参加 SIG 的周会,更好地阐述你的想法和计划
  4. 在与 SIG 的大多数成员达成一致后,你就可以开始进行详细的设计了
  5. 如果设计比较复杂的话,你还需要在 Kubernetes 的设计提议目录(在 Kubernetes Community 库里)下提交一个 PR,把你的设计文档加进去。这时候,所有关心这个设计的社区成员,都会来对你的设计进行讨论。不过最后,在整个 Kubernetes 社区只有很少一部分成员才有权限来 Review 和 Approve 你的设计文档。他们当然也被定义在了这个目录下面的 OWNERS 文件里,如下所示

reviewers:
  - brendandburns
  - dchen1107
  - jbeda
  - lavalamp
  - smarterclayton
  - thockin
  - wojtek-t
  - bgrant0607
approvers:
  - brendandburns
  - dchen1107
  - jbeda
  - lavalamp
  - smarterclayton
  - thockin
  - wojtek-t
  - bgrant0607
labels:
  - kind/design

这几位成员,就可以称为社区里的“大佬”了。不过我在这里要提醒你的是,“大佬”并不一定代表水平高,所以你还是要擦亮眼睛。此外,Kubernetes 项目的几位创始成员,被称作 Elders(元老),分别是 jbeda、bgrant0607、brendandburns、dchen1107 和 thockin。

  1. 上述 Design Proposal 被合并后,你就可以开始按照设计文档的内容编写代码了。这个流程,才是正常大家所熟知的编写代码、提交 PR、通过 CI 测试、进行 Code Review,然后等待合并的流程。
  2. 如果你的 feature 是需要要在 Kubernetes 的正式 Release 里发布上线的,那么你还需要在Kubernetes Enhancements这个库里面提交一个 KEP(即 Kubernetes Enhancement Proposal)。这个 KEP 的主要内容,是详细地描述你的编码计划、测试计划、发布计划,以及向后兼容计划等软件工程相关的信息,供全社区进行监督和指导。
    以上内容,就是 Kubernetes 社区运作的主要方式了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342