You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes节点亲和性权重异常:fsn1节点未优先调度问询

问题分析

你当前使用的preferredDuringSchedulingIgnoredDuringExecution属于调度偏好而非强制约束,调度器会优先选择fsn1节点,但如果fsn1节点资源耗尽(或调度器基于负载均衡策略选择其他节点),仍会将Pod调度到hel1,这就是出现5个Pod跑到hel1的原因。

针对你“仅当fsn1所有节点故障时才调度到hel1”的需求,无需自定义调度器的解决方案如下:


方案一:强制约束+自动化兜底(严格匹配需求)

该方案实现仅当所有fsn1节点不可用时才允许调度到hel1,即使fsn1资源不足,Pod也会处于Pending状态,不会跑到hel1。

  1. 给hel1节点添加污点,阻止Pod默认调度到这些节点:
    kubectl taint nodes -l region=hel1 region=hel1:NoSchedule
    
  2. 配置Pod的亲和性为强制要求fsn1节点:
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
            - matchExpressions:
                - key: "region"
                  operator: "In"
                  values:
                    - "fsn1"
    
  3. 自动化兜底逻辑:当所有fsn1节点故障时,自动移除hel1节点的污点;当fsn1节点恢复时,重新添加污点。可通过Prometheus+Alertmanager结合kubectl脚本实现:
    • 监控kube_node_status_condition指标,当所有region=fsn1节点的Ready状态为false时,触发告警并执行移除污点的命令;
    • 当有fsn1节点恢复Ready状态时,触发告警并执行添加污点的命令。

方案二:优化亲和性配置(优先用尽fsn1资源再用hel1)

如果你的实际需求是优先耗尽fsn1节点资源,再调度到hel1(而非必须等fsn1节点故障),可调整亲和性配置,确保fsn1的优先级绝对高于hel1:

affinity:
  nodeAffinity:
    # 强制Pod只能调度到fsn1或hel1节点
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - key: "region"
              operator: "In"
              values:
                - "fsn1"
        - matchExpressions:
            - key: "region"
              operator: "In"
              values:
                - "hel1"
    # 给fsn1节点设置极高权重,确保调度器优先选择fsn1
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1000
        preference:
          matchExpressions:
            - key: "region"
              operator: "In"
              values:
                - "fsn1"

这种配置下,调度器会优先将Pod调度到fsn1节点,只有当所有fsn1节点资源完全耗尽时,才会选择hel1节点。

内容的提问来源于stack exchange,提问作者Siraxis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:57:15