--- title: 联邦 Job content_template: templates/task --- {{% capture overview %}} {{< deprecationfilewarning >}} {{< include "federation-deprecation-warning-note.md" >}} {{< /deprecationfilewarning >}} 本指南解释了如何在联邦控制平面中使用 job。 联邦控制平面中的一次性任务(在本指南中称为“联邦一次性任务”)类似于传统的 [Kubernetes 一次性任务](/docs/concepts/workloads/controllers/job/),并且提供相同的功能。 在联邦控制平面中创建 job 可以确保在已注册的集群中存在所需的并行性和完成数。 {{% /capture %}} {{% capture prerequisites %}} * {{< include "federated-task-tutorial-prereqs.md" >}} * 你需要具备基本的 [Kubernetes 的工作知识](/docs/tutorials/kubernetes-basics/),特别是 [job](/docs/concepts/workloads/controllers/jobs-run-to-completion/)。 {{% /capture %}} {{% capture steps %}} ## 创建一个联邦 job 用于联邦 job 的 API 与用于传统 Kubernetes job 的 API 完全兼容。您可以通过向联邦 apiserver 发送请求来创建 job。 你可以使用 [kubectl](/docs/user-guide/kubectl/) 来运行: ``` shell kubectl --context=federation-cluster create -f myjob.yaml ``` `--context=federation-cluster` 参数告诉 kubectl 将请求提交到联邦 API 服务器,而不是发送到 Kubernetes 集群。 一旦创建了联邦 job,联邦控制平面将在所有底层 Kubernetes 集群中创建一个 job。 你可以通过检查每个集群底层来验证这一点,例如: ``` shell kubectl --context=gce-asia-east1a get job myjob ``` 前面的示例假设你的客户端中为该区域中的集群配置了一个名为 `gce-asia-east1a` 的上下文。 集群底层中的 job 与联邦 job 匹配,但并行性和完成数不匹配。 联邦控制平面确保每个集群中的并行性和完成数之和与联合作业中所需的并行度和完成数匹配。 ### 将 job 任务分散到集群底层中 默认情况下,并行性和完成数在所有底层集群中平均分布。例如: 如果你有 3 个已注册的集群,并且创建了一个联邦 job `spec.parallelism = 9` 和 `spec.completions = 18`,那么 3 个集群中的每个 job 都有 `spec.parallelism = 3` 和 `spec.completions = 6`。 要修改每个集群中的并行性和完成数,可以指定 [ReplicaAllocationPreferences](https://github.com/kubernetes/federation/blob/{{< param "githubbranch" >}}/apis/federation/types.go) 作为 `federation.kubernetes.io/job-preferences` 联邦 job 上的 key 的注释。 ## 更新联邦 job 可以像更新 Kubernetes job 一样更新联邦 job;但是,对于联邦 job,必须将请求发送到联邦 API 服务器,不是发送到指定的 Kubernetes 集群。 联邦控制平面确保无论何时更新联邦 job,它都会更新所有集群底层中的相应 job 以匹配它。 如果您的更新包含并行性和完成数的更改,则联邦控制平面将更改集群底层中的并行性和完成数, 确保它们的总和仍然等于联邦 job 中所需的并行性和完成数。 ## 删除联邦 job 可以删除联邦 job,就像删除 Kubernetes job 一样;但是,对于联邦 job,必须将请求发送到联邦 API 服务器,不是发送到指定的 Kubernetes 集群。 例如,使用 kubectl: ```shell kubectl --context=federation-cluster delete job myjob ``` {{< note >}} 删除联邦作业不会从基础集群中删除相应的 job。 您必须手动删除基础 job。 {{< /note >}} {{% /capture %}}