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

如何在GKE集群两节点池调度Pod?需确保默认池至少运行1个Pod

实现GKE集群Pod的强制调度约束:至少1个Pod在default-pool

方案一:拆分Deployment(最稳妥)

直接把4个Pod拆成两个独立的Deployment,彻底避免调度不确定性:

  • 第一个Deployment固定1个副本,通过nodeAffinity强制调度到default-pool:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/gke-nodepool
                operator: In
                values:
                - default-pool
      containers:
      - name: my-container
        image: your-image:tag
  • 第二个Deployment设置3个副本,可灵活调度(也可配置优先调度到temp-pool):
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-temp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: cloud.google.com/gke-nodepool
                operator: In
                values:
                - temp-pool
      containers:
      - name: my-container
        image: your-image:tag

方案二:单Deployment结合拓扑分布约束+节点亲和性

如果不想拆分资源,可通过topologySpreadConstraints配合亲和性实现强制约束:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 4
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 50
            preference:
              matchExpressions:
              - key: cloud.google.com/gke-nodepool
                operator: In
                values:
                - default-pool
      topologySpreadConstraints:
      - maxSkew: 3
        topologyKey: cloud.google.com/gke-nodepool
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: my-app
      containers:
      - name: my-container
        image: your-image:tag

这里maxSkew:3限制两个节点池的Pod数量差不能超过3,总副本数为4时,调度器必须保证default-pool至少有1个Pod(否则temp-pool会有4个,差值为4,违反约束)。同时通过优先亲和性引导调度器优先往default-pool分配Pod。

注意事项

  • GKE节点池默认标签为cloud.google.com/gke-nodepool,若自定义过节点标签,需替换为对应的键名
  • 方案一逻辑简单、绝对可靠;方案二适合不想拆分资源的场景,但需确保拓扑分布参数配置准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:12:10