什么是 Kubernetes?

Alan Zeichick | 高级撰稿人 | 2025 年 9 月 5 日

Kubernetes 是一个开源平台,用于管理包含大量容器化服务的超大型应用。Kubernetes 由 Google 工程师于 2014 年开发,并在不久后以开源形式发布,如今已成为一个蓬勃发展的生态系统,几乎得到所有云技术服务提供商的支持。Kubernetes 既可用于管理基于微服务构建的云原生应用,也可用于管理运行在本地或云端的传统应用。

Kubernetes 的强大之处部分在于其自动化能力 — 它能大幅减少在网络中管理应用所需的工作量。

什么是 Kubernetes?

Kubernetes 是一个开源系统,用于部署、管理和缩放容器化应用,特别是基于微服务架构开发的云原生应用。Kubernetes 有时缩写为 K8s,支持管理员将容器组织为集群,从而更易于管理。

Kubernetes 能做什么?首先,它能部署容器 — 容器中可以运行完整应用,也可以是应用的某个组件(通常称为服务)。这些容器会被部署到服务器上,服务器可以位于云端、本地环境,也可以分布在多云配置下的多个云技术平台,或是混合云/本地配置结合的架构中。

容器部署完成后,Kubernetes 会提供发现能力,使应用或服务能够找到其他容器中它所需要的服务。Kubernetes 会将流量导向其管控下的正确资源。如果系统为应对高并发需求而运行了多个容器化应用或服务的副本,Kubernetes 会自动平衡负载。

Kubernetes 的强大之处在于,它可以按照部署的合理需求对容器进行分组。例如,它可以将共享同一存储和网络的若干容器组合成一个 pod(容器组)— 这是您经常会看到的术语。您还会看到 Kubernetes 节点的相关表述。节点是承载容器的独立机器,可以是物理服务器或传统虚拟机。运行着 Kubernetes 的一组节点集合(即一组物理或虚拟容器所在的集群),被称为集群。

针对每一个容器、pod、节点和集群,Kubernetes 都会管理存储资源,检测并重启故障容器(这个过程称为“自我修复”),甚至可以在分布式应用中统一实施安全协议。它可被配置用于管理密码、安全令牌和加密密钥,让关键资产的保护变得更轻松。

Kubernetes 平台的开发由云原生计算基金会 (CNCF) 负责监督。

容器与虚拟机对比

容器通常会取代另一种云部署模式:虚拟机 (VM)。容器比 VM 更轻量,因为它们共享主机服务器的底层操作系统和设备驱动程序。相比之下,VM 规模更大,且需要更多处理资源,因为每个 VM 都包含独立的操作系统。因此,一台服务器可以运行更多的容器,更重要的是,能将更多处理器和内存资源用于运行应用,而非维护多个操作系统实例(每个 VM 一个)。虽然在某些特定场景下仍需要使用 VM,但对大多数云技术应用部署而言,容器是效率高得多的方案。

Kubernetes 与容器对比

Kubernetes 和容器虽然相关,但它们被视为互补技术。Kubernetes 是一个容器管理平台,通常用于部署成百上千个容器的大规模场景。而容器本身,是将某项功能(无论是微服务还是完整应用)所需的全部代码和依赖项,打包成一种可执行的格式。

Kubernetes 是一款同时管理大量容器的工具,通常用于云端。Kubernetes 有时也称为云操作系统,能够帮助企业规模化地管理容器。

关键要点

  • Kubernetes 通过自动部署、缩放甚至修复和重启容器,对大规模云端容器部署进行编排管理。
  • 通过充分利用云资源,Kubernetes 可以降低企业应用的部署成本。
  • Kubernetes 提供一个丰富的生态系统,包含构建、部署容器化应用以及在生产环境中管理容器所需的全部能力。

Kubernetes 详解

Kubernetes 是一个能够自动部署、缩放和管理容器的平台。Kubernetes 还具备容器自我修复能力,即检测容器故障并进行修复。Kubernetes 的核心就是编排:就像交响乐团指挥引导乐手一样,它清楚需要执行的任务,让所有容器稳定就位、正常运行,并在出现异常时及时处理。

正如交响乐团指挥依照乐谱指挥钢琴、小提琴、大提琴和铜管乐器声部演奏,Kubernetes 也依靠一份文档来定义应用容器的预期状态。这份文档称为配置文件,它描述了应用正常运行所需的功能,并指定由哪些容器提供这些功能。配置文件中还会列出可供应用容器使用的服务器、存储设备、网络及其他物理机器资源。

