本文发布于一年多前。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。

Kubernetes 的历史及其背后的社区

oscon award

令我惊讶的是,我回到波特兰和 OSCON,与 Kubernetes 社区的成员一起站在台上,并接受这个“最具影响力开源项目”奖。仅仅三年前,正是在同一个舞台上,我们宣布了 Kubernetes 1.0,并且该项目被添加到新成立的云原生计算基金会中。

想想我们在如此短的时间内取得了多大的进步,并看到该项目如何塑造了云计算格局,这简直令人惊叹。这一成功证明了这个令人惊叹的开源社区的力量和贡献。我们不断参与、遍布全球的社区的日常热情和高质量的贡献,简直令人钦佩。

在本周在波特兰举行的一次聚会上,我有机会讲述了 Kubernetes 的过去、现在以及对其未来的一些想法,所以我认为我会写下我所说的一些内容,以供那些无法亲自到场的人参考。

这一切都始于 2013 年秋季,当时我们三人:Craig McLuckie、Joe Beda 和我正在研究公共云基础设施。如果您回想一下 2013 年的云世界,它与今天的情况大相径庭。命令式 bash 脚本才刚刚开始让位于使用系统对 IaaS 进行声明式配置。Netflix 正在推广不可变基础设施的概念,但它是使用重量级的完整 VM 映像来实现的。编排的概念,尤其是容器编排,在一些互联网规模的公司中存在,但在云中,尤其是在企业中不存在。

Docker 改变了这一切。通过推广轻量级容器运行时,并提供一种简单的方式来打包、分发应用程序并将其部署到机器上,Docker 工具和体验推广了一种全新的云原生应用程序打包和维护方法。如果不是 Docker 改变了云开发人员的视角,Kubernetes 根本不会存在。

我认为是 Joe 在 2013 年夏天首次建议我们研究 Docker,当时 Craig、Joe 和我都在思考如何将云原生应用程序体验带给更广泛的受众。对于我们三个人来说,这个新工具的意义是显而易见的。我们知道它是开发云原生基础设施的关键组件。

但是,当我们进一步思考时,同样明显的是,Docker 专注于单台机器,并不是完整的解决方案。虽然 Docker 在构建和打包单个容器以及在单个机器上运行它们方面做得很好,但显然需要一个编排器,该编排器可以在一组机器上部署和管理大量容器。

当我们进一步思考时,对于 Joe、Craig 和我来说,越来越明显的是,不仅需要这样一个编排器,而且它是不可避免的,而且这个编排器开源也是不可避免的。这个认识在 2013 年秋季末为我们巩固下来,因此开始了原型以及最终被称为 Kubernetes 的系统的快速开发。当 2013 年变成 2014 年时,我们很幸运地加入了包括 Ville Aikas、Tim Hockin、Dawn Chen、Brian Grant 和 Daniel Smith 在内的一些非常有才华的开发人员。

这个小团队的最初目标是开发一个“最小可行的编排器”。根据经验,我们知道此类编排器的基本功能集是

  • 复制以部署应用程序的多个实例
  • 负载平衡和服务发现,将流量路由到这些复制的容器
  • 基本健康检查和修复,以确保自愈系统
  • 调度,将多台机器分组到一个池中并将工作分配给它们

在此过程中,我们还花费了大量时间说服执行领导层开源这个项目是一个好主意。我非常感谢 Craig 撰写了大量的白皮书,并且感谢 Eric Brewer 早期的积极支持,这确保了 Kubernetes 可以面世。

在 2014 年 6 月 Kubernetes 向世界发布时,上面的列表是其基本功能集的总和。作为一个早期开源社区,我们随后花了一年的时间构建、扩展、完善和修复这个最初的最小可行编排器,最终在 2015 年的 OSCON 上发布了 1.0 版本的产品。我们很幸运能在早期加入了非常有能力的 OpenShift 团队,他们为该项目提供了重要的工程和实际企业专业知识。如果没有他们的视角和贡献,我想我们今天不会站在这里。

三年后,Kubernetes 社区呈指数级增长,Kubernetes 已成为云原生容器编排的代名词。有超过 1700 人为 Kubernetes 做出了贡献,全球有超过 500 个 Kubernetes 聚会,超过 42000 名用户加入了 #kubernetes-dev 频道。更重要的是,我们建立的社区成功地跨越了地域、语言和企业界限。它是一个真正开放、参与和协作的社区,其本身就是一个了不起的成就。非常感谢所有帮助使其成为今天的人。Kubernetes 之所以在公共云中成为商品,是因为你们。

但是,如果 Kubernetes 是一种商品,那么未来是什么?当然,核心代码库的调整、调整和改进不计其数,这些将使我们在未来几年内一直忙碌,但 Kubernetes 的真正未来是建立在这个新的、无处不在的平台之上的应用程序和体验。

Kubernetes 大大降低了构建新开发人员体验的复杂性,并且已经开发或正在开发大量的全新体验,这些体验在核心 Kubernetes 即服务之上提供简化或有针对性的开发人员体验,例如函数即服务。

Kubernetes 集群本身正在通过自定义资源定义(我在 2015 年从 OSCON 到附近一家餐厅的路上首次向 Kelsey Hightower 描述了这一点)进行扩展,这些新资源允许集群操作员启用新的插件功能,从而扩展和增强其用户可以访问的 API。

通过将日志记录和监控等核心功能嵌入到集群本身中,并使开发人员能够通过简单地将其应用程序部署到集群中来利用此类服务,Kubernetes 减少了开发人员构建可扩展可靠应用程序所需的学习成本。

最后,Kubernetes 为表达分布式系统开发的模式和范例提供了一种新的通用词汇。这种通用词汇意味着我们可以更容易地描述和讨论构建分布式系统的常见方式,而且我们可以构建这种系统的标准化、可重用的实现。这最终的效果是更快地开发出更高质量、更可靠的分布式系统。

看到 Kubernetes 从西雅图三个人脑海中的一个粗略想法发展成为一种现象,从而改变了我们对全球云原生开发的看法,这真是令人惊叹。这真是一段令人惊叹的旅程,但真正让我感到惊讶的是,我认为我们现在才刚刚开始触及 Kubernetes 将带来的影响的表面。感谢每一位帮助我们走到今天的人,也感谢每一位将带领我们走向未来的人。

Brendan