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

AKS中跨节点池部署的StatefulSet如何缩容至指定节点池?

AKS StatefulSet缩容至指定节点池副本的解决方案

完全可行,但你遇到的问题是StatefulSet的缩容逻辑导致的——StatefulSet默认从编号最大的Pod开始删除,而非你想移除的nodepool1上的Pod0。以下是具体解决步骤:

1. 调整StatefulSet调度规则,确保新Pod仅部署到nodepool2

修改StatefulSet的Pod模板,添加节点亲和性,强制后续重建的Pod只能调度到nodepool2:

spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: agentpool
                operator: In
                values:
                - nodepool2  # 替换为你的节点池实际名称

执行更新命令:

kubectl apply -f <你的StatefulSet配置文件名>.yaml

2. 重建nodepool1上的Pod0

直接删除Pod0,StatefulSet会根据新的调度规则在nodepool2上重建它(复用原PVC):

kubectl delete pod <你的StatefulSet名称>-0

等待Pod0在nodepool2启动并进入Running状态,确认所有4个副本都运行在nodepool2。

3. 缩容StatefulSet至3个副本

此时所有Pod都在目标节点池,直接缩容即可:

kubectl scale statefulset <你的StatefulSet名称> --replicas=3

K8s会自动删除编号最大的Pod(如Pod3),保留nodepool2上的Pod0、Pod1、Pod2。

关键说明

  • 直接驱逐Pod0失败的原因:StatefulSet的Pod默认受PodDisruptionBudget或终止宽限期限制,且绑定PVC的Pod强制驱逐会有数据风险,K8s会阻止此类操作,正确方式是通过删除Pod触发重建。
  • 若之前给nodepool1添加了污点,后续无需隔离的话可执行以下命令移除:
    kubectl taint nodes -l agentpool=nodepool1 <你的污点键名>-
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:16