kubebuilder运行时报错Could not retrieve rest mapping

在调试自制的operator时,发现了一个SetupWithManager这里会出现报错:

controller-runtime.eventhandler.enqueueRequestForOwner: Could not retrieve rest mapping ***

查阅多方debug日志一半让我检查新建的crd有没有被启用,一半的一半让我检查拼写有没有错误,其他的在怀疑我有没有老老实实跟着tutor走一遍或者模仿其他项目写过一遍。求问无果只好自己寻找panic,在苦苦寻找panic异常的位置后,终于让我发现了bug问题所在:

大家都知道,在SetupWithManager方法中,需要依次返回For(&v1.yourcontroller).Own(&v1.ownsresource).comlete(mgr)对象,此时kubebuilder会新建一个依赖关系,以达到创建operator时同时创建其所控制的资源,并给其metadata.ownerference字段初始化值,但在一开始创建operator时,我并没有在setupWithManager中添加Own字段,这意味着kubebuilder不会为controller创建的资源自动初始化ownerference字段,同时我使用的 newControllerRef方法自己指定的ownerference值,(注意这里要把blockOwnerDeletion值初始化为true,否则不会被finizer回收,这种方法在我仍然觉得其实是可以使用的,只不过没有继续完善,逻辑并不存在问题),在调试时就会出现调试生成的Ownference字段和自定义的ownerference字段出现冲突的问题,并不是报错信息所说无法找到crd资源,修改bug的方法也很简单,只需要去掉创建资源时自定义的ownerference字段然后保留SetupWithManager方法中Own方法即可完成operator的逻辑。

总结:读者在遇到以上报错时,不妨试试删除掉新建资源中的Ownerfence字段,在setupWithManager方法中添加需要被拥有的资源值,相信会对你有所帮助

以上均为笔者改bug期间经验总结,实际可能会因为开发环境、版本,代码逻辑,设计思路等问题出现不同,如有疑问,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值