使用 CronJob 运行自动化任务
此页面展示了如何使用 Kubernetes CronJob 对象运行自动化任务。
在开始之前
您需要有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议您在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个集群,或者使用以下 Kubernetes playground 中的一个
创建 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 作业“hello”已在“LAST SCHEDULE”中指定的时间成功调度了一个作业。当前有 0 个活动作业,这意味着该作业已完成或失败。
现在,找到上一次调度作业创建的 pod,并查看其中一个 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 shortcode 代替 code shortcode (e8b136c3b3)