本文发表已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已发生变化。
Kubernetes 的历史及其背后的社区
回到波特兰的 OSCON 大会,与 Kubernetes 社区成员一同站在讲台上,接受“最具影响力开源项目”奖,这对我来说意义非凡。仅仅三年之前,正是在这个讲台上,我们宣布了 Kubernetes 1.0 版本,该项目被加入新成立的 Cloud Native Computing Foundation (CNCF)。
想到我们在如此短的时间内取得的巨大成就,并看到这个项目如何重塑了云计算格局,这真是令人惊叹。这份成功是对这个杰出开源社区力量和贡献的证明。而我们充满热情、不断参与、遍布全球的社区成员每天付出的努力和高质量的贡献,更令人感到无比谦卑。
祝贺 @kubernetesio 在 #OSCON 大会上赢得“最具影响力”奖!我很荣幸成为这个杰出社区的一员! @CloudNativeFdn pic.twitter.com/5sRUYyefAK
— Jaice Singer DuMars (@jaydumars) 2018 年 7 月 19 日
👏 祝贺 @kubernetesio 社区赢得 #oscon 最具影响力奖,我们为你感到骄傲! pic.twitter.com/5ezDphi6J6
— CNCF (@CloudNativeFdn) 2018 年 7 月 19 日
本周在波特兰的一次聚会上,我有机会讲述了 Kubernetes 的过去、现在以及对未来的一些思考,所以我想把我说的一些内容写下来,分享给那些未能亲临现场的朋友。
这一切始于 2013 年秋季,当时我们三个人:Craig McLuckie、Joe Beda 和我,正在从事公有云基础设施的工作。如果你回想一下 2013 年的云计算世界,它与今天相比有着巨大的不同。命令式的 bash 脚本才刚刚开始让位于使用系统进行 IaaS 的声明式配置。Netflix 通过厚重的完整虚拟机镜像推广了不可变基础设施的概念。编排的概念,当然也包括容器编排,只存在于少数互联网规模的公司中,在云中尚未普及,更不用说在企业中。
Docker 改变了这一切。通过推广轻量级容器运行时,并提供一种简单的打包、分发和部署应用程序到机器上的方式,Docker 工具和体验推广了一种全新的云原生应用打包和维护方法。如果没有 Docker 改变云开发者的视角,Kubernetes 根本就不会存在。
我想是 Joe 最先建议我们在 2013 年夏天关注 Docker,当时 Craig、Joe 和我都在思考如何将云原生应用体验带给更广泛的受众。对我们三个人来说,这个新工具的意义立即显而易见。我们知道它是开发云原生基础设施的关键组成部分。
但当我们思考时,同样明显的是,Docker 专注于单台机器,并不是一个完整的解决方案。虽然 Docker 在构建和打包单个容器并在单台机器上运行方面表现出色,但显然需要一个编排器来跨越众多机器部署和管理大量容器。
随着我们进一步思考,Joe、Craig 和我越来越清楚,不仅需要这样的一个编排器,而且它是不可避免的,同样不可避免的是,这个编排器将是开源的。这种认识在 2013 年秋季末在我们心中 crystallize,由此开始了原型以及后来被称为 Kubernetes 的系统的快速开发。随着 2013 年进入 2014 年,我们很幸运地迎来了一些非常有才华的开发者加入,包括 Ville Aikas、Tim Hockin、Dawn Chen、Brian Grant 和 Daniel Smith。
很高兴看到 k8s 团队成员赢得“最具影响力”奖。 #oscon pic.twitter.com/D6mSIiDvsU
— Bridget Kromhout (@bridgetkromhout) 2018 年 7 月 19 日
Kubernetes 赢得了 O'Reilly 最具影响力奖。感谢我们的贡献者和用户! pic.twitter.com/T6Co1wpsAh
— Brian Grant (@bgrant0607) 2018 年 7 月 19 日
这个小团队的最初目标是开发一个“最小可行编排器”。根据经验,我们知道这样一个编排器的基本功能集包括:
- 复制以部署应用的多个实例
- 负载均衡和服务发现以将流量路由到这些复制的容器
- 基本健康检查和修复以确保系统自我修复
- 调度以将多台机器分组到一个池中并将工作分配给它们
在此过程中,我们也花费了大量时间说服高层领导,开源这个项目是个好主意。我永远感谢 Craig 写了无数的白皮书,感谢 Eric Brewer 早期坚定地支持我们,确保 Kubernetes 能够面世。
2014 年 6 月,当 Kubernetes 发布给全世界时,上面列出的就是其基本功能集的总和。作为一个早期阶段的开源社区,我们花了一年时间构建、扩展、完善和修复这个最初的最小可行编排器,使其成为我们在 2015 年 OSCON 大会发布的 1.0 版本。我们很幸运早期就加入了非常有能力的 OpenShift 团队,他们为项目贡献了重要的工程能力和真实世界的企业经验。没有他们的视角和贡献,我认为我们今天就不会站在这里。
三年后,Kubernetes 社区呈指数级增长,Kubernetes 已成为云原生容器编排的代名词。超过 1700 人为 Kubernetes 做出了贡献,全球有超过 500 个 Kubernetes meetup,超过 42000 用户加入了 #kubernetes-dev 频道。更重要的是,我们建立的社区成功地跨越了地域、语言和企业界限。这是一个真正开放、积极参与和协作的社区,这本身就是一个了不起的成就。非常感谢所有帮助它走到今天的人。因为有你们,Kubernetes 在公有云中成为一种普及的技术。
但是,如果 Kubernetes 已经普及,那么未来又是什么呢?当然,核心代码库还有无数微调、调整和改进的空间,这些将占据我们未来多年的时间,但 Kubernetes 真正的未来是基于这个新的、普遍可用的平台构建的应用和体验。
Kubernetes 极大地降低了构建新的开发者体验的复杂性,并且已经开发或正在开发无数新的体验,它们在核心的 Kubernetes-as-a-Service 之上提供了简化或针对性的开发者体验,例如 Functions-as-a-Service。
Kubernetes 集群本身正在通过自定义资源定义(我第一次在 2015 年 OSCON 大会去附近一家餐馆的路上向 Kelsey Hightower 描述了它们)进行扩展,这些新的资源允许集群操作员启用新的插件功能,扩展和增强其用户可访问的 API。
通过将日志和监控等核心功能嵌入到集群本身,并让开发者只需将应用部署到集群中即可轻松利用这些服务,Kubernetes 降低了开发者构建可扩展、可靠应用所需的学习门槛。
最后,Kubernetes 为表达分布式系统开发模式和范例提供了一种新的、共同的词汇。这种共同的词汇意味着我们可以更轻松地描述和讨论构建分布式系统的常用方法,并且可以构建这些系统的标准化、可复用实现。其最终效果是更快地开发出更高质量、更可靠的分布式系统。
看到 Kubernetes 从西雅图三个人脑海中的一个粗略想法,成长为一个重塑全球云原生开发方式的现象,这真是令人惊叹。这是一段令人惊叹的旅程,但对我来说,真正令人惊叹的是,我认为我们现在才刚刚触及 Kubernetes 将产生影响的表面。感谢所有帮助我们走到这一步的人,也感谢所有将带领我们走得更远的人。
Brendan