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

28|Kubernetes如何设置默认值?

你好,我是孔令飞。
大部分企业应用都是通过 API 接口的形式对外提供功能,API 接口的通信协议通常是 HTTP 或者 RPC。使用 RPC 作为通信协议的 API 接口又称作 RPC 接口;使用 HTTP 作为通信协议的 API 接口又称作 HTTP 接口。不管哪种类型的 API 接口,在请求到来时,都要进行参数校验,并且在校验之前设置参数默认值。
上一节课,我介绍了如何校验请求参数。本节课,我再来介绍下如何给参数设置默认值。

为什么要设置默认值

在 API 请求中设置默认值的原因有多种,总结起来主要有以下 3 个:
提高用户体验:设置默认值,可以降低用户或开发者设置请求参数的难度和工作量,用户不必在每次请求中都输入所有参数,只需要关注必要的或特定的参数即可,提高了 API 调用的便利性。
降低错误发生率,提高接口稳定性:设定合理的默认值可以减少因缺失参数而导致的错误。当参数未提供时,接口使用默认值则可以使请求得以成功执行,而不是返回错误信息。
支持向后兼容:当 API 有变更时,对于新增的字段,我们还需要根据兼容性要求,给新增字段设置默认值。这样可以确保客户端能够正常使用旧的 API 版本。
设置默认值是后台代码的行为,为了能够将程序的默认行为有感知地暴露给开发者,我们还需要在 API 接口文档或者产品文档中,清晰地给用户说明参数未设置时后台设置的默认值。这样,开发者才能够清晰地理解 API 的行为和使用方式。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Kubernetes 中设置默认值的代码位置是在 `createHandler` 函数中调用了 `scope.Serializer.DecoderToVersion` 创建一个 `decoder`,并调用 `decoder` 的 `Decode` 方法将 `body` 解析到 `original` 变量中。 2. 默认值设置函数 `func SetDefaults_<Type>(obj *<Type>)` 是由 `defaulter-gen` 工具自动生成的,通过添加 `+k8s:defaulter-gen=TypeMeta` 注释来为资源定义结构体生成设置默认值函数。 3. 在实际的 Kubernetes 开发中,我们通常使用 `+k8s:defaulter-gen=TypeMeta` 标签,只给需要的资源定义结构体生成设置默认值函数。 4. 添加自定义默认值设置代码时,需要遵循固定的格式,包括设置默认值的函数名为 `SetDefaults_<Type>`,入参为 `<Type>`,并且没有返回值。 5. 在添加完自定义的默认值设置逻辑之后,需要运行 `defaulter-gen` 命令来生成设置默认值函数,并将该默认值设置 Scheme 构造器添加到 `legacyscheme.Scheme` Scheme 构造列表中。 6. 课程详细介绍了资源默认值设置的代码实现入口 `decoder.Decode`,并反向跟踪代码调用逻辑,找到了 `decoder.Decode` 的具体实现其实是 `codec` 的 `Decode` 方法,`codec` 的 `Decode` 方法中调用了 `c.defaulter.Default` 来给资源设置默认值。 7. 本节课还介绍了如何使用 `defaulter-gen` 工具来生成设置默认值的代码,并介绍了生成规则。 8. 课程最后介绍了如何添加设置默认值的函数,以及如何使用 `defaulter-gen` 工具来生成设置默认值的代码,并介绍了生成规则。 9. 请阅读 kube-apiserver 源码,思考为什么的具体实现。 10. 试着用一张图总结下 kube-apiserver 中默认值设置的流程。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《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
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)