启动应用时,Kubernetes 会根据配置文件将所需容器加载到可用服务器上,然后在容器内运行软件。它会监控每台服务器(或称节点)的资源使用情况,确保系统不会过载。如果服务器负载过高,它会在负载较低的服务器上启动新容器,再停止旧容器,实现容器迁移。如果某个容器本身过载,Kubernetes 会在另一台服务器上启动完全相同的容器副本,并自动配置负载均衡器来分配工作负载。随着需求增长,它会根据需要启动第三个、甚至更多容器。当工作负载下降时,Kubernetes 会关闭多余容器,以节约成本、释放服务器资源供其他任务使用。

当容器发生故障时,Kubernetes 会迅速在另一台服务器上启动新容器,并将网络流量从故障区域切换走,从而实现快速故障转移。

为何要使用 Kubernetes?

想象一下,您有一个需要成百上千个容器的应用,每个容器都为该应用提供所需服务。系统管理员可以手动部署和管理这些容器,也可以借助自动化工具完成负载均衡、故障检测等特定任务。事实上,市场上确实存在用于小规模容器部署管理的工具,这类工具通常被软件开发人员和 DevOps 团队用于构建和测试容器化软件。

然而,如果没有一套更完善的编排系统,系统管理的工作量最终会变得难以承受。

Kubernetes 的优势在于,它是一个统一平台,能够处理从容器部署、缩放到故障修复的全流程自动化任务。此外,Kubernetes 是开源项目,获得了广泛支持,包括所有主要云技术服务提供商。简而言之,它无处不在。这使得 Kubernetes 成为管理大型企业级容器化应用的首选系统。

使用 Kubernetes 的优势

当企业决定将应用容器化时,采用 Kubernetes 来编排这些容器是非常合理的选择 — 尤其是考虑到它能带来广泛的收益。

  • 高可用性:Kubernetes 专为高可用性 (HA) 而设计。它具备自动修复故障容器的功能,可在同一台或另一台服务器上重启容器,这是实现高可用性的一环。Kubernetes 还能够启动一个容器的多个副本,将它们部署在不同服务器乃至不同数据中心,并在这些副本之间分配工作负载,这同样是高可用性的重要体现。额外特性:如果您要对容器化应用进行软件更新,可配置 Kubernetes 逐步发布更新后的容器。一旦检测到故障,它能够回滚到上一个版本。
  • 隔离:每个容器都在自身独立的环境中运行,为应用执行提供安全、受保护的空间。这种隔离机制旨在防止外部干扰和资源冲突,有助于保障应用的稳定性和完整性。Kubernetes 在自动化容器部署和在容器之间路由网络流量时,会严格遵循配置文件运行,因此能额外减少可能影响服务可用性的人为操作失误,提供多一层保护。
  • 可移植性:容器可以在不同类型的服务器乃至不同云技术平台之间轻松迁移。唯一的实际限制是,容器必须针对特定操作系统构建。例如,为 Linux 编写的容器内软件必须运行在 Linux 服务器上,为 Windows 编写的容器内软件必须运行在 Windows 服务器上。在这一限制范围内,Kubernetes 可以在服务器、数据中心甚至不同云技术平台之间迁移容器。事实上,Kubernetes 能够自动管理由跨多个数据中心和云技术服务提供商的容器所组成的大型应用。
  • 资源效率:容器并不太了解它所运行的服务器。相比之下,Kubernetes 可以监控每台服务器的处理器、内存、存储和网络资源使用情况。它能够在服务器之间部署和迁移容器,以充分提高服务器利用率,帮助降低成本。Kubernetes 还仅在必要时启动新容器,并在不再需要时将其关闭,这同样可以降低成本。
  • 可扩展性:我们可以用超市收银员来打个比方。如果某个收银台排队太长,经理就会增开一个收银通道。同理,如果某个容器化软件负载过高,Kubernetes 能够检测到这一情况,并启动另一个提供相同服务的相同容器,在两个容器之间分担工作负载。事实上,如有需要,它还能再启动上百个相同的容器。这一切都是自动完成的。

Kubernetes 架构的关键组件

