Kubernetes 源码剖析与实战
孔令飞
前腾讯云专家工程师
1431 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已更新 33 讲/共 55 讲
Kubernetes 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

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

你好,我是孔令飞。
在实际企业开发中,我们经常需要往一个稳定的 API 版本中添加一个可能不稳定的功能。本节课,我们就来看下 Kubernetes 中是如何向稳定版本添加不稳定功能的。
将功能添加到已经稳定的对象时,新字段和新行为需要满足稳定级别的要求。如果无法满足这些要求,则新字段不能添加到对象中。例如,考虑以下对象:
// API v6.
type Frobber struct {
// height ...
Height *int32 `json:"height"`
// param ...
Param string `json:"param"`
}
开发人员正在考虑添加一个新的 Width 参数,如下所示:
// API v6.
type Frobber struct {
// height ...
Height *int32 `json:"height"`
// param ...
Param string `json:"param"`
// width ...
Width *int32 `json:"width,omitempty"`
}
然而,新功能还不够稳定,不能在稳定版本(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
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)