快速开始

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

前提条件

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

JobSet CR 概览

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

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

运行一个简单演示

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

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

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" 的 condition。子 Job 会显示其 COMPLETIONS 达到配置值(leader1/1workers4/4)。

清理

删除演示资源:

kubectl delete -f jobset-quickstart.yaml

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

后续步骤

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

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