创造 Kubernetes 的 Google 工程师们是根据古希腊语中“领航员”(或“舵手”,也就是操控船只航向的人)一词来命名它的,因为 Kubernetes 负责调度和管理一整支容器“舰队”。就像真正的集装箱货轮一样,Kubernetes 依赖众多组件协同工作,才能将数据“货物”运送到指定位置。下面是在讨论容器与 Kubernetes 编排平台时,您常会遇到的术语。

  • 集群:集群是一组被称为节点的机器,用于运行由 Kubernetes 管理的容器化应用。集群通常由一个主节点和多个工作节点组成。
  • 节点:节点是构成 Kubernetes 集群的虚拟机或物理机。
  • pod:pod 是运行在 Kubernetes 集群上的单个容器或一组容器。pod 是 Kubernetes 中的基本部署单元;一个 pod 包含一个或多个容器(这些容器保证会被部署在同一个节点上)。
  • 控制平面:控制平面包含 Kubernetes API 服务器、Kubernetes 调度器、Kubernetes 控制器管理器、应用控制器和云控制器管理器。它负责管理整个集群中的节点和 pod,以实现高可用性。
  • 容器:容器是封装有软件及其依赖项的映像,是容器化技术的基础。
  • 部署:部署可管理以 pod 形式呈现并部署在集群节点上的应用副本。
  • 副本集:副本集是同时运行相同服务的若干 pod 副本,为其所有容器提供冗余和高可用性。
  • 服务:服务描述了如何访问以一组 pod 呈现的应用。服务通常与负载均衡器配合使用,以优化对集群的内部和外部访问。

Kubernetes 的主要特性

Kubernetes 不仅仅是一个容器管理平台,它还是一款成熟的编排工具,能够自动化并简化从设计、部署到生产使用的整个应用生命周期。其强大的功能集有助于高效管理复杂的分布式应用。以下是 Kubernetes 的部分关键特性:

  • 容器编排:Kubernetes 自动化容器的部署、缩放和维护。它智能地管理容器的调度分配,优化资源利用率并实现高效的负载均衡。
  • 自我修复和自动缩放:Kubernetes 能够自动检测故障并做出响应,快速重启、复制或重新调度容器,保障应用的健康和可用性。
  • 服务发现和负载均衡:Kubernetes 通过内置的服务发现能力实现容器间通信,同时提供负载均衡功能,将外部流量分发到多个容器,以提供高可用性并提高资源使用效率。
  • 存储编排:Kubernetes 简化存储管理,支持应用访问本地、公有云和私有云环境中的各种存储系统。
  • 自动发布和回滚:Kubernetes 自动化了新版本软件的发布流程,将更新逐步引入生产环境。如果出现问题,它可自动回滚至上一稳定版本,尽可能减少对用户的影响。
  • 配置管理:Kubernetes 简化了配置管理,集中管理多个环境下的应用配置,同时简化了更新和维护。
  • 声明式配置和自动化:Kubernetes 使用配置文件(通常称为 YAML 文件。根据不同时期的定义,YAML 可能代表 "YAML Ain’t Markup Language",即,不是标记语言,也可能代表 "Yet Another Markup Language",即另一种标记语言)。YAML 是一种可读的数据格式,文件既能被 Kubernetes 识别,也便于人工理解,用于描述完整应用的状态,并通过自动化方式管理应用容器。
  • 存储和数据管理:Kubernetes 可创建持久化存储卷,在集群内独立于特定 pod 或容器进行存储分配和管理,并可根据需要分配给特定任务。持久化存储卷能够更轻松地满足应用的数据管理需求。

采用 Kubernetes 的常见挑战

尽管 Kubernetes 已经经过多年打磨,但它仍然存在陡峭的学习曲线。不过,花时间学习 Kubernetes,也远比使用其他方式来管理大型分布式应用要好得多。以下是需要考虑的一些挑战:

  • 部署和管理的复杂性:大型应用中存在大量动态组件,包括软件要求和其运行所需的基础设施。Kubernetes 配置文件需要适配集群缩放、自我修复、故障转移、监控和日志、系统组件升级方案等一系列事务。
  • 安全风险和合规缺口:容器和容器化应用可以具备很高的安全性,但这种安全性并非自动实现的。例如,必须在 Kubernetes 内正确配置网络策略,以保护应用的各个部分免受集群内部或外部的恶意访问。如果涉及密码和加密密钥,则必须对其进行保护,而不是存储在 YAML 配置文件这类易于读取的文档中。容器映像库也必须加以防护,防止被篡改。并且所有这些措施都需要妥善记录归档。
  • 网络复杂性:简单来说,即便是中型容器化应用,其网络复杂性在没有自动化的情况下也难以管理。更不用说当应用拥有数十万 pod、每个 Pod 又包含多个容器,同时还要连接内部和外部存储、其他应用、最终用户、互联网等场景。如果应用跨多个数据中心甚至多个云技术平台,情况会更加复杂。Kubernetes 可以辅助网络配置,但仍需要人工做出决策。在超大规模 Kubernetes 部署中,网络配置问题往往难以排查和修复。

