Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它通过抽象底层基础设施,实现了跨云平台的应用调度和资源管理。
Kubernetes 的核心功能是应用编排 (Application Orchestration)。它能够自动化地执行应用的部署、扩缩容、健康检查和故障恢复等运维任务,从而显著降低运维复杂度。

在深入 Kubernetes 之前,需要理解几个关键概念:容器化、云原生和微服务架构。
容器化是一种应用打包和部署技术。与传统的应用部署方式相比,容器化应用将应用及其运行时依赖(包括库、配置文件等)打包在一个轻量级的、可移植的容器镜像中。
容器技术提供了环境一致性:无论是在开发环境、测试环境还是生产环境,容器都能保证应用运行在相同的环境中。这种特性解决了"在我机器上能运行"的经典问题。
云原生是一种构建和运行应用的方法论,而非指应用必须运行在公有云上。遵循云原生原则构建的应用具备以下特征:
云原生应用可以在公有云、私有云或混合云环境中运行,关键在于应用架构和部署方式,而非运行位置。
微服务架构是一种将单体应用拆分为多个独立、可独立部署的小型服务的架构模式。每个微服务专注于特定的业务功能,例如用户认证、商品管理、订单处理等。
微服务架构的优势包括:
因此,当描述"Kubernetes 是一个云原生微服务应用的编排器"时,其含义是:
Kubernetes 专门用于编排和管理那些采用容器化部署、基于微服务架构设计、并遵循云原生原则构建的现代化应用。
Kubernetes 的诞生与 Google 的大规模容器管理经验密切相关。在 Docker 使容器技术普及之前,Google 内部已有超过十年的容器化应用运行经验。Google 搜索、Gmail 等核心服务均由大量容器支撑运行。
为了管理这些容器,Google 内部开发了两套容器编排系统:Borg 和 Omega。这两套系统为 Google 的大规模容器管理提供了关键支撑。
2014年,Google 基于 Borg 和 Omega 的设计经验,开发了 Kubernetes 并将其开源。同年,Kubernetes 被捐赠给新成立的云原生计算基金会(CNCF)。
需要澄清的是,Kubernetes 并非 Borg 的开源版本。虽然两者在设计理念上存在相似性,但 Kubernetes 是从零开始构建的,专门为开源社区和云原生生态系统设计。它借鉴了 Borg 和 Omega 的宝贵经验,但采用了更适合开源社区的技术架构。
此后,Kubernetes 迅速发展,成为云原生领域的事实标准。在容器编排平台的竞争中,Kubernetes 逐渐超越了 Docker Swarm 等竞争对手,确立了其行业主导地位。
理解 Kubernetes 与 Docker 的关系对于掌握容器生态系统至关重要。
Docker 是一个容器运行时和容器镜像构建工具,负责容器的创建、运行和管理。而 Kubernetes 是一个容器编排平台,负责在集群层面管理多个容器,包括调度、服务发现、负载均衡、自动扩缩容等。
在典型的 Kubernetes 生产环境中,每个节点上运行着容器运行时(如 Docker 或 containerd),负责容器的实际执行。Kubernetes 控制平面则在更高层次进行编排决策,包括:
两者形成了互补关系:Docker 等容器运行时提供容器执行能力,Kubernetes 提供集群级别的编排能力。
Kubernetes 一词源于希腊语,意为“舵手”或“领航员”,这一含义也体现在其 Logo 设计中——一个船舵图案。
值得注意的是,“Kubernetes” 包含 10 个字母,为便于书写和记忆,社区采用了数字缩写形式:取首字母 K 和尾字母 s,中间 8 个字母用数字 8 代替,形成了 K8s(发音为 Kates)这一常用缩写。 Logo 上的七个舵柄设计,据称是为了向《星际迷航》中的角色 “Seven of Nine” 致敬,该名称曾是 Kubernetes 的候选名称之一。
Kubernetes 常被称为“云时代的操作系统”,这一类比有助于理解其核心定位。

传统操作系统(如 Linux、Windows)运行在单台物理服务器上,通过抽象底层硬件资源(CPU、内存、存储、网络),为上层应用提供统一的运行环境。应用开发者无需关心硬件的具体型号和配置。
类似地,Kubernetes 运行在由多台服务器组成的集群之上,通过抽象整个集群的计算、存储和网络资源,为云原生应用提供统一的部署和管理平台。应用开发者无需关心应用运行在哪个具体的物理节点或云平台上。
正如传统操作系统实现了跨硬件平台的应用兼容性,Kubernetes 实现了跨云平台的应用可移植性。无论是 AWS、Azure、GCP 等公有云,还是私有数据中心,Kubernetes 都能提供一致的部署和管理体验,真正实现了"一次构建,随处运行"(Build Once, Run Anywhere)。
在云原生时代,应用规模呈指数级增长。传统环境中可能管理数百个虚拟机,而现代云原生应用可能需要管理数万个容器实例。这种规模下的手动管理已不可行,必须依赖自动化平台。
Kubernetes 正是为解决大规模容器管理问题而设计。它提供了:
Kubernetes 采用声明式(Declarative)配置模型。开发者通过 YAML 或 JSON 格式的配置文件,声明应用的期望状态(Desired State),而非具体的执行步骤。
Kubernetes 控制平面会持续监控实际状态,并自动执行必要的操作,使实际状态与期望状态保持一致。这种模式的优势包括:
Kubernetes 是 Google 基于其多年大规模容器管理经验开发的开源项目,现已成为云原生应用部署和管理的行业标准。
作为云时代的操作系统,Kubernetes 通过抽象底层基础设施,实现了跨云平台的无缝管理和应用迁移。其声明式部署模型和自动化运维能力,显著降低了大规模容器化应用的运维复杂度。
Kubernetes 是一个快速发展的项目,持续演进是其核心特征。作为学习者,应保持持续学习的态度,关注社区动态和最佳实践,以充分发挥 Kubernetes 在云原生应用管理中的优势。