V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
birdhk
V2EX  ›  Kubernetes

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

  •  
  •   birdhk · 322 天前 · 2205 次点击
    这是一个创建于 322 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2023-05-12 16:00:37 +08:00
    totopper312
        1
    totopper312  
       322 天前
    你这不是用户插入一条 CR ,然后你执行操作,还是用户要新建新的 CRD ,你要 watch 这个新的 CRD 么?
    birdhk
        2
    birdhk  
    OP
       322 天前
    谢谢你的回复。就是用户 apply cr 让我去 watch 什么我就 watch 什么。但是 kubebuilder 这种都是在代码里提前就指定好了要 watch 什么吧。我不知道如何动态去 watch 了,需要自定义 controller 吗?
    Frankcox
        3
    Frankcox  
       322 天前
    你的意思是用户 apply 的 cr 的内容是 k8s 资源的 group kind 等信息,比如用户传的 CR 的内容是 apps v1 Deployment ,那你就去 watch Deployment ?
    这样的话你在这个 CRD 的 Controller 中写好逻辑,AddFunc 的时候,获取 apply 的信息,根据这些信息手动启动一个该资源的 informer 或者 Watch 不行吗?
    birdhk
        4
    birdhk  
    OP
       322 天前
    @Frankcox 谢谢🙏🙏。你的想法给了我一些启发,我再查查资料。
    chronos
        5
    chronos  
       322 天前
    建立使用 informer 监控资源的变更,informer 有本地缓存速度比较快。我记得好像还可以在重连时恢复事件,而 watch 会丢失事件变更。
    boatrain1111
        6
    boatrain1111  
       322 天前
    watch 套中套,6 啊
    strawberryBug
        7
    strawberryBug  
       322 天前 via Android
    @chronos informer 针对连接断开有啥好的方案吗?
    frank1256
        8
    frank1256  
       321 天前
    @birdhk 创建 dynamic informer 就可以了,参考 https://pkg.go.dev/k8s.io/client-go/dynamic/dynamicinformer
    @strawberryBug 官方 client 包里的 informer 有同步机制,配置 resync period ,会有自动重连机制,失败会有报错提示。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   957 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:43 · PVG 05:43 · LAX 14:43 · JFK 17:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.