使用 CronJob 运行自动化任务

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

准备开始

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

创建 CronJob

Cron Job 需要一个配置文件。这是一个 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 Job 后,使用此命令获取其状态:

kubectl get cronjob hello

输出类似于:

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

从命令结果中可以看出,Cron Job 尚未调度或运行任何 Job。监视该 Job,它将在大约一分钟内创建。

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 Job 调度的正在运行的 Job。你可以停止监视该 Job 并再次查看 Cron Job,以确认它已经调度了该 Job。

kubectl get cronjob hello

输出类似于:

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

你应该看到 Cron Job helloLAST SCHEDULE 中指定的时间成功调度了一个 Job。当前有 0 个活跃的 Job,这意味着该 Job 已完成或失败。

现在,找到上次调度的 Job 创建的 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 Job 时,请使用命令 kubectl delete cronjob <cronjob name> 将其删除。

kubectl delete cronjob hello

删除 Cron Job 会移除它创建的所有 Job 和 Pod,并阻止它创建更多的 Job。你可以在垃圾回收中阅读更多关于移除 Job 的信息。

最后修改于 2024 年 7 月 4 日下午 7:39 PST:在 k/docs 中为 watch 添加术语表提示 (5053a95f53)