Kubernetes – Jobs
在 Kubernetes 世界中,作业被视为充当任务的主管或控制器的对象。Kubernetes 作业将创建一个 Pod,监控任务,并在该 Pod 因某种原因失败时重新创建另一个 Pod。任务完成后,它将终止 Pod。与部署和 Pod 不同,您可以在 Kubernetes 中指定作业,该作业可以是始终一个作业或基于时间的作业,也可以是基于任务的作业。这允许您容忍可能导致意外 Pod 终止的错误或故障。
当您提交作业时,它将根据要求创建一个或多个 Pod,完成作业中定义的任务,并保持 Pod 运行,直到任务完成。作业会在 Pod 完成时跟踪成功完成的情况。作业暂停时,其所有活动 Pod 都将被删除,直到作业重新启动。
Job Types:
Non-Parallel Job: 一种简单作业,其中定义了单个任务并将创建一个 pod,并且在成功完成作业后,pod 将终止。
Parallel Job with fixed completion count:复杂任务被定义为需要多个 pod 来完成的作业,该作业可以并行运行,并且每个 pod 根据配置 ` .spec.completions ` 中指定的数字获得 0 到 .spec.completions-1 之间的唯一索引。当成功指定完成 Pod 时,该作业将被视为成功完成。
Parallel Job with a work queue: 在具有工作队列的并行作业中,多个 Pod 并行运行,以妥善完成复杂数据。为了决定每个 Pod 应该关注什么,Pod 需要相互协作或与外部服务协作。例如,Pod 可能会从工作队列中批量提取最多 N 个项目。每个 Pod 都能够自主确定其所有对等体是否已完成,从而确定整个作业是否已完成。
用例:
- 作业执行某些系统操作任务的简单用例。例如,要设置集群或服务,您需要在多个位置执行一些任务。您可以创建一个作业并反复使用它来启动相同的服务或执行类似的任务。
- 另一个用例是执行一些数据备份或一些计算任务。更复杂的用例可能是一系列需要按顺序执行的任务,其中将创建作业 pod 并进行管理,直到满足完成次数。作为建立服务的一部分,Helm Charts 使用作业在集群上执行安装、设置或测试命令。
关键术语:
- Kubernetes:Kubernetes 是 Google 推出的用于编排容器的开源系统。可自动执行围绕容器化应用程序的大多数操作任务。
- Pod: Kubernetes 允许您构建和控制的最小可部署计算单元称为 Pod。它可以是单个容器,也可以是多个容器的组合。
- Minikube:Kubernetes 的本地版本,可帮助您在本地开始并测试您的工作。
设置作业的步骤:
今天,我们将考虑一个使用 Docker Busybox 镜像并 ping geeksforgeeks.org 的作业设置示例。
步骤 1.启动你的 minikube
$ minikube start
第 2 步.创建 YAML 格式的作业定义文件。
$ cat ping-job.yaml
步骤 3.将作业定义提交给 Kubectl,您应该在执行时看到作业创建消息。
$ kubectl apply -f ping-job.yaml
步骤4.使用获取作业列出作业,我们可以看到作业完成的数量以及持续时间和年龄。
$ kubectl get jobs
步骤 5.获取作业详细信息。
$ kubectl describe job ping
步骤 6.让 pod 为我们的工作运行,在这里您可以看到 pod 的名称、有多少个容器、它的状态、是否重新启动以及 pod 的使用年限。
$ kubectl get pods
您可以检查容器的日志。
要删除作业,请使用 kubectl delete 命令,如果删除作业,与其关联的 pod 也将被删除。
$ kubectl delete job ping $kubectl get job