目录
✅ Kubernetes 1.24 默认调度插件与权重详解
在 Kubernetes 1.24 中,如果未显式指定 KubeSchedulerConfiguration
,调度器会使用默认的调度插件组合及其默认权重。这些插件控制了节点打分逻辑,影响 Pod 最终被分配到哪个节点。
🔧 默认启用的核心调度插件及其权重
插件名称 | 功能简述 | 得分范围 | 默认权重 |
---|---|---|---|
NodeAffinity | 根据 Pod 的 nodeAffinity 策略进行匹配打分(包括 preferred 部分) | 0 - 100 | 2 |
NodeResourcesBalancedAllocation | 考虑 CPU、内存、卷资源使用的平衡性来评估节点资源分配合理性 | 0 - 100 | 1 |
ImageLocality | 优先选择已有 Pod 所需镜像的节点,减少镜像拉取时间 | 0 - 100 | 1 |
InterPodAffinity | 根据 Pod 间的亲和性规则(preferredDuringScheduling)打分 | 0 - 100 | 2 |
TaintToleration | 根据节点污点和 Pod 容忍度,PreferNoSchedule 类型的影响进行打分 | 0 - 100 | 3 |
PodTopologySpread | 根据拓扑域(如 zone、hostname)进行分布打分,鼓励 Pod 分布均匀 | 0 - 100 | 2 |
📌 说明:得分区间均为 0~100,最终得分 = 插件得分 × 插件权重,所有得分求和后决定 Pod 最终调度节点。
🔍 核心信息来源与依据
1. 🧭 Kubernetes 官方文档
-
说明重点:
- 默认插件与其启用顺序由官方指定;
- 插件权重若未在配置文件中指定,将采用默认值。
2. 💻 调度器源码实现(defaults.go)
源码位置:
kubernetes/pkg/scheduler/algorithmprovider/defaults/defaults.go
示例节选(简化版):
func defaultScorePlugins() *config.Plugins {
return &config.Plugins{
Score: &config.PluginSet{
Enabled: []config.Plugin{
{Name: "NodeResourcesBalancedAllocation", Weight: 1},
{Name: "ImageLocality", Weight: 1},
{Name: "NodeAffinity", Weight: 2},
{Name: "InterPodAffinity", Weight: 2},
{Name: "TaintToleration", Weight: 3},
{Name: "PodTopologySpread", Weight: 2},
},
},
}
}
📌 说明:
PluginSet
中的Weight
字段即为各调度插件的默认权重;- 调度器启动时若无用户自定义配置,将直接引用此默认逻辑。
3. 🌐 社区实践与技术解读
- 社区平台如 Stack Overflow、Kubernetes Dev Blog、CNCF Talk 等,经常引用源码及实测分析这些默认权重的合理性;
- 实践表明,某些插件(如
TaintToleration
)默认权重较高,是为了优先确保调度合法性和污点容忍性; - 插件之间的得分权重,体现调度器对 资源利用率 与 调度约束 的平衡权重偏好。
✅ 总结
- Kubernetes 1.24 默认使用一套稳定、成熟的插件配置;
- 各插件得分结果乘以权重后,参与最终调度决策;
- 若需自定义调度行为,可通过
KubeSchedulerConfiguration
明确指定插件及权重; - 对权重的理解和调整建议结合具体业务目标(资源利用率优先 vs 亲和性优先等)进行。
如你需要进一步解读某个具体插件(如 NodeAffinity
的打分算法、PodTopologySpread
的实现细节等),可以继续深入源码 pkg/scheduler/framework/plugins/
目录下的对应插件目录。需要我帮你分析某一个插件或权重影响分数计算,也可以继续发问。