案例库 · 软件与 IT · 技术决策 · 2014–2018
Kubernetes让部署变成声明式,容器成为默认平台
谷歌的Kubernetes借鉴了Borg的设计:声明期望状态,让控制循环使现实与期望一致
Google · CNCF
那一手
谷歌在容器流行之前就已经大规模运行Linux容器十年之久。其Borg系统在多达数万台机器的集群中管理着数十万个作业,使用声明式作业规范语言,并在实例死亡时自动重启和重新调度。
Kubernetes于2014年开源,将Borg的经验带到了谷歌之外:一个共享的持久存储,一个带版本控制和验证的领域特定REST API,以及每个对象上统一的Spec/Status结构。设计目标是让复杂的分布式系统易于部署和管理,同时保持容器带来的利用率提升。
由于控制器只是比较期望状态和实际状态,并对差异采取行动,平台天生具有自愈性和可扩展性:自动缩放器只调整期望的副本数,而不触及协调机制。这一抽象成为行业默认。
为什么管用
- 声明式规范意味着同样的YAML能在任何符合规范的集群上运行,消除了可移植性成本
- 统一的对象API让用户、内部组件和自动化都能驱动同一个系统
- 控制循环让滚动更新、健康检查和扩展成为同一机制的特性,而不是专门的代码
- 在CNCF下开源让每个供应商都有平等地位,云巨头在服务上竞争,而不是锁定用户
值了多少声明期望状态;循环协调现实聪明
可以搬走什么
提供声明式契约而非命令式脚本:用户说想要什么,机制负责怎么做。这个契约正是Kubernetes成为每个云都能采用的抽象的原因。
后来呢
Kubernetes成为事实上的容器编排标准;每个主要云都提供托管版本,CNCF调查将其列为最广泛使用的平台之一。Borg仍是谷歌内部系统,但其公开后代标准化了行业部署软件的方式。
资料来源
- Large-scale cluster management at Google with Borg (abstract)
- Borg, Omega, and Kubernetes
- Kubernetes Overview
发现哪里写错了?告诉我们。