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

如何创建不可被抢占的Kubernetes Job?

如何创建不可被抢占的Kubernetes Job

要实现不可被抢占的Job,核心思路是让Job的Pod拥有足够高的优先级,利用Kubernetes的优先级抢占规则(高优先级Pod不会被低优先级Pod抢占)达成目标,具体可通过以下两种方式实现:

方式一:通过自定义PriorityClass配置

先创建一个高优先级的PriorityClass,确保其优先级值远高于集群内普通业务Pod的优先级:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: critical-job-priority
value: 1000000000  # 采用足够高的数值,避免被普通业务Pod抢占
globalDefault: false
description: "用于标记不可被抢占的关键Job"

然后在Job配置中引用这个优先级类,同时设置优雅终止时间,进一步保障Pod不会被强制终止:

apiVersion: batch/v1
kind: Job
metadata:
  name: non-preemptable-job
spec:
  template:
    spec:
      priorityClassName: critical-job-priority
      terminationGracePeriodSeconds: 300  # 给Pod足够的优雅终止缓冲时间
      containers:
      - name: job-container
        image: your-image:tag
        command: ["your-business-command"]
      restartPolicy: OnFailure

方式二:直接在Job的Pod模板中设置优先级

如果不需要复用优先级配置,也可以直接在Job的Pod模板里指定priority字段(不推荐用于多Job复用场景):

apiVersion: batch/v1
kind: Job
metadata:
  name: non-preemptable-job
spec:
  template:
    spec:
      priority: 1000000000  # 直接设置高优先级值
      terminationGracePeriodSeconds: 300
      containers:
      - name: job-container
        image: your-image:tag
        command: ["your-business-command"]
      restartPolicy: OnFailure

原理说明

Kubernetes的抢占逻辑是仅高优先级Pod有权抢占低优先级Pod的资源,只要Job的Pod优先级足够高,集群内优先级更低的Pod就无法抢占它。需要注意:集群系统组件(如kube-proxy、etcd)通常拥有最高级别的优先级,建议将Job优先级设置为低于系统组件、但高于普通业务Pod的数值,既保障Job不被抢占,也不会影响系统稳定性。

内容的提问来源于stack exchange,提问作者Gaëtan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:40:40