Kubernetes 的发展历史

2023 年 11 月 2 日

阅读时长 7 分钟

说到现代 IT 基础设施,Kubernetes 的作用不容小觑,它是一个开源容器编排平台,可自动部署、管理和扩展容器化软件应用程序和服务。

根据云原生计算基金会 (CNCF) 的一份报告(ibm.com 外部链接),Kubernetes 是全球第二大<a href=" " target=" " rel=" ">开源项目(仅次于 Linux),也是 71% 的财富 100 强公司的主要容器编排工具。要了解 Kubernetes 如何主导云计算微服务市场,我们必须考察一下它的历史。

Kubernetes 的演变

Kubernetes 的名字来源于古希腊语,意为“领航员”或“舵手”(负责引导船只的掌舵人),其历史通常可以追溯到 2013 年,当时 Google 的三位工程师(即 Craig McLuckie、Joe Beda 和 Brendan Burns)提出了一个构建开源容器管理系统的创意。这些技术先驱者当时正在寻找将 Google 的内部基础设施专业知识引入到大规模云计算领域的方法,并使 Google 能够与当时云供应商中无与伦比的领军企业 Amazon Web Services (AWS) 进行竞争。

传统 IT 基础设施与虚拟 IT 基础设施

 

但是,要真正了解 Kubernetes(通常也称为“Kube”或“K8s”,即“数字名称缩写”(ibm.com 外部链接))的历史,我们必须在传统 IT 基础设施与虚拟 IT 基础设施的背景下考察容器。

过去,组织仅在物理服务器(也称为裸机服务器)上运行其应用程序。但是,没有办法为这些应用程序维护系统资源边界。例如,每当一台物理服务器运行多个应用程序时,一个应用程序可能会耗尽该服务器上的所有处理能力、内存、存储空间或其他资源。为了防止这种情况发生,企业将在不同的物理服务器上运行每个应用程序。但是,在多台服务器上运行应用程序会导致资源利用不足和无法扩展的问题。此外,拥有大量物理机器会占用空间并且成本高昂。

虚拟化

 

这就催生了虚拟化,即构成云计算基础的过程。虽然虚拟化计数可以追溯到 20 世纪 60 年代末,但直到 21 世纪初才被广泛采用。

虚拟化依赖于称为虚拟机管理程序的软件。虚拟机管理程序是一种轻量级软件,可让多个虚拟机 (VM) 在一台物理服务器的中央处理器 (CPU) 上运行。每个虚拟机都有一个来宾操作系统 (OS)、操作系统运行所需硬件的虚拟副本,以及应用程序及其相关的库和依赖项。

与物理服务器相比,虽然 VM 能够更高效地使用硬件资源来运行应用程序,但它们仍然占用大量的系统资源。当多个 VM 在同一物理服务器上运行,而每个 VM 都有自己的来宾操作系统时,情况尤其如此。

容器

 

现在探讨容器技术。1979 年,随着 Unix 版本 7 操作系统中 chroot(ibm.com 外部链接)的面世,容器的发展迎来了一个历史性时刻。Chroot 通过将应用程序的文件访问限制为特定的目录(根目录)及其子目录(或子进程),引入了进程隔离的概念。

现代容器被定义为软件的单元,在其中打包了应用程序代码与其所有库和依赖项。这使得应用程序能够在任何环境中(无论是内部还是外部),从桌面、私有数据中心或公有云快速运行。

容器不是虚拟化像虚拟机这样的底层硬件,而是虚拟化操作系统(通常是 Linux 或 Windows)。由于缺少访客操作系统,容器变得轻便,而比虚拟机更快、更可移植。

Borg:Kubernetes 的前身

早在 21 世纪初,Google 就亟需一种方法来充分发挥其虚拟机的性能,以支持其不断增长的基础设施并提供其公有云平台。因此,第一个统一的容器管理系统 Borg 应运而生。Borg 系统于 2003 年至 2004 年间开发,以《星际迷航》中的一群外星人(即 Borg)命名,他们是通过共享一个称为“集体”的蜂巢思维(集体意识)而运作的细胞生物。

