IMLC.ME
Search…
en-US
创建 Kubernetes Cron 定时任务
cron 是开发中常用的定时任务工具。cron 表示式由于其强大的表达能力,能满足各种条件的定时计划。但是单机的 cron 工具(例如 crontab),无法满足大规模的 cron job 任务部署和运行。而 Kubernetes 的容器调度和编排恰好满足了这方面的需求。

创建一个简单的 Cron 定时任务

下面会以官方的 hello 镜像为例,创建一个简单的定时任务。并且演示一下相关联的基础操作(例如日志查询、Job 查询、删除任务等)。

创建 .yaml 文件

源代码储存在 CODING | 一站式软件研发管理平台 创建 create-cronjob.yaml
1
apiVersion: batch/v1beta1
2
kind: CronJob
3
metadata:
4
name: hello
5
spec:
6
schedule: "*/1 * * * *"
7
jobTemplate:
8
spec:
9
template:
10
spec:
11
containers:
12
- name: hello
13
image: busybox
14
args:
15
- /bin/sh
16
- -c
17
- date; echo Hello from the Kubernetes cluster
18
restartPolicy: OnFailure
Copied!

部署

登录 k8s master 节点。运行如下 kubectl 命令
1
kubectl create -f ./create-cronjob.yaml
Copied!
此命令告诉 kubectl 按照当前目录下的 create-cronjob.yaml 文件创建 cron job。
你也可以直接调用 kubectl create -f https://lawrenceching.coding.net/p/play-with-kubernetes/d/play-with-kubernetes/git/raw/master/cronjob/create-cronjob.yaml ,直接使用我已创建好的 yaml 文件。
当你看到命令行输出 cronjob.batch/hello created ,创建 cronjob 就成功了。

查看和删除 cronjob 和 job

cronjob 是定时任务的要求。 job 是 cronjob 触发后真实在跑的任务。别混淆。

查看和删除 cron job

1
# 查询 cronjob
2
Kubectl get cronjob
3
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
4
hello */1 * * * * False 1 8s 3m12s
5
# 删除 cronjob
6
Kubectl delete cronjob hello
Copied!

查看和删除 job

1
# 查询 jobs
2
Kubectl get jobs
3
NAME COMPLETIONS DURATION AGE
4
hello-1574569560 1/1 12s 2m55s
5
hello-1574569620 1/1 18s 115s
6
hello-1574569680 1/1 10s 55s
7
# 删除 jobs
8
Kubectl delete jobs hello-1574569680
Copied!
如果嫌麻烦,直接运行 kubectl get all 就可以看到当前 k8s 集群所有的状态。
1
kubectl get all
2
NAME READY STATUS RESTARTS AGE
3
pod/hello-1574569500-fhmwm 0/1 Completed 0 93s
4
pod/hello-1574569560-kh46t 0/1 Completed 0 33s
5
6
7
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
8
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 62d
9
10
NAME COMPLETIONS DURATION AGE
11
job.batch/hello-1574569500 1/1 16s 93s
12
job.batch/hello-1574569560 1/1 12s 33s
13
14
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
15
cronjob.batch/hello */1 * * * * False 0 33s 97s
Copied!
你可以运行 kubectl delete <name> 删除你想删除的任何资源。<name>kubectl get all 输出中 NAME 列显示的名称。

查看运行日志

Kubernetes 会为 job 创建容器并执行。要查看 job 的运行日志,相当于要查看 job 所在的容器的日志。以查看 hello-1574569560 job 为例。
1
# 查找 job 所在的 pod
2
Kubectl get pods | grep hello-1574569560
3
4
# 查看日志
5
Kubectl logs <pod-id>
Copied!
Last modified 1yr ago