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

2023-03-23 20:09:08 +08:00
 cesign

背景

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

希望的解决状态

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

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

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

所以大多数情况下 都是一个 controller 工作其他的在闲着. k8s sig 小组的 controller-runtime 也是这样设计的. https://github.com/kubernetes-sigs/controller-runtime
cesign
2023-03-23 20:40:42 +08:00
@aapeli (因为每锁一次就要发至少一次请求到 apiserver) 这个锁我的理解只有 controller 变化的时候(增加,减少,有的失败),并不会频繁变化;而本质上,主备部署的,也会有到 apiserver 的锁请求(如刷写 lease 资源)。
我的理解,这块并不会增加 apiserver 的负担
cesign
2023-03-23 20:43:01 +08:00
@aapeli 而且主备部署的,所有备组件,也会周期去查 lease 资源,或者刷写 lease 资源
aapeli
2023-03-24 12:14:51 +08:00
抱歉 我刚看到了你的处理逻辑 "试图通过 hash 环实现拆分", 如果使用 hash 环拆分,多个 controller 之间不会互相冲突那就没有我上述的问题了

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

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

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

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

© 2021 V2EX