k8s_用CronJob控制器实现定期任务举例
k8s_用CronJob控制器实现定期任务举例
·
在Kubernetes中,Job
是用于一次性任务的控制器,而CronJob
是用于定期执行任务的控制器。要定期运行多个Pod任务并设置任务完成时间,我们可以使用CronJob
。以下是一个示例,展示如何配置一个定期运行的CronJob
,该CronJob
会运行多个Pod任务,并设置任务的完成时间限制。
CronJob
示例
以下示例展示了一个CronJob
,它每小时运行一次任务,任务运行的Pod最多可以执行5分钟(300秒),之后会被终止。
CronJob YAML 文件
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: "0 * * * *" # 每小时运行一次
jobTemplate:
spec:
completions: 3 # 任务完成所需的Pod数
parallelism: 3 # 并行运行的Pod数
activeDeadlineSeconds: 300 # 每个任务最多执行300秒(5分钟)
template:
metadata:
labels:
app: my-cronjob
spec:
containers:
- name: my-task
image: busybox
args:
- /bin/sh
- -c
- "echo Hello, Kubernetes! && sleep 120" # 模拟任务运行时间
restartPolicy: OnFailure # Pod失败时重启策略
解释
-
apiVersion 和 kind:
apiVersion: batch/v1
:指定使用的Kubernetes API版本。kind: CronJob
:声明资源类型为CronJob
。
-
metadata:
name: my-cronjob
:CronJob
的名称。
-
spec:
schedule: "0 * * * *"
:任务调度的时间表达式,表示每小时的第0分钟运行一次任务。jobTemplate
:定义任务的模板。completions: 3
:指定任务需要成功完成3次。parallelism: 3
:指定任务可以并行运行的Pod数量。activeDeadlineSeconds: 300
:每个任务最多执行300秒(5分钟),超过时间将被终止。template
:定义Pod模板。metadata
:labels
:Pod的标签。
spec
:containers
:定义容器列表。name: my-task
:容器名称。image: busybox
:使用busybox
镜像。args
:指定容器的运行命令。echo Hello, Kubernetes! && sleep 120
:打印信息并模拟任务运行120秒。
restartPolicy: OnFailure
:指定Pod失败时的重启策略,设置为OnFailure
表示任务失败时会重启Pod。
部署和验证
-
部署CronJob:
将上述YAML文件保存为my-cronjob.yaml
,然后使用以下命令创建CronJob
:kubectl apply -f my-cronjob.yaml
-
查看CronJob状态:
运行以下命令查看CronJob
的状态和运行的Job:kubectl get cronjob my-cronjob kubectl get jobs
-
查看Pod日志:
找到由Job创建的Pod,查看其日志:kubectl get pods kubectl logs <pod-name>
这个示例展示了如何使用CronJob
定期运行多个Pod任务,并设置任务完成时间。根据需要,您可以调整调度时间、并行运行的Pod数、任务完成所需的Pod数和最大执行时间。
更多推荐
已为社区贡献7条内容
所有评论(0)