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

Kubernetes集群如何实现仅1个Pod运行在master节点其余调度至worker节点

Kubernetes 调度规则修复方案

原配置核心问题

你当前的配置存在三处错误导致规则未生效:

  • 重复声明了affinity字段,后定义的Pod反亲和规则直接覆盖了前面的节点亲和规则,节点亲和逻辑完全不生效
  • 节点亲和的结构错误:preferredDuringSchedulingIgnoredDuringExecution下的匹配规则应使用preference字段,你写的nodeSelectorTerms是强制节点亲和的子字段,规则本身语法错误无法生效
  • Pod反亲和的labelSelector匹配规则错误,误匹配了节点的hostname标签,实际应该匹配同组Pod的业务标签,导致反亲和逻辑完全未触发,才会出现Pod均匀分布的情况

正确配置示例

首先给你的Pod统一配置业务标签(如下示例的app: my-custom-app),作为反亲和的匹配依据,完整配置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 4
  selector:
    matchLabels:
      app: my-custom-app
  template:
    metadata:
      labels:
        app: my-custom-app # 同组Pod统一业务标签,必须和反亲和匹配规则对应
    spec:
      affinity:
        # 优先调度到master节点,保证第一个Pod优先落到master
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - master-node # 替换为你实际的master节点hostname
        # 强制反亲和:节点上只要存在1个同标签的Pod,就不能再调度同组Pod到该节点
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - my-custom-app # 和上面的Pod业务标签完全一致
            topologyKey: kubernetes.io/hostname
      # 可选配置:如果你的master节点默认打了master角色污点,需要加容忍才能调度到master
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: my-app
        image: nginx:alpine # 替换为你实际的业务镜像

实现逻辑

  • 第一个Pod调度时,高权重的节点亲和规则生效,优先调度到master节点
  • 第二个及之后的Pod调度时,检测到master节点上已经存在1个同标签的Pod,触发强制反亲和规则,禁止调度到master节点,只能调度到worker节点
  • 即使master节点上的Pod异常退出重建,重建的Pod依然会优先落回master节点,不会占用worker的调度名额,保证master始终最多运行1个同组Pod

注意事项

  • 可执行kubectl get nodes --show-labels | grep master确认master节点的hostname和标签,保证配置中的匹配值和实际一致
  • 如果你后续新增了多个worker节点,需要同组Pod在worker节点均匀分布的话,可以额外补充topologySpreadConstraints配置,单worker节点场景不需要额外调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:24:03