Borg 的名字与 Google 项目非常契合。Borg 的大规模集群管理系统本质上充当跨其数据中心运行容器化工作负载的中央大脑。Borg 旨在与 Google 的搜索引擎一起运行,后来用于构建 Google 的互联网服务,包括 Gmail、Google 文档、Google 搜索、Google 地图和 YouTube。

利用 Borg,Google 能够在许多机器上运行来自许多不同应用程序的数十万个作业。这使 Google 能够针对其大规模工作负载,实现高资源利用率、容错能力和可扩展性。如今,Google 仍将 Borg 用作该公司的主要内部容器管理系统。

2013 年,Google 推出了第二代容器管理系统 Omega。Omega 进一步发展了 Borg 生态系统,为大规模计算机集群提供了灵活、可扩展的调度解决方案。同样是在 2013 年,Kubernetes 历史上的一个关键参与者 Docker 开始闪亮登场。

Docker 引领开源容器化

平台即服务 (PaaS) 技术公司 dotCloud 开发的 Docker 于 2013 年作为开源软件工具向大众发布,它允许在线软件开发人员构建、部署和管理容器化应用程序。

Docker 容器技术利用 Linux 内核(操作系统的基础组件)及内核的功能来分离进程,使它们能够独立运行。为了澄清任何混淆,Docker 名称也指 Docker, Inc.(前身为 dotCloud,ibm.com 外部链接),该公司围绕其开源容器化平台以及 Docker 开源生态系统和社区(ibm.com 外部链接)开发了生产力工具。

通过推广轻量级容器运行时,并提供在计算机上打包、分发和部署应用程序的简单方法,Docker 为 Kubernetes 的创始人提供了种子或灵感。当 Docker 出现时,Google 员工 Craig McLuckie、Joe Beda 和 Brendan Burns 对 Docker 能够构建单独的容器并在单独的机器上运行它们而感到非常兴奋。

尽管 Docker 已经改变了云原生基础设施的游戏规则,但它也有局限性,因为它是在单个节点上运行的,因而就不可能实现自动化。例如,由于应用程序是为数千个独立的容器构建的,因此,在不同的环境中管理它们就成了一项艰巨的任务,每个单独的开发都必须手动打包。Google 团队看到了对于容器编排器的需求和机遇,该编排器可以在多台机器上部署和管理多个容器。于是,Google 的第三代容器管理系统 Kubernetes 就诞生了。

Kubernetes 的诞生

许多 Kubernetes 开发人员曾致力于开发 Borg,他们希望构建一个容器编排器,来整合他们在 Borg 和 Omega 系统的设计和开发过程中学到的所有知识,以生成一个不太复杂、具有用户友好型界面 (UI) 的开源工具。为了向 Borg(博格人)致敬,他们以《星际迷航:航海家》中前博格无人机角色的名字,将其命名为“九之七计划”。虽然最初的项目名称没有保留下来,但 Kubernetes 徽标上的七个点(ibm.com 外部链接)就是为了纪念它。

Kubernetes 集群内部

Kubernetes 架构基于正在运行的集群,这些集群可让容器在多个计算机和环境中运行。每个集群通常由两类节点组成:

  • 运行容器化应用程序的工作节点
  • 用于控制集群的控制平面节点

控制平面基本上充当 Kubernetes 集群的编排器,包括多个组件:API 服务器(管理与 Kubernetes 的所有交互)、控制管理器(处理所有控制进程)、云控制器管理器(与云供应商 API 之间的接口)等等。工作节点使用诸如 Docker 的容器运行时来运行容器。Pod 是集群中的最小可部署单元,可容纳一个或多个应用程序容器,并共享存储和网络信息等资源。

Kubernetes 面向公众推出

