使用 CronJob 运行自动化任务

此页面展示了如何使用 Kubernetes CronJob 对象运行自动化任务。

开始之前

  • 您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个,或者可以使用以下 Kubernetes 游乐场之一

创建 CronJob

Cron 作业需要一个配置文件。以下是一个 CronJob 的清单,它每分钟运行一个简单的演示任务

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

使用以下命令运行示例 CronJob

kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml

输出类似于以下内容

cronjob.batch/hello created

创建 cron 作业后,使用以下命令获取其状态

kubectl get cronjob hello

输出类似于以下内容

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          10s

从命令结果可以看出,cron 作业尚未调度或运行任何作业。大约一分钟后,观察作业是否创建

kubectl get jobs --watch

输出类似于以下内容

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s

现在您已经看到一个由“hello”cron 作业调度的正在运行的作业。您可以停止观察作业,并再次查看 cron 作业,以查看它是否调度了该作业

kubectl get cronjob hello

输出类似于以下内容

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        50s             75s

您应该看到 cron 作业 helloLAST SCHEDULE 中指定的时间成功调度了一个作业。目前有 0 个活动作业,这意味着作业已完成或失败。

现在,找到上次调度作业创建的 Pod,并查看其中一个 Pod 的标准输出。

# Replace "hello-4111706356" with the job name in your system
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})

显示 Pod 日志

kubectl logs $pods

输出类似于以下内容

Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster

删除 CronJob

当您不再需要 cron 作业时,请使用 kubectl delete cronjob <cronjob name> 删除它

kubectl delete cronjob hello

删除 cron 作业会删除它创建的所有作业和 Pod,并阻止它创建其他作业。您可以在 垃圾回收 中了解更多关于删除作业的信息。

上次修改时间:2023 年 8 月 24 日下午 6:38 PST:使用 code_sample 短代码代替 code 短代码 (e8b136c3b3)