Kubernetes 集群迭代更新过程中 API接口的兼容机制

2020-08-14 0 By admin

API Server 另一处精彩设计之处,就是对API接口的版本升级(系统资源对象的不断变化)处理方式。

一、系统迭代更新带来的问题

我们知道,对于不断迭代更新的系统,对象的属性一定是不断变化的,API接口的版本也在不断升级,此时就会面临版本问题。

  1. 同一个对象不同版本之间数据转换问题
  2. API接口版本兼容问题

二、问题分析

第二个问题解决起来比较容易,即定义不同的API版本号(比如 v1alpha1、v1beta1)来加以区分。
但前面的问题就有点麻烦了。
比如数据对象历经 v1alpha1、v1beta1、v1alpha2、v1beta2 等变化后最终变成了 v1 版本;此时该数据对象就存在 5 个版本。

三、经典网状网络解决方式

如果5个版本间的数据两两直接转换,就存在很多种逻辑组合、变成一种经典的网状网络,为此我们就不得不增加很多重复的转换代码。
上述直接转换的设计模式还存在另一个不可控的变数,即每增加一个新对象版本,之前每个版本的对象就都需要增加一个到新版本对象的转换逻辑。如果一来,对直接转换的实现就更难了。

对象版本转换的拓扑图
对象版本转换的拓扑图

四、星状拓扑图

于是,API Server 针对每种资源对象都引入了一个相对不变的 internal(内部) 版本。,每个版本只要支持转换为 internal 版本,就能够与其他版本进行间接转换。于是对象版本转换的拓扑图就简化为星状图。

星状拓扑图
星状拓扑图