规模不是一个数字:Kubernetes 控制平面不堪重负的三种方式
这件事讲了什么
这篇文章讲的是 Kubernetes 控制平面的容量问题,但重点不是“集群有多大”。作者举了三个完全不同的集群:一是上万节点的训练集群,大量节点不停上报心跳,把 apiserver 和 etcd 的内存吃光;二是节点数不多但对象频繁创建、销毁的 Agent 平台,写入压力巨大;三是装了两百个 operator、对象多得每个 apiserver 都要在内存里存一份的平台集群。文章的核心观点是:这三种压力方向不同,按节点数调优往往治错病,加 apiserver 还可能因为每个都复制全量 watch 缓存而让情况更糟。作者提出从四个“接缝”入手(存储分工、节点存活上报、分片维度、缓存驻留),并说明部分能力已有现成配置,像 KEP-4743、KEP-5866 这样的改进仍在推进中,具体何时可用原文没有说明。对运维 Kubernetes 的读者来说,这是一份先分清自己属于哪种规模压力、再决定调优方向的思路清单。
可以使用的工具
文中可用工具
- Kubernetes容器编排系统,本文讨论的控制平面容量问题都发生在它上面
- etcdKubernetes 的键值存储后端,本文建议把非持久流量分流出去并用内存 lease 刷新减轻写压力
- kOps原文提到它文档里记录了增加 apiserver 的做法
- KEP-4743定义存储接口边界的提案,用来把不同资源类型路由到不同后端
- KEP-5866为 API 流量引入哈希范围过滤的提案,是分片的基础
- etcd-servers-overrides已有配置项,可把资源类型指向不同的 etcd 后端,但目前只支持内置资源
讨论 0
登录后参与讨论,阅读资讯无需注册。
还没有评论,来分享第一个看法。