乐趣区

关于后端:入门教程5步创建K8S-Job搞定批处理

Kubernetes jobs 次要是针对短时和批量的工作负载。它是为了完结而运行的,而不是像 deployment、replicasets、replication controllers 和 DaemonSets 等其余对象那样继续运行。

本文将介绍如何创立 Kubernetes jobs 和 cronjobs,以及一些小技巧。

Kubernetes Jobs 会始终运行到 Job 中指定的工作实现。也就是说,如果 pods 给出退出代码 0,那么 Job 就会退出。而在失常的 Kubernetes 中,无论退出代码是什么,deployment 对象在终止或呈现谬误时都会创立新的 pod,以放弃 deployment 的现实状态。

在 job 运行过程中,如果托管 pod 的节点产生故障,Job pod 将被主动重新安排到另一个节点。

Kubernetes Jobs 用例

对于 Kubernetes Jobs 最好的用例实际是:

  1. 批处理工作:比如说你想每天运行一次批处理工作,或者在指定日程中运行。它可能是像从存储库或数据库中读取文件那样,将它们调配给一个服务来解决文件。
  2. 运维 /ad-hoc 工作:比方你想要运行一个脚本 / 代码,该脚本 / 代码会运行一个数据库清理流动,甚至备份一个 Kubernetes 集群。

如何创立 Kubernetes Job

在本例中,咱们将应用 Ubuntu 容器来运行一个带有 for 循环的 shell 脚本,并依据你传递给容器的参数来响应音讯。这个参数是一个数字,决定 shell 脚本循环应该运行多少次。

例如,如果你传递了参数 100,那么 shell 脚本将响应音讯 100 次而后容器将会退出。

你能够拜访以下链接查看 Dockerfile 和 shell 脚本:
https://github.com/devopscube…

咱们先从一个简略设置的 job 开始。

Step1:应用自定义的 Docker 镜像创立一个 job.yaml 文件,命令参数为 100。100 将会作为参数传递给 docker ENTRYPOINT 脚本。

apiVersion: batch/v1  kind: Job  metadata:      name: kubernetes-job-example      labels:     
    jobgroup: jobexample  spec:      template:     
    metadata:       
      name: kubejob       
      labels:         
        jobgroup: jobexample     
    spec:       
      containers:       
      - name: c         
        image: devopscube/kubernetes-job-demo:latest         
        args: ["100"]       
      restartPolicy: OnFailure   

Step2:应用 kubectl 创立一个 job.yaml 文件的 job

kubectl apply -f job.yam

Step3:应用 kubectl 查看 job 的状态

kubectl get jobs

Step4:应用 kubectl 获取 pod 列表

kubectl get po

Step5:应用 kubectl 获取 job pod 日志。应用你在输入中看到的 Pod 名称替换本来的 Pod 名称。

kubectl logs kubernetes-job-example-bc7s9 -f

并行运行多 Job pods

当一个 job 被部署后,你能够让它在多个 Pod 上并行运行。例如,在一个 job 中如果你想要运行 6 个 pods,同时并行运行 2 个 pods,你须要增加以下 2 个参数到你的 job manifets 中:

completions: 6
parallelism: 2

以下是带有那些参数的 manifest:


apiVersion: batch/v1
kind: Job
metadata:
  name: kubernetes-parallel-job
  labels:
    jobgroup: jobexample
spec:
  completions: 5
  parallelism: 2
  template:
    metadata:
      name: kubernetes-parallel-job
      labels:
        jobgroup: jobexample
    spec:
      containers:
      - name: c
        image: devopscube/kubernetes-job-demo:latest
        args: ["100"]
      restartPolicy: OnFailure

为 Kubernetes Job 生成随机名称

你不能从一个 job manifest 文件中创立多个 job,因为 Kubernetes 会报错,说存在一个同名的 job。为了躲避这个问题,你能够在元数据中增加 generateName 名称参数。

例如:


apiVersion: batch/v1
kind: Job
metadata:
  generateName: kube-job-
  labels:
    jobgroup: jobexample

在上方示例中,每次你运行该 manifest,job 将以 kube-job- 作为前缀,前面跟着一个随机字符串来创立。

如何创立 Kubernetes CronJob

如果你想依照特定的时间表运行批处理 job,例如,每 2 个小时运行一次。你能够用 cron 表达式创立一个Kubernetes cronjob。Job 会依照你在 job 中提到的时间表主动启动。

上面咱们将介绍如何指定一个 cron 打算,你能够应用 crontab 生成器(https://crontab-generator.org/)来生成本人的工夫打算。

schedule: "0,15,30,45 * * * *"

下图显示了 Kubernetes cronjob schedule 语法。
如果咱们以 cronjob 的模式每 15 分钟运行一次咱们之前的 job,manifest 应该如下所示。创立一个名为 cron-job.yaml 的文件,并复制以下 manifest:


apiVersion: batch/v1beta1
kind: CronJob
metadata:
    name: kubernetes-cron-job
spec:
  schedule: "0,15,30,45 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: cron-batch-job
        spec:
          restartPolicy: OnFailure
          containers:
          - name: kube-cron-job
            image: devopscube/kubernetes-job-demo:latest
            args: ["100"]

让咱们应用 kubectl 部署 cronjob。
kubectl create -f cron-job.yaml
列出 cronjobs:

kubectl get cronjobs

你能够列出 cronjob pod 并从处于运行状态或实现状态的 pods 中获取日志来查看 Cronjob 日志。

手动运行 Kubernetes CronJob

在某些状况下,你可能心愿以长期的形式执行 cronjob。你能够通过从现有的 cronjob 创立一个 job 来实现。

例如,如果你想手动触发一个 cronjob,咱们应该这样做:


kubectl create job --from=cronjob/kubernetes-cron-job manual-cron-job

–from=cronjob/kubernetes-cron-job将复制 cronjob 模板并创立一个名为 manual-cron-job 的 job。

Kubernetes Job 的要害参数

依据你的需要,你还能够应用 kubernetes jobs/cronjobs 的几个要害参数:

  1. failedJobHistoryLimit &
    successfulJobsHistoryLimit:依据你提供的保留数量删除失败和胜利的 job 历史记录。当你尝试列出 job 时,这对于缩小所有失败的条目十分有用。例如:
  2. backoffLimit:如果你的 Pod 失败,重试的总次数。
  3. activeDeadlineSeconds:如果你想对 cronjob 的运行工夫进行硬性限度,能够应用此参数。例如,如果你想只运行 1 分钟的 cronjob,你能够将其设置为 60。

通过本文咱们理解了创立 Job 以及 Cron Job 的步骤并且一些具体的配置过程和要害参数,心愿藉由本文能够帮忙你开始上手理解 K8S Job 和 Cron Job,轻松搞定批处理工作!

原文链接:
https://devopscube.com/create…

退出移动版