有 k8s 大佬吗,请教个问题?

2023-05-11 16:06:47 +08:00
 birdhk

我现在开发一个 operator ,在 crd 中定义了 group 、version 、kind ,用户 apply 的 cr 指定了 group 、version 、kind ,我就动态的去 watch 用户指定的类型,然后 watch 的资源修改后我的 controller 进行一些处理。kubebuilder 是在代码中提前指定了 controller 要 watch 的资源,这种动态的 watch ,是怎么做的呢?

2466 次点击
所在节点    Kubernetes
9 条回复
totopper312
2023-05-11 16:22:03 +08:00
你这不是用户插入一条 CR ,然后你执行操作,还是用户要新建新的 CRD ,你要 watch 这个新的 CRD 么?
birdhk
2023-05-11 16:27:30 +08:00
谢谢你的回复。就是用户 apply cr 让我去 watch 什么我就 watch 什么。但是 kubebuilder 这种都是在代码里提前就指定好了要 watch 什么吧。我不知道如何动态去 watch 了,需要自定义 controller 吗?
Frankcox
2023-05-11 16:34:09 +08:00
你的意思是用户 apply 的 cr 的内容是 k8s 资源的 group kind 等信息,比如用户传的 CR 的内容是 apps v1 Deployment ,那你就去 watch Deployment ?
这样的话你在这个 CRD 的 Controller 中写好逻辑,AddFunc 的时候,获取 apply 的信息,根据这些信息手动启动一个该资源的 informer 或者 Watch 不行吗?
birdhk
2023-05-11 16:38:46 +08:00
@Frankcox 谢谢🙏🙏。你的想法给了我一些启发,我再查查资料。
chronos
2023-05-11 17:06:21 +08:00
建立使用 informer 监控资源的变更,informer 有本地缓存速度比较快。我记得好像还可以在重连时恢复事件,而 watch 会丢失事件变更。
boatrain1111
2023-05-11 19:44:05 +08:00
watch 套中套,6 啊
strawberryBug
2023-05-11 20:20:48 +08:00
@chronos informer 针对连接断开有啥好的方案吗?
frank1256
2023-05-12 09:01:24 +08:00
@birdhk 创建 dynamic informer 就可以了,参考 https://pkg.go.dev/k8s.io/client-go/dynamic/dynamicinformer
@strawberryBug 官方 client 包里的 informer 有同步机制,配置 resync period ,会有自动重连机制,失败会有报错提示。
pepesii
2023-05-12 16:00:37 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939242

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX