cesign

K8s 除了 leader election 实现主备高可用,还有什么办法实现 controller 类组件的高可用?

  •  
  •   cesign · Mar 23, 2023 · 2312 views
    This topic created in 1322 days ago, the information mentioned may be changed or developed.

    背景

    controller 类组件如:k8s-controller-manager ,list&watch 资源,做对应操作。 但是这类主备部署存在问题: 1.备的组件,啥都不做,浪费资源。 2.备的组件,一般抢到 lease resource 后,才会进行初始化,然后处理业务,浪费时间。

    希望的解决状态

    1.多个 controller 同时部署,能根据 HPA 扩缩示例数。 2.多个 controller 同时工作,同时处理业务,每个 controller 负责一部分(我知道的可通过 hash 环实现拆分)。 3.在某个 controller 挂了后,其他 controller 接管其负责的业务。

    有没有类似的实现?或者库也行

    4 replies  •  2023-03-24 12:14:51 +08:00
    aapeli
    aapeli
    Mar 23, 2023
    1
    1. 多个 controller 同时工作, 因为每一个实例都会收到同一个事件, 为了避免多个 controller 同时处理同一个 k8s 对象, 需要实现一个分布式的锁来避免同事处理同一个事件. 而且需要单独引入三方组件, 如果不引入三方组件,使用 k8s 的资源实现分布式锁的话 会增加 apiserver 的负担(因为每锁一次就要发至少一次请求到 apiserver)

    所以大多数情况下 都是一个 controller 工作其他的在闲着. k8s sig 小组的 controller-runtime 也是这样设计的. https://github.com/kubernetes-sigs/controller-runtime
    cesign
    cesign
    OP
    Mar 23, 2023
    2
    @aapeli (因为每锁一次就要发至少一次请求到 apiserver) 这个锁我的理解只有 controller 变化的时候(增加,减少,有的失败),并不会频繁变化;而本质上,主备部署的,也会有到 apiserver 的锁请求(如刷写 lease 资源)。
    我的理解,这块并不会增加 apiserver 的负担
    cesign
    cesign
    OP
    Mar 23, 2023
    3
    @aapeli 而且主备部署的,所有备组件,也会周期去查 lease 资源,或者刷写 lease 资源
    aapeli
    aapeli
    Mar 24, 2023
    4
    抱歉 我刚看到了你的处理逻辑 "试图通过 hash 环实现拆分", 如果使用 hash 环拆分,多个 controller 之间不会互相冲突那就没有我上述的问题了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3924 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    ♥ Do have faith in what you're doing.