Kubernetes 使用场景

企业将 Kubernetes 用于各类应用,涵盖电商、制造、科研、金融、公共事业等几乎所有行业。许多使用容器的大型分布式应用,都能从 Kubernetes 的编排和自动化能力中受益。以下是 Kubernetes 能真正发挥优势的几个常见场景。

  • 互联网级微服务架构:一个复杂的 Web 应用通常由成百上千个微服务组成,负责处理用户身份验证、会话管理、搜索、购物车、支付、库存管理和 AI 驱动的推荐引擎等任务。Kubernetes 会将每类微服务隔离在独立的 pod 中,并对这些服务进行独立管理。
  • 高流量应用的弹性扩展:Kubernetes 可通过动态分配新容器和负载均衡来快速应对工作负载变化,实现高流量应用服务的扩展。Kubernetes 能根据资源利用率(如容器 CPU 或内存超出阈值、服务器接近满载)自动扩展,并在需求减少时缩减。这既能保证应用性能(如指定的响应时间),又能在低峰期减少资源消耗。
  • 更安全的软件更新部署:Kubernetes 与众多采用连续集成/连续部署 (CI/CD) 模式的软件开发工具集成,用于企业软件的迭代优化。Kubernetes 可通过新容器逐步发布更新,出现问题时快速回滚至旧版本,甚至能并行运行两个版本并对比性能。

Kubernetes 和人工智能

Kubernetes 与 AI 结合能为企业带来变革性影响,因为 Kubernetes 在云端 AI 工作负载的管理和编排中发挥着关键作用。具体而言,Kubernetes 为 AI 模型的训练和部署提供了稳定且灵活的平台,并具备多项优势:

  • 自动化:Kubernetes 可以自动部署和更新 AI 模型。
  • 容器化:Kubernetes 支持将 AI 模型及其依赖项打包到容器中,确保性能一致并能在各种环境中轻松部署。这种可移植性对 AI 至关重要,因为它允许模型在不同场景下进行训练和部署。
  • 高可用性:对于作为基本业务流程支柱的 AI 应用而言,高可用性至关重要。Kubernetes 的自我修复功能能够自动检测和响应故障,为 AI 应用提供高可用性。
  • 可扩展性:AI 应用通常需要大量计算资源,尤其是在训练和大规模推理阶段。Kubernetes 可根据需求动态缩放 AI 工作负载,实现理想的资源利用率和成本效率。

拥抱 Kubernetes 生态系统

过去十年间,Kubernetes 被广泛采用,催生了由各种工具、服务和支撑技术构成的繁荣的生态系统。这一生态系统进一步增强了 Kubernetes 的能力,为企业提供了多样化选择,使其能够定制基础设施和开发流程。该生态系统的主要类别包括:

  • CI/CD 工具:持续集成/持续部署类工具可与 Kubernetes 集成,实现构建、测试和部署流程的自动化,打造高效的开发生命周期。
  • 容器注册表:这些工具作为集中式仓库,用于存储和管理容器映像。这些注册表可与 Kubernetes 无缝集成,助力轻松部署和管理容器化应用。
  • 监控和日志工具:为了实现高效的追踪和分析,Kubernetes 与数十种监控和日志系统集成,帮助了解应用性能、运行状态和潜在问题。
  • 安全解决方案:Kubernetes 还与各种安全工具集成,包括容器原生防火墙和运行时防护工具。这些系统能够加固运行在 Kubernetes 上的应用,防范潜在威胁和安全漏洞。

如果要讨论 Kubernetes 生态系统,却不提及 KubeCon 这个由 云原生计算基金会 (CNCF) 举办、面向 Kubernetes 开发人员和用户的年度大会,那便是不完整的。自 2015 年首届 KubeCon(500 名参会者)召开以来,该大会的规模已大幅增长。2024 年,在盐湖城举办的会议吸引了超过 9000 名开发人员和工程师参会。

5 个部署优秀实践

