集群过载保护最佳实践
集群过载是指Kubernetes集群中的资源(如计算、存储、网络等)超出集群的处理能力,导致集群控制平面(如etcd、kube-apiserver)或工作节点资源耗尽的状态。当过载发生时,集群性能将显著下降,甚至无法正常运行。因此,需要提前对集群进行过载保护,通过过载控制、LIST请求处理优化等机制确保集群在负载激增时仍能维持核心服务的稳定性,避免业务受损。本文将进一步分析集群过载的可能的的原因和影响,并介绍CCE集群的过载保护机制,同时提供集群过载保护的相关建议。
集群过载的原因
- 计算、网络和存储资源需求量超出集群最大供给能力:etcd和kube-apiserver是集群控制平面的两个核心组件。etcd是后台数据库,负责存储所有集群数据,而kube-apiserver则是控制平面的入口,负责处理请求。为了减轻etcd的负担,kube-apiserver缓存了集群数据。此外,集群中的其他核心组件也会缓存集群中的各种资源,并监听这些资源的变化。当计算、网络和存储资源需求量超出集群最大供给能力时,这些组件将长期处于高负载状态,一旦超过阈值将会导致集群过载。
- 客户端查询数据量过大(如发起大量LIST请求、单个LIST请求查询大量数据):以客户端通过Field Selectors查询集群中的Pod数据为例,当kube-apiserver缓存数据未被命中时,由于etcd无法按字段进行过滤,kube-apiserver需要从etcd拉取全量Pod数据。取得全量Pod数据后,kube-apiserver需要在内存中将全量Pod数据反序列化为结构化对象,然后遍历所有Pod进行字段匹配,最终返回过滤后的序列化结果。当此类查询并发量高时,各组件资源水位持续攀升,最终引发etcd延迟飙升、kube-apiserver OOM、控制循环失调等级联故障,从而导致整个集群进入过载状态。
图1 客户端查询数据量过大示例
集群过载的影响
集群过载时,会出现Kubernetes API响应延迟增加、控制节点资源水位升高的现象,从而对集群控制平面及依赖该平面的业务产生影响,以下列举了一些可能受到影响的场景:
- Kubernetes资源管理:在进行创建、删除、更新或查询Kubernetes资源的操作时,可能会出现失败的情况。
- Kubernetes分布式选主:集群过载可能导致主节点的Lease续期请求未能及时完成,进而导致主节点的Lease过期,失去领导地位。这将触发主节点的重新选举,可能造成短暂的服务中断、任务迁移、调度延迟以及集群性能波动。
- 集群管理:集群严重过载时,可能会处于不可用状态,此时无法进行集群管理操作,例如创建或删除节点等。
CCE集群过载保护机制
- 过载控制:CCE集群从v1.23版本开始支持集群过载控制,在集群控制平面的资源压力较大时,通过减少处理系统外LIST请求来缓解压力。该功能需要开启集群的过载控制开关,详情请参见集群过载控制。
- LIST请求处理优化:CCE集群从v1.23.8-r0、v1.25.3-r0版本开始对LIST请求处理进行了优化,即使客户端未指定resourceVersion查询参数, kube-apiserver也会基于其缓存响应请求,避免额外查询etcd,并能确保响应数据最新。此外,通过对kube-apiserver缓存增加Namespace索引,当客户端查询指定Namespace的指定资源时,无需再基于全量数据过滤属于此Namespace的资源,可以有效降低响应延迟时间和控制平面内存开销。
- 服务端精细化限流策略:通过API优先级和公平性(APF)对请求并发限制进行精细化控制,详情请参见API优先级和公平性(APF)。
集群防过载建议
实际业务运行过程中,Kubernetes集群的性能和可用性受多种因素的影响,例如集群规模、集群资源数量和大小、集群资源访问量等。CCE服务基于长期云原生实践,持续对集群性能和可用性进行优化,并总结梳理了以下集群过载保护建议,您可根据实际业务情况进行应用,以保障业务长期稳定可靠运行。
类别 |
建议 |
费用说明 |
---|---|---|
集群层面 |
使用新版本集群 |
不涉及费用。 |
启用集群过载控制 |
不涉及费用。 |
|
调整集群管理规模 |
集群管理规模越大,费用越高,具体请参见云容器引擎价格计算器。 |
|
控制集群资源数据量 |
不涉及费用。 |
|
拆分集群 |
拆分集群时,费用的变化与集群数量和管理规模有关,具体请参见云容器引擎价格计算器。 |
|
运维层面 |
启用集群可观测能力 |
|
清理集群无效资源 |
不涉及费用。 |
|
应用层面 |
优化客户端访问模式 |
不涉及费用。 |
相关文档
- 使用CCE需要关注哪些配额限制?
- 关于如何合理规划集群VPC网络及容器网络,请参见集群网络地址段规划实践。
- 关于如何保证工作负载的稳定性和可靠性,请参见工作负载推荐配置。
- 关于如何预防和避免集群的高危操作,请参见高危操作一览。