31|Kubernetes中如何向稳定版本添加不稳定的功能?
孔令飞

你好,我是孔令飞。
在实际企业开发中,我们经常需要往一个稳定的 API 版本中添加一个可能不稳定的功能。本节课,我们就来看下 Kubernetes 中是如何向稳定版本添加不稳定功能的。
将功能添加到已经稳定的对象时,新字段和新行为需要满足稳定级别的要求。如果无法满足这些要求,则新字段不能添加到对象中。例如,考虑以下对象:
开发人员正在考虑添加一个新的 Width 参数,如下所示:
然而,新功能还不够稳定,不能在稳定版本(v6)中使用。这可能的原因包括:
最终表示尚未确定(例如,应该称为 Width 还是 Breadth)。
实现对于一般使用还不够稳定(例如,Area() 函数有时会溢出)。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

1. 在 Kubernetes 中向稳定版本添加不稳定功能需要满足稳定级别的要求,否则新字段不能添加到对象中。 2. 推荐的做法是向现有对象添加 alpha 字段,并确保默认情况下禁用该功能。 3. 在将对象持久化到存储之前,对于创建请求,应清除已禁用的 alpha 字段;对于更新请求,如果现有对象中缺少该字段的值,也应将其清除。 4. 为了确保 API 测试具备前瞻性,在测试 feature gate 的启用和禁用时,请务必明确将 feature gate 设置为所需的状态。 5. 在未来的 Kubernetes 版本中,如果该功能晋升到 beta 或稳定状态,feature gate 可以被移除或默认启用。 6. 如果需要以不兼容的方式更改 alpha 字段的模式,则必须使用新的字段名称。 7. 如果该功能被弃用或字段名称发生更改,应从 Go 结构中移除该字段,并使用墓碑注释确保该字段名称及其 protobuf 标记不被重用。 8. API 客户端旧版本必须能够安全地处理新值,确保组件的所有版本能够正确处理含有新值的 API 对象,或在安全情况下失败。 9. 在版本不一致的情况下,集群能够处理多个服务器,而不会因阻止保留以前版本的 API 服务器所阻塞的数据而导致问题。 10. 需要确保现有数据得到保留,以便在将来的版本中默认启用该功能时,n-1 版本的 API 服务器能够验证对象并判断是否应允许新的枚举值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kubernetes 源码剖析与实战》,新⼈⾸单¥68
《Kubernetes 源码剖析与实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论