从 Beta 版向前迈进
在 Kubernetes 中,功能遵循定义的生命周期。首先,作为感兴趣的开发人员眼中的一丝闪光。然后,可能会在在线讨论中勾勒出来,或者在类似于咖啡馆餐巾的在线页面上绘制出来。这种粗略的工作通常会变成Kubernetes 增强提案(KEP),然后通常会转化为代码。
对于 Kubernetes v1.20 及更高版本,我们专注于帮助该代码逐步演变为稳定的功能。
我提到的生命周期如下
通常,alpha 功能默认不启用。您可以通过设置功能门来启用它们;通常,通过在每个使用该功能的组件上设置命令行标志。
(如果您通过托管服务(例如 AKS、EKS、GKE 等)使用 Kubernetes,则运行该服务的供应商可能已决定为您启用哪些功能门)。
有一个定义明确的流程,用于将现有的 alpha 功能升级到 beta 阶段。这很重要,因为beta 功能默认启用,功能标志仍然存在,因此集群运营商可以根据需要选择禁用。
一组类似但更彻底的升级标准控制着向普遍可用性(GA)的过渡,也称为“稳定”。GA 功能是 Kubernetes 的一部分,并承诺在当前主要版本中保持不变。
默认启用 beta 功能可让 Kubernetes 及其贡献者获得有价值的真实世界反馈。但是,存在激励措施不匹配的情况。一旦默认启用某个功能,人们就会使用它。即使可能有一些细节需要解决,Kubernetes 的 REST API 和约定工作方式意味着任何未来的稳定 API 都将与最新的 beta API 兼容:当 beta 功能升级为 GA 时,您的 API 对象不会停止工作。
特别是对于 API 及其资源,与从 alpha 到 beta 相比,从 beta 到 GA 的功能移动的激励要弱得多。想要特定功能的供应商有充分的理由来帮助代码达到默认启用功能的程度,而除此之外的旅程则不太明确。
KEP 跟踪的不仅仅是代码改进。本质上,任何需要与更广泛的社区沟通的事情都值得 KEP。也就是说,大多数 KEP 都涵盖了 Kubernetes 功能(以及实现它们的代码)。
您可能知道Ingress 已在 Kubernetes 中存在一段时间了,但是您是否意识到它实际上在 2015 年就进入了 beta 版本?为了帮助推动工作,Kubernetes 的架构特别兴趣小组(SIG)有一个新的方法。
避免永久 beta
对于 Kubernetes REST API,当新功能的 API 达到 beta 版本时,将开始倒计时。beta 质量的 API 现在有三个版本(大约九个日历月)来
- 达到 GA,并弃用 beta 版本,或者
- 拥有一个新的 beta 版本(并弃用先前的 beta 版本)。
需要明确的是,此时只有 REST API 受到影响。例如,APIListChunking 是一个 beta 功能,但它本身不是 REST API。目前,没有计划自动弃用 APIListChunking 或任何其他不是 REST API 的功能。
如果 beta API 在三个 Kubernetes 版本之后没有升级到 GA,则下一个 Kubernetes 版本将弃用该 API 版本。在发布窗口之后发布的第一个 Kubernetes 版本之后,REST API 没有选择保持在相同的 beta 版本。
这对您意味着什么
如果您正在使用 Kubernetes,则很可能正在使用 beta 功能。就像我说的那样,有很多这样的功能。除了 Ingress 之外,您可能正在使用CronJob或PodSecurityPolicy或其他。您更有可能在启用了至少一个 beta 功能的控制平面上运行。
如果您正在使用或生成使用 beta API(如 Ingress)的 Kubernetes 清单,则需要计划修改这些清单。当前的 API 将按照计划(我之前提到的 9 个月)被弃用,并在再过 9 个月后删除这些弃用的 API。那时,为了与 Kubernetes 保持同步,您应该已经迁移。
这对 Kubernetes 贡献者意味着什么
这里的动机似乎很明确:使功能稳定。保证 beta 功能将被弃用会增加一个很大的激励,以便想要该功能的人们继续努力,直到代码、文档和测试都准备好使该功能升级到稳定版,并获得多个 Kubernetes 版本在真实世界使用中的证明。
这对生态系统意味着什么
我认为,这些看似严厉的措施很有意义,并且对 Kubernetes 有好处。通过适用于所有不同特别兴趣小组(SIG)的规则来弃用现有 API 有助于避免停滞并鼓励修复。
假设一个 API 进入 beta 版本,然后实际经验表明它根本不正确 - 从根本上讲,该 API 存在缺陷。随着 9 个月倒计时的进行,相关人员有手段和理由来修订和发布可以解决问题的 API。欢迎任何想要使用已弃用 API 的人 - Kubernetes 是开源的 - 但他们的需求不必阻碍该功能的进展。