Kubernetes的Cron Job
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/v2alpha1
kind: CronJob
metadata:
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.yaml
cronjob "hello" created
查看这个CronJob的状态:
kubectl get cronjob hello
NAME SCHEDULE SUSPEND ACTIVE LAST-SCHEDULE
hello */1 * * * * False 0 <none>
从上面的输出看这个cronjob还没有被调度,等大约1分钟再次查看:
kubectl get jobs --watch
NAME DESIRED SUCCESSFUL AGE
hello-1503321060 1 1 2m
hello-1503321120 1 1 1m
hello-1503321180 1 1 36s
kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST-SCHEDULE
hello */1 * * * * False 0 Mon, 21 Aug 2017 21:14:00 +0800
删除Cron Job
kubectl delete cronjob hello
cronjob "hello" deleted
或
kubectl delete -f cronjob.yaml
删除命令会停止已经创建出来的作业,当时正在运行的作业不会被被停止,同时Job和Pod不会被删除:
kubectl get jobs
NAME DESIRED SUCCESSFUL AGE
hello-1503321060 1 1 7m
hello-1503321120 1 1 6m
hello-1503321180 1 1 5m
hello-1503321240 1 1 4m
hello-1503321300 1 1 3m
hello-1503321360 1 1 2m
hello-1503321420 1 1 1m
需要手动删除上面的job,job被删除,它创建出来的Pod也会被删除掉。
使用
kubectl delete jobs --all可以删除当前namespaces下所有的job
当前Cron Job的限制
当前一个CronJob在执行期间“大约”创建一个Job,之所以说“大约”是因为在特殊的情况下可能会创建两个或没有Job被创建。Kubernetes官方正在试图使这种情况尽量少发生,但目前还不能保证完全杜绝。 因此如果我们现在使用它,那么Job应该被我们设计成幂等的。
Kubernetes的Cron Job的更多相关文章
- Kubernetes 在知乎上的应用
从 Mesos 到 Kubernetes 之前的调度框架是基于 Mesos 自研的.采用的语言是 Python.运行了大概两年多的时间了,也一直比较稳定.但随着业务的增长,现有的框架的问题逐渐暴露. ...
- k8s系列0--Kubernetes基础知识
Kubernetes介绍 参考:Kubernetes核心组件解析 Pod是k8s的最小调度单元 每个pod有独立的IP,但是pod的IP是不可靠的,重新调度pod就会改变IP,service概念就是为 ...
- Kubernetes — Job与CronJob
有一类作业显然不满足这样的条件,这就是“离线业务”,或者叫作 Batch Job(计算业务). 这 种业务在计算完成后就直接退出了,而此时如果你依然用 Deployment 来管理这种业务的话,就会 ...
- 如何将云原生工作负载映射到 Kubernetes 中的控制器
作者:Janakiram MSV 译者:殷龙飞 原文地址:https://thenewstack.io/how-to-map-cloud-native-workloads-to-kubernetes- ...
- How to trigger a Kubernetes cronjob manually-手动触发一个cronjob
What should you do when you’ve developed and installed a cron job for your Kubernetes application, a ...
- [译]Kubernetes 分布式应用部署和人脸识别 app 实例
原文地址:KUBERNETES DISTRIBUTED APPLICATION DEPLOYMENT WITH SAMPLE FACE RECOGNITION APP 原文作者:skarlso 译文出 ...
- Kubernetes基础:编排调度的那些Controllers
0. 概述 Kubernetes提供了很多Controller资源来管理.调度Pod,包括Replication Controller.ReplicaSet.Deployments.StatefulS ...
- K8S学习笔记之Kubernetes核心概念
0x00 Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...
- centos7.5单机yum安装kubernetes
1.系统配置 centos7.5 docker 1.13.1 centos7下安装docker 2.关闭防火墙,selinux,swapoff systemctl disable firewalld ...
随机推荐
- [转]使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化
原文: https://www.cnblogs.com/phpdragon/p/5314650.html ----------------------------------------------- ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装
一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...
- C++之new、delete 与malloc、free的异同
在C/C++编程中常常会申请内存.而对内存的申请释放操作有两套方法: new.delete 与malloc.free.他们的使用最好是成对使用,不要去混搭---这可不是时尚界哦. 例如以下是这两组方法 ...
- JavaScript 闭包(个人理解)
当function里嵌套function时,内部的function可以访问外部function里的变量.但这不是闭包 function foo(x) { var tmp = 3; function b ...
- 推荐一款jQuery ColorPicked 颜色拾取器插件
先看实现的效果图, 本文底部有完整demo 不想看我墨迹的可以跳过了^_^. 官网地址:http://www.eyecon.ro/colorpicker/#about 代码SVN 地址:https:/ ...
- Linux 远程和本地的一些解决方式
有的小伙伴想Linux 远程登录 两台机器同一时候root登录.事实上能够同一时候多个用户的. Linux是多用户的多任务系统,能够同一时候多个用户登录到系统,也能够一个用户通过不同终端登录到一个系 ...
- 分析jQuery源码时记录的一点感悟
分析jQuery源码时记录的一点感悟 1. 链式写法 这是jQuery语法上的最大特色,也许该改改POJO里的set方法,和其他的非get方法什么的,可以把多行代码合并,减去每次 ...
- 转:Creating a Nested ESXi 5 Environment
http://tsmith.co/2011/creating-a-nested-esxi-5-environment/ http://tsmith.co/2012/vsphere-5-1-lab-ne ...
- 开发JAVA9以上的项目时,出现ClassNotFoundException: javax.xml.bind.JAXBException的解决方法
一.问题描述: 开发JAVA9以上的项目时,出现ClassNotFoundException: javax.xml.bind.JAXBException的解决方法 二.问题样例 三.解决方案 打开mv ...
- MySql安装完成后设置远程访问的角本
一.方法: 登陆安装Mysql的机器的Mysql, 执行: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password001!' ...