Kubernetes 的优秀实践足以写成一本书 — 事实上,相关书籍已经有很多了。千万别搞错:Kubernetes 是复杂的。不过,遵循这些优秀实践能够帮助企业成功地利用这个平台。

  1. 优化资源分配。 在任何时刻,您都不会希望为应用超出实际需求的服务器、计算、存储和网络资源付费。充分利用 Kubernetes 的能力,基于实时指标和实际使用情况自动对集群和 pod 进行缩放。
  2. 实施观测和日志管理。 想要全面掌握大型企业应用的运行状况十分困难。可使用优质的可视化工具进行日志聚合,将所有性能和故障报告数据集中在同一位置。这些工具不仅能提供包含丰富指标的报告和仪表盘,还能基于聚合数据实现链路追踪。
  3. 实施 GitOps 和基础设施即代码。 GitOps 是一种云基础设施供应流程,它将网络设计保存在配置文件中,并存储在 Git 仓库里。Git 是一款受欢迎的开源软件配置管理系统。这类配置文件被称为基础设施即代码 (IaC),Kubernetes 会通过这些文件创建由服务器、存储和连接资源组成的网络。
  4. 增强安全性和合规性。 采用基于角色的访问控制 (RBAC) 和零信任计算方法构建“默认最小权限”的网络环境,即使容器内运行恶意软件或被入侵的软件,也能有效抵御攻击。请咨询您的法务部门,明确为满足合规要求需要留存哪些审计日志和配置文件。
  5. 简化多云部署。 Kubernetes 支持跨多个数据中心、多云环境自动化部署和编排大型应用。此类部署在架构设计、管理和故障排查上本身就较为复杂,应尽可能通过抽象层、集中式身份管理和云技术无关的存储系统简化部署。您可以借助 GitOps 和 IaC 在多个数据中心和不同的云技术平台上供应完全一致的网络环境。

利用 Oracle 解决方案简化 Kubernetes 管理

OCI Kubernetes Engine (OKE) 是由 Oracle 托管的容器编排服务,可缩短构建云原生应用的时间并降低成本。OKE 有助于简化企业级 Kubernetes 的大规模运营,助力您轻松部署和管理 AI 等资源密集型工作负载,并实现自动缩放、打补丁和升级。OKE 提供:

  • 自动缩放:OKE 会根据应用负载自动调整计算资源,从而降低成本。
  • 效率:处理器(包括用于 AI 工作负载的前沿模型)可能较为紧缺,而 OKE 作业调度可帮助您充分提高资源利用率。
  • 可移植性:OKE 在多云环境及您本地数据中心的部署体验保持一致,从而实现可移植性并避免供应商锁定。
  • 简单性:OKE 可减少管理复杂 Kubernetes 基础设施所需的时间和费用。
  • 可靠性:自动升级和安全补丁可提高企业应用的可靠性。

Kubernetes 平台能够编排和自动执行应用部署和管理,彻底变革了云原生时代的应用运行方式。随着 Kubernetes 持续发展并不断普及,其重要性日益凸显。拥抱 Kubernetes 的企业能够获得显著的竞争优势,因此无论是开发人员还是企业管理者,掌握这项技术都至关重要。

Kubernetes 对云原生开发非常重要,它是打造更具弹性、可扩展性和敏捷性应用的关键 — 无论这些应用运行在云端、本地还是混合云或多云模式中。

Kubernetes 常见问题解答

为什么 Kubernetes 是企业云战略的关键组成部分?

Kubernetes 之所以至关重要,是因为它是企业部署、缩放和管理分布式应用的重要方式,尤其是在云中运行的应用。Kubernetes 的自动化能力在提升应用可靠性的同时,还能充分提高资源利用率,从而降低成本。

企业在大规模采用 Kubernetes 时,应考虑哪些关键因素?

主要有两大因素需要考虑。第一是组织准备度:工程师和开发人员是否已准备好接受这种应用开发和部署模式?第二是技术层面:是否具备合适的架构方案,能够以安全、稳定且符合治理要求的方式设计和部署 Kubernetes 和容器?

企业大规模运行 Kubernetes 时,主要的成本考量有哪些?

Kubernetes 可以通过充分利用云技术资源、在闲置时释放服务器和存储等资源来帮助降低成本。但与此同时,企业还需要承担培训、工具采购以及为充分利用资源而优化网络和应用模型所产生的相关成本。

企业如何确保从传统基础设施平稳过渡到 Kubernetes?

这是一次重大转型!可以先从一个已经运行在单个或少数容器中的小型应用入手,引入 Kubernetes。可考虑优先选择基于云技术的 Kubernetes 服务,由服务提供商代为管理数据层,而不是一开始就自行学习、部署和运营所有组件。通过尝试升级、回滚、监控、模拟故障等操作,帮助团队积累经验,以便后续负责更大型的项目,例如将单体应用重构为基于微服务的应用。

注:为免疑义,本网页所用以下术语专指以下含义:

  1. 除Oracle隐私政策外,本网站中提及的“Oracle”专指Oracle境外公司而非甲骨文中国。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。