博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kubernetes的Cron Job
阅读量:4586 次
发布时间:2019-06-09

本文共 2261 字,大约阅读时间需要 7 分钟。

Kubernetes集群使用Cron Job管理基于时间的作业,可以在指定的时间点执行一次或在指定时间点执行多次任务。 一个Cron Job就好像Linux crontab中的一行,可以按照Cron定时运行任务。

定时任务对我们并不陌生,例如Linux的crontab,各种编程语言都内置了定时任务支持,这在我们应用开发中比较常见,但这种定时任务在分布式系统中使用会有限制,因此需要分布式计划任务。 Kubernetes的CronJob可以理解为Kubernetes对分布式计划任务的支持。

在使用Cron Job之前需要确认Kubernetes集群的版本>=1.5,因为它还处于alpha,所以还需要对kube-apiserver加入启动参数--runtime-config=batch/v2alpha1=true,开启batch/v2alpha1。 下面我们来试验一下,试验的Kubernetes集群的版本为1.6.8。

在加入启动参数--runtime-config=batch/v2alpha1=true后,要重启kube-apiserver, kube-controller-manager, kube-scheduler,创建crontab才会被调度

创建Cron Job

创建一个简单的CronJob,每隔1分钟打印当前的时间并”say Hello”,cronjob.yaml:

apiVersion: batch/v2alpha1kind: CronJobmetadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: alpine args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure

下面创建这个CronJob:

kubectl create -f cronjob.yamlcronjob "hello" created

查看这个CronJob的状态:

kubectl get cronjob helloNAME      SCHEDULE      SUSPEND   ACTIVE    LAST-SCHEDULEhello     */1 * * * *   False     0         

从上面的输出看这个cronjob还没有被调度,等大约1分钟再次查看:

kubectl get jobs --watchNAME               DESIRED   SUCCESSFUL   AGEhello-1503321060   1         1            2mhello-1503321120   1         1         1mhello-1503321180   1         1         36skubectl get cronjobNAME      SCHEDULE      SUSPEND   ACTIVE    LAST-SCHEDULEhello     */1 * * * *   False     0         Mon, 21 Aug 2017 21:14:00 +0800

删除Cron Job

kubectl delete cronjob hellocronjob "hello" deleted

kubectl delete -f cronjob.yaml

删除命令会停止已经创建出来的作业,当时正在运行的作业不会被被停止,同时Job和Pod不会被删除:

kubectl get jobsNAME               DESIRED   SUCCESSFUL   AGEhello-1503321060   1         1            7mhello-1503321120   1         1            6mhello-1503321180   1         1            5mhello-1503321240   1         1            4mhello-1503321300   1         1            3mhello-1503321360   1         1            2mhello-1503321420   1         1            1m

需要手动删除上面的job,job被删除,它创建出来的Pod也会被删除掉。

使用kubectl delete jobs --all可以删除当前namespaces下所有的job

当前Cron Job的限制

当前一个CronJob在执行期间“大约”创建一个Job,之所以说“大约”是因为在特殊的情况下可能会创建两个或没有Job被创建。Kubernetes官方正在试图使这种情况尽量少发生,但目前还不能保证完全杜绝。 因此如果我们现在使用它,那么Job应该被我们设计成幂等的。

转载于:https://www.cnblogs.com/weifeng1463/p/10289237.html

你可能感兴趣的文章
泛泰A880S升级官方4.4.2 binx教程
查看>>
Python装饰器
查看>>
Java String format 对%的处理
查看>>
跨平台移动应用开发AppCan开发文档阅读指南
查看>>
Lind.DDD敏捷领域驱动框架~介绍
查看>>
PHP自带函数给数字前补0或补位(转)
查看>>
iOS runtime实用篇--和常见崩溃say good-bye!
查看>>
细说Cookie
查看>>
Javascript 第二章
查看>>
几个常用算法及反射+多线程调用
查看>>
ubuntu12.04 上面配置blogilo的博客园客户端的步骤
查看>>
Codeforces Gym101170I:Iron and Coal(建多幅图+多次BFS)***
查看>>
Python杂俎 —— 自动压缩指定格式文件&自动删除
查看>>
2017年01月。。
查看>>
bcmath(精准数学的计算)
查看>>
ASP.NET的路由系统:根据路由规则生成URL
查看>>
ASP.NET Core Razor 视图起始页 - ASP.NET Core 基础教程 - 简单教程,简单编程
查看>>
从PRISM开始学WPF(四)Prism-Module?
查看>>
解决session阻塞的问题
查看>>
SQL Server 触发器
查看>>