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

如何配置Kubernetes仅在Pod故障时重调度,避免主动迁移正常Pod?

Kubernetes 遗留有状态单体应用调度规则配置方案

1. 部署资源类型选择

优先使用StatefulSet而非Deployment部署应用:

  • StatefulSet 会为每个Pod分配稳定的唯一标识与存储绑定关系,Pod重建时优先尝试在原节点原地重启,仅当原节点完全失联/不可用才会触发跨节点重调度,避免无意义的主动迁移。

2. 配置Pod干扰预算阻断主动运维迁移

PodDisruptionBudget(PDB)用于控制集群自愿中断场景下的Pod终止行为,包括节点版本升级、集群自动缩容排空、运维手动执行kubectl drain等主动操作,配置maxUnavailable: 0即可禁止所有主动场景下的Pod终止操作:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: legacy-tomcat-pdb
spec:
  maxUnavailable: 0
  selector:
    matchLabels:
      app: legacy-tomcat-app

3. 配置高优先级避免资源抢占驱逐

集群调度器遇到节点资源不足时,会主动驱逐低优先级Pod来释放资源,通过创建高优先级PriorityClass并关联到应用Pod,可避免被其他低优先级业务抢占:

  1. 创建优先级类
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: legacy-app-high-priority
value: 1000000
globalDefault: false
description: "遗留单体应用专用高优先级,避免被抢占"
  1. 在Pod模板中引用优先级类
spec:
  priorityClassName: legacy-app-high-priority
  # 其余Pod配置省略

4. 豁免节点压力驱逐与自动重调度

  • 若集群部署了Descheduler负载均衡组件,给Pod添加注解descheduler.alpha.kubernetes.io/evict: "false",禁止组件为平衡节点负载主动迁移正常Pod。
  • 调整kubelet驱逐规则,可将该高优先级类加入节点压力驱逐豁免列表,避免节点资源紧张时正常运行的Pod被主动驱逐。

5. 探针与终止策略优化

  • 针对20分钟的启动时长,调整livenessProbe的初始延迟参数,避免启动阶段被误判为故障杀死:
livenessProbe:
  httpGet:
    path: /已配置的liveness检测端点
    port: 8080
  initialDelaySeconds: 1260 # 设置21分钟缓冲,覆盖最长启动时间
  periodSeconds: 10
  failureThreshold: 3
  • 配置足够长的终止宽限期,给用户预留操作收尾时间:
spec:
  terminationGracePeriodSeconds: 300
  # 其余配置省略

6. 可选优化:会话粘滞配置

在Ingress或Service层配置会话粘性,确保同一用户的请求始终转发到同一个Pod,避免会话丢失:

  • Nginx Ingress 配置示例:添加注解nginx.ingress.kubernetes.io/affinity: "cookie"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:18:01