从Beta向前迈进

作者:蒂姆·班尼斯特(Tim Bannister),规模工厂

在Kubernetes中,功能遵循定义的 生命周期. 首先,作为感兴趣的开发人员的转瞬。那也许吧 在线讨论中绘制的草图,绘制在咖啡馆的在线等效位置上 餐巾。这项艰苦的工作通常会变成 Kubernetes增强建议 (KEP),以及 从那里通常变成代码。

对于Kubernetes v1.20及更高版本,我们专注于帮助该代码 逐步转变为稳定的功能。

我提到的生命周期如下:

Alpha→Beta→一般可用性

通常,默认情况下不启用alpha功能。您可以通过设置功能来开启它们 门;通常,通过在每个使用 feature.

(如果您通过托管服务产品(例如AKS,EKS,GKE等)使用Kubernetes,则 运行该服务的供应商可能已经决定为您启用哪些功能门。

有一个将现有的Alpha功能升级到Beta阶段的定义过程。 这很重要,因为 Beta功能默认情况下处于启用状态,功能标记仍然 因此,集群运营商可以根据需要选择退出。

一套类似但更彻底的毕业标准控制着向普通课程的过渡 可用性(GA),也称为“稳定”。 GA功能是Kubernetes的一部分, 承诺他们将在当前的主要版本中保持不变。

默认情况下启用Beta功能使Kubernetes及其贡献者变得有价值 真实世界的反馈。但是,激励措施不匹配。启用功能后 默认情况下,人们会使用它。即使可能有一些细节需要解决, Kubernetes的REST API和约定的工作方式意味着未来任何稳定的API都会使用 与最新的beta API兼容:您的API对象在以下情况下不会停止工作 Beta版功能向GA毕业生提供。

尤其是对于API及其资源,没有那么强烈的动力去推动 从Beta到GA的功能要比从alpha到Beta的功能好。想要特定功能的供应商 我们有充分的理由来帮助使代码达到默认启用功能的地步, 除此之外,旅程还不太清楚。

KEP跟踪的不仅仅是代码改进。本质上,任何需要的东西 与更广泛的社区进行交流值得KEP。也就是说,大多数KEP都涵盖了 Kubernetes功能(以及实现它们的代码)。

你可能知道 入口 在Kubernetes中已经有一段时间了,但是您是否知道它实际上在2015年进入Beta版?帮助 为了推动事情向前发展,Kubernetes的建筑特殊兴趣小组(SIG)在 mind.

避免永久Beta

对于Kubernetes REST API,当新功能的API达到beta时,它将开始倒计时。 Beta质量的API现在具有 三个版本 (大约9个日历月):

  • 达到GA,并弃用Beta,或者
  • 有一个新的Beta版本( 并弃用先前的Beta)。

要明确一点,在这一点上 仅REST API受影响。例如, APIListChunking 是 一个beta功能,但它本身并不是REST API。目前没有计划自动 deprecate APIListChunking 以及不是REST API的其他任何功能。

如果在发布三个Kubernetes之后beta API仍未升级到GA,则 Kubernetes的下一个发行版将弃用该API版本。没有选择 REST API保持与第一个Kubernetes相同的beta版本 发布在发布窗口之后出现。

这对你意味着什么

如果您正在使用Kubernetes,则很有可能正在使用Beta功能。喜欢 我说,有很多关于。 和Ingress一样,您可能正在使用 CronJob, or PodSecurityPolicy或其他。 您在至少有一个Beta的控制平面上运行的可能性更大 feature enabled.

如果您正在使用或生成使用Beta API(例如Ingress)的Kubernetes清单,您将 需要计划修改这些内容。在以下情况下,将不赞成使用当前的API: 时间表(我之前提到的9个月),再过9个月后, API将被删除。到那时,要与Kubernetes保持同步,您应该已经 have migrated.

这对Kubernetes贡献者意味着什么

这里的动机很明显:使功能稳定。保证Beta 不推荐使用的功能会增加很大的诱因,以便希望 继续努力,直到为此准备好的代码,文档和测试为止 由Kubernetes在 real-world use.

这对生态系统意味着什么

我认为,这些苛刻的措施很有道理,并且将是 对Kubernetes有好处。通过适用于所有标准的规则弃用现有的API 不同的特殊兴趣小组(SIG),有助于避免停滞并鼓励 fixes.

假设某个API进入Beta测试阶段,然后实际经验表明该API 只是不对-从根本上说,API有缺点。在那9个月里 倒计时滴答作响,有关人员有手段和理由修改 并发布处理问题案例的API。任何想与之同住的人 欢迎使用已弃用的API-Kubernetes是开源的-但他们的需求没有 必须阻止该功能的进展。