28|Kubernetes如何设置默认值?

为什么要设置默认值
- 深入了解
- 翻译
- 解释
- 总结

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