Kubernetes 的十年
By Bob Killen (CNCF), Chris Short (AWS), Frederico Muñoz (SAS), Kaslin Fields (Google), Tim Bannister (The Scale Factory), 以及全球的每一位贡献者 |
十年前的 2014 年 6 月 6 日,Kubernetes 的第一次提交被推送到 GitHub。 第一次提交包含了 250 个文件和 47,501 行的 Go、Bash 和 Markdown 代码, 开启了我们今天所拥有的项目。谁能预测到 10 年后,Kubernetes 会成长为迄今为止最大的开源项目之一, 拥有来自超过 8,000 家公司、来自 44 个国家的 88,000 名贡献者。
这一里程碑不仅属于 Kubernetes,也属于由此蓬勃发展的云原生生态系统。 在 CNCF 本身就有近 200 个项目,有来自 240,000 多名个人贡献者, 还有数千名来自更大的生态系统的贡献者的贡献。 如果没有 700 多万开发者和更庞大的用户社区, Kubernetes 就不会达到今天的成就,他们一起帮助塑造了今天的生态系统。
Kubernetes 的起源 - 技术的融合
Kubernetes 背后的理念早在第一次提交之前, 甚至第一个原型(在 2013 年问世之前就已经存在。 在 21 世纪初,摩尔定律仍然成立。计算硬件正以惊人的速度变得越来越强大。 相应地,应用程序变得越来越复杂。硬件商品化和应用程序复杂性的结合表明需要进一步将软件从硬件中抽象出来, 因此解决方案开始出现。
像当时的许多公司一样,Google 正在快速扩张,其工程师对在 Linux 内核中创建一种隔离形式的想法很感兴趣。 Google 工程师 Rohit Seth 在 2006 年的一封电子邮件中描述了这个概念:
我们使用术语 “容器” 来表示一种结构,通过该结构我们可以对负载的系统资源(如内存、任务等)利用情况进行跟踪和计费。
2013 年 3 月,Solomon Hykes 在 PyCon 上进行了一场名为 “Linux容器的未来”的 5 分钟闪电演讲,介绍了名为 “Docker” 的一款即将被推出的开源工具,用于创建和使用 Linux 容器。Docker 提升了 Linux 容器的可用性,使其比以往更容易被更多用户使用,从而使 Docker 和Linux 容器的流行度飙升。随着 Docker 使 Linux 容器的抽象概念可供所有人使用, 以更便于移植且可重复的方式运行应用突然成为可能,但大规模使用的问题仍然存在。
Google 用来管理大规模应用编排的 Borg 系统在 2000 年代中期采用当时所开发的 Linux 容器技术。 此后,该公司还开始研发该系统的一个新版本,名为 “Omega”。 熟悉 Borg 和 Omega 系统的 Google 工程师们看到了 Docker 所推动的容器化技术的流行。 他们意识到对一个开源的容器编排系统的需求,而且意识到这一系统的“必然性”,正如 Brendan Burns 在这篇博文中所描述的。 这一认识在 2013 年秋天激发了一个小团队开始着手一个后来成为 Kubernetes 的项目。该团队包括 Joe Beda、Brendan Burns、Craig McLuckie、Ville Aikas、Tim Hockin、Dawn Chen、Brian Grant 和 Daniel Smith。
Kubernetes 十年回顾
Kubernetes 的历史始于 2014 年 6 月 6 日的那次历史性提交,随后, Google 工程师 Eric Brewer 在 2014 年 6 月 10 日的 DockerCon 2014 上的主题演讲(及其相应的 Google 博客)中由宣布了该项目。
在接下来的一年里,一个由主要来自 Google 和 Red Hat 等公司的贡献者组成的小型社区为该项目付出了辛勤的努力,最终在 2015 年 7 月 21 日发布了 1.0 版本。 在发布 1.0 版本的同时,Google 宣布将 Kubernetes 捐赠给 Linux 基金会下的一个新成立的分支, 即云原生计算基金会 (Cloud Native Computing Foundation,CNCF)。
尽管到了 1.0 版本,但 Kubernetes 项目的使用和理解仍然很困难。Kubernetes 贡献者 Kelsey Hightower 特别注意到了该项目在易用性方面的不足,并于 2016 年 7 月 7 日推出了他著名的 “Kubernetes the Hard Way” 指南的第一次提交。
自从最初的 1.0 版本发布以来,项目经历了巨大的变化,取得了许多重大的成就,例如 在 1.16 版本中正式发布的 Custom Resource Definitions (CRD) , 或者在 1.23 版本中推出的全面双栈支持,以及社区从 1.22 版本中移除广泛使用的 Beta API 和弃用 Dockershim 中吸取的“教训”。
自 1.0 版本以来的一些值得注意的更新、里程碑和事件包括:
- 2016 年 12 月 - Kubernetes 1.5
引入了运行时可插拔性,初步支持 CRI 和 Alpha 版 Windows 节点支持。
OpenAPI 也首次出现,为客户端能够发现扩展 API 铺平了道路。
- 此版本还引入了 Beta 版的 StatefulSet 和 PodDisruptionBudget。