KubeBrain:字节跳动高性能K8s元信息存储方案
背景
- 需求:随着Kubernetes规模扩大10倍以上,公司在业务快速发展过程中,存储、大数据、机器学习等场景逐渐云原生化。新场景对Kubernetes性能提出了更高的要求,尤其是离线场景,Pod生命周期短、变更频率高。
- 挑战:现有Kubernetes架构中心化设计,所有组件通过API Server交互,但随着规模扩大,etcd成为瓶颈,存在性能问题。
设计思路
- 架构:KubeBrain采用主从架构,主节点负责写和事件分发,从节点负责读取,底层对接分布式强一致性存储。
- 存储层:采用ByteKV作为存储引擎,支持多key事务、CAS操作和快照读,性能优异。
- 逻辑层:支持单Key读、Range扫描读,并通过Watch机制实现最终一致性。
- 接入层:客户端与Kubernetes API Server无缝集成,支持多种读写操作。
性能优化
- 写优化:
- 降低锁粒度:从表锁改为行锁,提高写并发。
- 单点写变多点写:利用多Raft分片技术,提高写并发。
- 事务优化:精心设计key格式,减少跨分区事务。
- 读优化:
- Range读优化:从Unary变为Stream,减少延迟。
- 并发读:通过并发读取,减少读时延。
- 读写分离:Follower可以无限扩展,读写互不影响。
- Count优化:周期性Compact统计,降低内存占用,减轻存储压力。
- Watch优化:
- 提升写性能:降低写延迟,自然降低watch延迟。
- 纯内存态实现:减少延迟损耗。
- 逻辑优化:减少不必要的读取,提高效率。
落地效果
- 压测环境:规模达到5万节点、200万Pod,配合API Server优化手段。
- 生产环境:实际应用中,2万个节点、100万个Pod的超大集群,有效降低资源碎片率。
- 性能表现:读写QPS超过1万。
未来演进
- 架构演进:消息严格有序,写操作单点处理,读写能力水平扩展。
- 集成与开源:KubeBrain已集成到Kubernetes作为新型存储后端,并已开源,以TiKV作为存储引擎。
欢迎交流联系邮箱:xuchen.xiaoying@bytedance.com