背景
正如在“指定实例下线”特性介绍里所述,早期的版本中,KubeBlocks 最终生成的 Workload 是 StatefulSet,这导致 KubeBlocks 继承了 StatefulSet 的局限性。
另一个局限性是,StatefulSet 通过 PodTemplate 渲染最终的 Pod,当 PodTemplate 中有任何字段发生了改变,都会导致所有 Pod 被更新,而 StatefulSet 采用的更新方式是 Recreate,即首先删除现有的 Pod,然后再新建一个 Pod。对于数据库等对可用性要求很高的系统,这样的方式显然不是最佳选择。
为了解决这个问题,KubeBlocks 从 0.9 版本开始,使用 InstanceSet 替代了 StatefulSet,新增了实例原地更新特性,在实例模板中部分字段更新时,InstanceSet 会采用原地更新 Pod 或扩容 PVC 的方式,实现实例更新,降低实例更新时对系统可用性的影响。
实例(Instance)哪些字段支持原地更新
从原理上来讲,KubeBlocks 实例原地更新复用了 Kubernetes Pod API 原地更新能力</