2014 年,Kubernetes 作为 Borg 的开源版本首次亮相,Microsoft、RedHat、IBM 和 Docker 签约成为 Kubernetes 社区的早期成员。该软件工具包含容器编排的基本功能,包括以下各项:

  • 复制功能,用于部署应用程序的多个实例
  • 负载均衡和服务发现
  • 基本运行状况检查和维修
  • 调度功能,旨在将多台机器组合在一起并向它们分配工作

2015 年,在 O'Reilly 开源大会 (OSCON)(ibm.com 外部链接)上,Kubernetes 创始人发布了 Kubernetes 的扩展和完善版本,即 Kubernetes 1.0。不久之后,Red Hat OpenShift 团队的开发人员加入了 Google 团队,并将他们的工程和企业经验传授给该项目。

Kubernetes 和云原生计算基金会的历史

2015 年,随着 Kubernetes 1.0 的发布,Google 将 Kubernetes 捐献给云原生计算基金会 (CNCF)(ibm.com 外部链接),而该基金会是隶属于非营利性 Linux 基金会的其中一部分。CNCF 由全球顶尖计算公司的众多成员共同创建,其中包括 Docker、Google、Microsoft、IBM 和 Red Hat。CNCF 的使命(ibm.com 外部链接)是“让云原生计算无处不在”。

2016 年,Kubernetes 成为 CNCF 的第一个托管项目;到 2018 年,Kubernetes 成为 CNCF 的第一个毕业项目。积极做出贡献的公司数量迅速增加到 700 多家成员,Kubernetes 也迅速成为历史上发展最快的开源项目之一。到 2017 年,它超越了 Docker Swarm 和 Apache Mesos 等竞争对手,成为容器编排的行业标准。

Kubernetes 和云原生应用程序

在云技术出现之前,软件应用程序与运行它们的硬件服务器密切关联。但在 2018 年,随着 Kubernetes 和容器成为云端售货组织的管理标准,云原生应用程序的概念开始深入人心。这为研究和开发基于云的软件打开了大门。

Kubernetes 有助于开发基于云原生微服务的程序,并允许对现有应用程序进行容器化,从而加快应用程序开发速度。Kubernetes 还提供同时有效管理多个应用程序所需的自动化功能和可观察性。Kubernetes 的声明式、API 驱动式基础设施允许云原生开发团队独立运作,并可提高其工作效率。

Kubernetes 的持续影响

Kubernetes 的历史,以及它作为管理容器化工作负载和微服务的可移植、可扩展、开源平台的作用,仍在继续展现。

自 Kubernetes 于 2016 年加入 CNCF 以来,贡献者数量已增长到 8,012 个—增幅达 996%(ibm.com 外部链接)。CNCF 的旗舰全球会议 KubeCon + CloudNativeCon(ibm.com 外部链接)可吸引数千名与会者,并提供一场年度论坛;该论坛旨在为开发人员和用户提供有关 Kubernetes 和其他 DevOps 趋势的信息和洞察。

在云转型和应用程序现代化一线,Kubernetes 的采用没有展现出任何放缓的迹象。根据 Gartner 的报告《首席技术官的容器和 Kubernetes 指南》(ibm.com 外部链接),到 2027 年,全球超过 90% 的组织将在生产中运行容器化应用程序。

IBM 和 Kubernetes

早在 2014 年,IBM 就是最早与 Kubernetes 开源社区联手,为企业带来容器编排的大公司之一。如今,IBM 正通过实施 Kubernetes 容器编排和其他基于云的管理解决方案,帮助企业驾驭其正在进行的云之旅。

无论您的目标是云原生应用程序开发、大规模应用程序部署,还是管理微服务,我们都可以帮助您充分利用 Kubernetes 及其众多用例。

借助 Red Hat OpenShift on IBM Cloud,开发人员能够以快速、安全的方式,在 Kubernetes 集群中容器化和部署企业工作负载。

IBM Cloud Code Engine 是一个完全托管的无服务器平台,支持您在完全托管的容器运行时上运行容器、应用程序代码或批处理作业。

 

作者