如何在 K8s 中实现指定数据库实例下线?

上期文章介绍了 InstanceSet,同时也介绍了 InstanceSet 针对数据库高可用等需求衍生出的一系列特性。本期我们将介绍 指定实例下线 这一特性,一起来了解这一特性诞生的背景和使用方式吧~

指定实例下线解决了什么问题?

早期版本中,KubeBlocks 最终生成的 Workload 是 StatefulSet,这是一把双刃剑。一方面,KubeBlocks 可以借助 StatefulSet 实现对数据库等有状态应用的管理,另一方面,这也导致 KubeBlocks 继承了 StatefulSet 的局限性。

其中的局限性之一是,在水平缩容场景下,StatefulSet 会按照 Ordinal 顺序从大到小依次下线 Pod。当 StatefulSet 中运行的是数据库时,这个局限性会使得数据库的可用性降低

我们来分析这样一个场景:比如我们用 StatefulSet 管理了一个一主两从这样的三副本 PostgreSQL 数据库,这个 StatefulSet 的名字叫 foo-bar,运行一段时间后,名字为 foo-bar-2 的 Pod 成了主节点。
某一天,通过分析我们发现这个数据库的读负载并不是很高,为了节省资源,我们计划对这个数据库进行缩容,下线一个从节点。此时问题来了,按照 StatefulSet 的规则,我们只能下线 foo-bar-2 这个 Pod,但不幸的是它当前是主节点。此时我们有两个选择:要么直接下线 foo-bar-2,通过 failover 机制,在 foo-bar-0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值