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

如何防止AWS EKS集群自动扩缩容终止CronJob运行中的Pod

解决方案

1. 核心配置:添加Cluster Autoscaler驱逐保护Annotation

你遇到的节点删除是集群自动扩缩容组件(Cluster Autoscaler)的默认逻辑:当节点资源使用率低于阈值时,会尝试驱逐节点上所有Pod后删除节点以节省成本。你只需给脚本Pod添加指定Annotation,就能让Cluster Autoscaler判定该节点存在不可驱逐的Pod,不会主动触发该节点的缩容操作,从根源避免脚本被中断。

注意:Annotation的值必须为字符串格式的"false",若省略引号被解析为布尔值会导致配置不生效。

2. 附加配置:高优先级类避免资源抢占

如果集群内存在其他可抢占的工作负载,可额外创建高优先级PriorityClass绑定给脚本Pod,确保脚本Pod的调度优先级高于普通业务Deployment,不会被其他工作负载挤占资源:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority-batch-job
value: 1000000
globalDefault: false
description: "批量任务专用高优先级类,避免被驱逐"

3. 适配Spot实例中断场景

由于你使用的是Spot实例伸缩组,除了Cluster Autoscaler缩容外还可能遇到AWS主动回收Spot实例的场景,可额外做两个配置规避:

  • 将Pod的terminationGracePeriodSeconds设置为1800(即30分钟,大于脚本最大运行时长15分钟),就算节点收到Spot中断通知,kubelet也不会强制杀死正在运行的脚本Pod,会等脚本执行完成后再处理
  • 可选:给Pod添加节点亲和性,优先调度到中断频率更低的Spot实例规格,或直接调度到按需实例节点,完全规避Spot中断风险

4. 完整CronJob配置示例

apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-batch-script
spec:
  schedule: "0 2 * * *" # 替换为你实际的定时规则
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        metadata:
          annotations:
            # 禁止Cluster Autoscaler驱逐该Pod
            cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
        spec:
          priorityClassName: high-priority-batch-job
          containers:
          - name: script-runner
            image: your-script-image:latest # 替换为你实际的脚本镜像
            resources:
              requests:
                cpu: "1"
                memory: "2Gi"
              limits:
                cpu: "2"
                memory: "4Gi"
          restartPolicy: OnFailure
          # 终止宽限时间设为30分钟,大于脚本最大运行时长
          terminationGracePeriodSeconds: 1800
      backoffLimit: 2 # 脚本异常时最多重试2次

上述配置生效后,脚本运行期间所在节点不会被自动缩容,等脚本执行完成Pod销毁后,节点会自动进入正常的缩容逻辑,完全适配你的业务流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:03