运行 CronJob

在启用了 Kueue 的环境里运行 CronJob

本页面展示了如何在 Kubernetes 集群中运行带有 Kueue 的 CronJob。

本页面的受众是批处理用户

开始之前

请确保满足以下条件:

  • 已运行 Kubernetes 集群。
  • kubectl 命令行工具已与你的集群建立通信。
  • Kueue 安装文档
  • 集群已配置 配额

0. 识别你命名空间中的可用队列

运行以下命令以列出你命名空间中的 LocalQueues

kubectl -n default get localqueues
# 或使用 'queues' 别名。
kubectl -n default get queues

输出类似于以下内容:

NAME         CLUSTERQUEUE    PENDING WORKLOADS
user-queue   cluster-queue   3

ClusterQueue 定义了队列的配额。

1. 定义作业

在 Kueue 中运行 CronJob 与在 Kubernetes 集群中运行 CronJob 类似, 但你必须考虑以下差异:

  • 你应该在 CronJob 中将 JobTemplate 设置为暂停状态, 因为 Kueue 将决定何时启动 Job。
  • 你必须设置要提交 Job 的队列。在 jobTemplate.metadata 中添加 kueue.x-k8s.io/queue-name 标签。
  • 你应该为每个 Job Pod 包含资源请求。
  • 你应该设置 spec.concurrencyPolicy 以控制并发策略。默认是 Allow。你也可以将其设置为 Forbid 以防止并发运行。
  • 你应该设置 spec.startingDeadlineSeconds 以控制 Job 启动的截止日期。默认没有截止日期。

以下是包含三个 Pod 的 CronJob 示例,这些 Pod 仅睡眠 10 秒。CronJob 每分钟运行一次。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: sample-cronjob
  namespace: default
spec:
  schedule: "* * * * *"
  jobTemplate:
    metadata:
      labels:
        kueue.x-k8s.io/queue-name: user-queue
    spec:
      parallelism: 3
      completions: 3
      template:
        spec:
          containers:
          - name: dummy-job
            image: registry.k8s.io/e2e-test-images/agnhost:2.53
            args: ["entrypoint-tester", "hello", "world"]
            resources:
              requests:
                cpu: 1
                memory: "200Mi"
          restartPolicy: Never

2. 运行 CronJob

你可以使用以下命令运行 CronJob:

kubectl create -f sample-cronjob.yaml

内部,Kueue 将为每次 Job 运行创建一个对应 Workload 其名称与 Job 匹配。

kubectl -n default get workloads

输出类似于以下内容:

NAME                                QUEUE        ADMITTED BY     AGE
job-sample-cronjob-28373362-0133d   user-queue   cluster-queue   69m
job-sample-cronjob-28373363-e2aa0   user-queue   cluster-queue   68m
job-sample-cronjob-28373364-b42ac   user-queue   cluster-queue   67m

你还可以监控 Workload 的状态


最后修改 July 27, 2025: dov (#6198) (fd3f0d0c)