24 | 深入解析声明式API(一):API对象的奥秘

该思维导图由 AI 生成,仅供参考

- 深入了解
- 翻译
- 解释
- 总结

本文深入解析了Kubernetes声明式API的工作原理和CRD机制,为读者提供了全面的技术指导和实践参考。文章首先介绍了Kubernetes声明式API对象在Etcd中的资源路径构成,以及API对象的组织方式。接着详细解释了Kubernetes是如何解析API对象的组、版本和资源类型,并通过流程图展示了创建API对象的过程。随后,文章介绍了CRD(Custom Resource Definition)的作用和使用方法,以及如何让Kubernetes认识和处理自定义API资源类型的YAML文件。最后,文章以一个实际的例子展示了如何创建自定义API资源类型,并提供了相关的代码示例。通过自动生成代码和创建自定义API对象的实例操作,读者可以深入了解Kubernetes声明式API的工作原理和CRD机制。整体而言,本文内容涵盖了Kubernetes声明式API对象的组织结构、CRD的使用方法以及自定义API资源类型的创建过程,为读者提供了深入的技术指导和实践示例。文章内容丰富,适合对Kubernetes声明式API和CRD机制感兴趣的读者阅读学习。
《深入剖析 Kubernetes》,新⼈⾸单¥68
全部留言(68)
- 最新
- 精选
- 北卡运维人员会心碎? 我是运维人员,此刻看完我感到很兴奋。
作者回复: 没错。我觉得这部分才是运维最喜欢的。谁不喜欢写代码呢?
2018-10-18372 - 千寻我从代码开始,就按着步骤走,最后创建network的CRD和example-network都成功了, 但是我直接将cdr/network.yml和example/example-network.yml文件单独拿出来,并没有执行代码生成那些步骤,发现也创建成功了,搞得有点懵。 老师可以说一下这大概是什么回事吗?
作者回复: 因为生成的代码是给下一篇写控制器代码用的,哈哈
2018-10-17730 - 虎虎❤️好好好。之前学习过这些内容,但是很不系统,只是大概知道怎么回事,很多细节没有穿起来。跟老师比起来,我太不善于总结了。 磊哥大神,等我把你的课都学会了,能跟着你干吗? 另外我看到有人问需要把代码重新编译进k8s中么?不需要。作为插件应该是可以热插拔的。比如service catalog,flannel,都不要求你重启k8s。 在k8s里定义了你的CR后,controller可以作为一个container跑在k8s集群里,来响应CR的增删改。
作者回复: 当然!
2018-10-17315 - 骨汤鸡蛋面自定义resource的Controller 单独运行,只是通过client-go 与api 交互? 是否可以认为,k8s内建的Resource 对应的Controller,由Controller-manager 统一管理呢?
作者回复: 对的,内置和外挂的区别
2019-01-0511 - Pixar有一个问题张老师,一直不是特别清楚… 通过 crd 创建的自定义资源我还并没有定义他的结构,为什么就可以通过 kubectl get 拿到这个资源的详情呢?
作者回复: 你提交了一个CR yaml了不是?反正是存在etcd里,给你返回即可。不过kubernetes 并不懂字段的意思。
2018-10-2310 - swordholderregister.go会将自定义Type注册到APIServer,那register.go本身是怎么交给APIServer,然后被APIServer调用注册过程的? $ kubectl apply -f crd/network.yaml $ kubectl apply -f example/example-network.yaml 执行完这两步,自定义的Newwork对象被创建出来,怎么感觉register.go并没有被用到
作者回复: 因为你还没有调用生成的client,register.go是客户端用来进行初始化的代码的一部分。你这两步做完,服务端已经知道这个crd了,客户端也得有办法知道啊。
2018-10-1847 - 圣诞使者老师,我照着你的代码敲了一遍,这个pkg/signals目录是自己创建的吗?我这个生成完代码也没有这个目录。
作者回复: 这是个自己的帮助库
2018-10-224 - Joe Black这章会让运维人员心碎的...幸好俺会Go语言! 请教下这个生成的代码,还得合并到apiserver的代码树中吧?还是得重新编译apiserver吧?毕竟Go目前还没有动态加载机制。
作者回复: 当然不需要。你就按文章里的步骤来就全妥了。
2018-10-1723 - swordholder怎么感觉register.go没有用到,它是什么时机把自定义Type注册到APIServer的?
作者回复: 你仔细看一下apiserver那张图?
2018-10-171 - mgxian请问老师 通过那个CustomResourceDefinition相关的ymal文件已经可以正常定义查看crd了 为什么还需要写相关的go代码呢?生成的clients又是给谁用的呢?
作者回复: 当然是给下一篇写controller用的
2018-10-171