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

Kubernetes 的历史及其背后的社区

oscon award

回到波特兰和 OSCON,与 Kubernetes 社区成员一起站上舞台,并接受最具影响力开源项目奖,这对我来说意义非凡。仅仅三年前,就在这个舞台上,我们宣布了 Kubernetes 1.0 版本,并将该项目添加到了新成立的云原生计算基金会 (Cloud Native Computing Foundation)。

回想在如此短的时间内我们取得了多大的进步,以及这个项目如何塑造了云计算格局,这简直令人惊叹。这一成功证明了这个了不起的开源社区的力量和贡献。我们全球各地无休止地投入和高质量贡献的社区的日常热情,令人无比谦卑。

本周在波特兰的一次聚会上,我有机会讲述了 Kubernetes 的过去、现在以及对未来的展望,所以我想把我说的一些内容写下来,以便那些未能亲自到场的人了解。

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

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