K8s 1.20/EKS调度器未自动重平衡节点内存分布问题咨询
K8s 1.20版本调度器未自动平衡节点内存占用的原因
核心原因
Kubernetes默认调度器的定位是Pod调度时点的一次性决策组件,不具备运行时主动重平衡负载的能力,具体可分为以下几点:
- 触发逻辑限制:默认调度器仅在Pod出现待调度事件时才会执行节点选择逻辑,比如Pod首次创建、故障重建、被驱逐后重新调度等场景,不会持续扫描节点负载差异、主动迁移正常运行中的Pod,避免给业务带来不必要的中断。
- 调度参考指标限制:1.20版本默认调度策略的打分逻辑,仅参考Pod声明的
resources.requests和resources.limits值计算节点资源余量,不会纳入kubectl top采集的节点实际运行时内存占用数据。如果你的业务副本配置的内存request值远低于实际运行占用,调度阶段会误判低内存节点的可用资源充足,导致Pod集中调度到部分节点,后续实际用量上涨后也不会触发重新调度。 - 无内置重平衡能力:K8s集群默认不搭载负载重平衡组件,若需要基于节点实际负载自动迁移Pod,需要单独部署官方的Descheduler组件,自定义配置基于内存使用率的驱逐策略,才能实现你预期的节点内存自动均衡效果。
集群指标参考
/snap/bin/kubectl version Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.12", GitCommit:"4bf2e32bb2b9fdeea19ff7cdc1fb51fb295ec407", GitTreeState:"clean", BuildDate:"2021-10-29T02:43:48Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.7-eks-d88609", GitCommit:"d886092805d5cc3a47ed5cf0c43de38ce442dfcb", GitTreeState:"clean", BuildDate:"2021-07-31T00:29:12Z", GoVersion:"go1.15.12", Compiler:"gc", Platform:"linux/amd64"} kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% some-ip.eu-west-2.compute.internal 112m 2% 2238Mi 33% some-ip.eu-west-2.compute.internal 859m 5% 14881Mi 52% some-ip.eu-west-2.compute.internal 887m 5% 18485Mi 65% some-ip.eu-west-2.compute.internal 1900m 11% 27727Mi 97% some-ip.eu-west-2.compute.internal 368m 9% 3975Mi 60% some-ip.eu-west-2.compute.internal 196m 5% 3602Mi 53% some-ip.eu-west-2.compute.internal 1450m 9% 27539Mi 97%
内容的提问来源于stack exchange,提问作者anVzdGFub3RoZXJodW1hbg
相关产品推荐
相关产品推荐

