快速入门

本页面通过一个最小化的 JobSet 演示,帮助你确认 operator 正常工作,并介绍 JobSet 自定义资源中最常用的字段。

前提条件

  • 已安装 JobSet Operator,并且 jobset-system 中的 controller pod 处于 Running 状态。参见 安装 JobSet
  • 可访问目标集群的 kubectl
  • 一个用于运行演示的命名空间。下面的示例使用 default 命名空间;如有需要,请替换为你的命名空间。

JobSet CR 概览

JobSet CR 中最常用的字段如下:

字段目的常见用法
spec.replicatedJobs要实例化的 Job 模板列表必需。每个条目定义一个带名称的 Job 组(例如 leaderworkers),并为其提供自己的 pod 模板。
replicatedJobs[].name组名称用于 DNS 主机名,以及作为成功/失败策略的目标。
replicatedJobs[].replicas为此组创建多少个 Job默认值为 1。每个副本都是一个独立的 Kubernetes Job。
replicatedJobs[].template内嵌的 batchv1.JobSpec标准 Kubernetes Job 规格,包括 parallelismcompletionsbackoffLimit 以及 pod 模板。
spec.successPolicy何时将 JobSet 视为成功operator: AllAny,并可通过 targetReplicatedJobs 将策略限定到特定组。
spec.failurePolicy失败时的重启行为maxRestarts 控制在标记为失败之前,JobSet 可被重新创建的次数。
spec.network用于稳定 pod 主机名的无头 Service 配置默认值通常已足够;也可以通过子域进行自定义,或禁用默认 Service。
spec.startupPolicyreplicatedJobs 之间的可选启动顺序使用 InOrder 按顺序启动各组,例如先等待 leader 再启动 workers。

运行一个简单演示

下面的示例定义了一个包含两个组的 JobSet:

  • leader:一个 Job,包含一个 pod,用于模拟驱动进程。
  • workers:一个 Job,包含四个并行 pod,用于模拟 worker。

leaderworkers 都完成后,JobSet 即被标记为成功。

将清单保存为 jobset-quickstart.yaml

apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
  name: jobset-quickstart
  namespace: default
spec:
  successPolicy:
    operator: All
  replicatedJobs:
  - name: leader
    replicas: 1
    template:
      spec:
        parallelism: 1
        completions: 1
        backoffLimit: 0
        template:
          spec:
            restartPolicy: Never
            containers:
            - name: leader
              image: busybox:1.36
              command:
              - sh
              - -c
              - |
                echo "leader $(hostname) starting"
                sleep 30
                echo "leader done"
  - name: workers
    replicas: 1
    template:
      spec:
        parallelism: 4
        completions: 4
        backoffLimit: 0
        template:
          spec:
            restartPolicy: Never
            containers:
            - name: worker
              image: busybox:1.36
              command:
              - sh
              - -c
              - |
                echo "worker $(hostname) starting"
                sleep 30
                echo "worker done"

应用它:

kubectl apply -f jobset-quickstart.yaml

检查资源

检查 JobSet 是否已被接受,以及是否已创建子 Job:

kubectl get jobset jobset-quickstart -n default
kubectl get jobs -n default -l jobset.sigs.k8s.io/jobset-name=jobset-quickstart
kubectl get pods -n default -l jobset.sigs.k8s.io/jobset-name=jobset-quickstart

预期结果:

  • 一个名为 jobset-quickstart-leader-0 的 Job,包含一个 pod。
  • 一个名为 jobset-quickstart-workers-0 的 Job,包含四个 pod。
  • 一个名为 jobset-quickstart 的无头 Service,用于为这些 pod 提供稳定的 DNS 主机名。

例如,跟踪某个 pod 的日志:

kubectl logs -n default -l jobset.sigs.k8s.io/replicatedjob-name=leader -f

验证完成状态

大约 30 秒后,所有 pod 都会完成。确认 JobSet 状态:

kubectl get jobset jobset-quickstart -n default -o jsonpath='{.status.conditions}'

成功的 JobSet 会报告一个 type: Completedstatus: "True" 的条件。子 Job 会报告其 COMPLETIONS 达到已配置的值(leader1/1workers4/4)。

清理

删除演示资源:

kubectl delete -f jobset-quickstart.yaml

删除 JobSet 会级联删除其子 Job、pod,以及为该工作负载创建的无头 Service。

后续步骤

如需了解更高级的模式,请参阅上游示例和文档:

  • JobSet 概念https://jobset.sigs.k8s.io/docs/concepts/
  • 上游示例https://github.com/kubernetes-sigs/jobset/tree/main/site/static/examples(上游的 examples/ 是指向此路径的符号链接,因此 GitHub 的树视图仅在实际位置可用)
  • 成功和失败策略:可配置的成功条件(Any/All)以及按错误类型进行的失败处理。
  • 启动顺序spec.startupPolicy.startupPolicyOrder: InOrder 强制执行先 leader 后 workers 的启动顺序。
  • 独占放置:在 JobSet 上设置 alpha.jobset.sigs.k8s.io/exclusive-topology,可将每个子 Job 的 pod 共同放置在单个拓扑域内。
  • Kueue 集成:将 JobSet 与 Alauda Build of Kueue 配对,用于管理批处理工作负载的队列和资源配额。