热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes之Job与CronJob

一、Job(1)Job概述Job负责处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。Kubernetes支持以下几种Job:非并行Job:通常

一、Job


(1)Job概述

Job负责处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。

Kubernetes支持以下几种Job:



  • 非并行Job:通常创建一个Pod直到其成功结束;

  • 固定结束次数的Job:在spec字段下添加completions字段。创建多个Pod,直到满足completions规定的数值。如果不添加的话,默认情况下是1个;

  • 带有工作队列的并行Job:在spec字段下添加Parallelism字段。表示几个job同时并行工作。如果不添加的话,默认情况下是1个;

根据可以设置completions字段、Parallelism字段,可以将Job分为以下几种:
Kubernetes之Job与CronJob


(2)Job Controller

Job Controller负责根据Job yaml文件中Spec字段定义的内容创建Pod,并持续监控Job的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的pod再次重试任务。

如图:
Kubernetes之Job与CronJob


(3)应用示例

一个简单的小示例:

[root@master job]# cat job.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job"]
restartPolicy: Never
[root@master job]# kubectl apply -f job.yaml //生成Job资源
[root@master job]# kubectl get job //查看Job
NAME COMPLETIONS DURATION AGE
test-job 1/1 2s 5s
[root@master job]# kubectl get pod -o wide //查看Job运行的详细信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-job-rq9ws 0/1 Completed 0 25s 10.244.1.15 node01
[root@master job]# kubectl logs test-job-rq9ws //查看通过Job生成的Pod的日志信息
hello k8s job
[root@master job]# kubectl delete jobs test-job
//删除Job,那么对应的pod也会被删除!

(4)提高Job的执行效率

一个简单的小示例:

[root@master job]# cat job.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
parallelism: 2
completions: 10
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job"]
restartPolicy: Never
[root@master job]# kubectl apply -f job.yaml
[root@master job]# kubectl get job
NAME COMPLETIONS DURATION AGE
test-job 10/10 7s 15s
//可以看出是运行了10个任务

查看Job运行的详细信息,如图:
Kubernetes之Job与CronJob
由这个示例可以查看:



  • parallelism:表示同时运行多少个Pod执行任务;

  • completions:表示总共需要完成的pod的数量;

一个简单的小示例:

[root@master job]# cat job.yaml
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
backoffLimit: 5
activeDeadlineSeconds: 100
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echddddddo","hello k8s job"]
restartPolicy: Never
[root@master job]# kubectl apply -f job.yaml
[root@master job]# kubectl get job
NAME COMPLETIONS DURATION AGE
test-job 0/1 2m28s 2m28s
[root@master job]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-job-4lzsc 0/1 ContainerCannotRun 0 111s
test-job-8q659 0/1 ContainerCannotRun 0 2m42s
test-job-hjjbx 0/1 ContainerCannotRun 0 2m41s
test-job-qcf4z 0/1 ContainerCannotRun 0 2m31s

由这个示例可以看出:



  • backoffLimit:表示出现错误重试次数;

  • activeDeadlineSeconds:表示Job在集群中存活的时间;

关于Job就简单介绍这么多了!


二、CronJob

CronJob即定时任务,类似于Linux系统中的crontab,在指定的时间周期运行指定的任务。

CronJob yaml文件中的spec字段下的schedule是用来定义的时间间隔的,其用法与crontab一样(分、时、日、月、周);jobTemplate字段指定需要运行的任务;

在kubernetes 1.15中,使用CronJob需要使用API的batch/v2alpha1这个版本,但是,kubernetes本身并没有这个版本,如下:

[root@master job]# kubectl api-versions | grep batch/v2alpha1

需要进行以下操作使Kubernetes群集支持这个batch/v2alpha1版本,操作如下:

[root@master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
在spec字段的command字段下添加以下内容:
- --runtime-cOnfig=batch/v2alpha1=true
[root@master ~]# systemctl restart kubelet.service
//重启kubelet服务
[root@master ~]# kubectl api-versions | grep batch/v2alpha1
batch/v2alpha1

为了防止内容添加发生错误,附上图片一张:
Kubernetes之Job与CronJob


(1)应用示例

[root@master job]# cat cronjob.yaml
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello cronjob"]
restartPolicy: Never
[root@master job]# kubectl apply -f cronjob.yaml

查看效果:
Kubernetes之Job与CronJob

这样测试是没有问题的,但是如果指定计划任务时,就会发现它不会像预期的效果一样!
如下:

[root@master job]# cat cronjob.yaml
kind: CronJob
apiVersion: batch/v2alpha1
metadata:
name: hello
spec:
schedule: "18 16 15 1 3"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello cronjob"]
restartPolicy: Never
[root@master job]# date
2020年 01月 15日 星期三 16:18:48 CST
[root@master job]# kubectl get pod
No resources found.

这个算是k8s的一个小问题吧,官方已经在紧急修复这个问题,相信在以后的新版本,这个问题是可以解决的吧!

注意,此时仍然不能正常运行指定时间的job,这时因为k8s官方在cronjob这个资源对象的支持中还没有完善此功能。还待开发。

CronJob跟Job资源一样在cronjob.spec.jobTemplate.spec下同样支持并发Job参数:parallelism,也支持完成Pod的总数参数:completions!

关于CronJob就先简单介绍这么多!

——————————本文到此结束,感谢阅读——————————


推荐阅读
  • Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)
    驱动设计的硬件基础(1)成于坚持,败于止步处理器分类不做过多说明,处理器类型很多,大同小异存储器存储器可分为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Linux学习笔记:psef、ps aux、kill9
    一、查看进程命令1.ps命令Linux中的ps命令是ProcessStatus的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • linux 循环 cpu使用率脚本,Linux Shell脚本监视CPU利用率,达到设置的CPU利用率时发送电子邮件...
    有很多开源监控工具可用于监控Linux系统性能,当系统达到给定的阈值限制时,它将发送电子邮件警报。它监视CPU利用率、内存利用率、交换利用率、磁盘空间利 ... [详细]
  • 使用R包提供的数据是学习数据科学工具的好方法,但是在某个时候,您希望停止学习,开始使用自己的数据。在本章中,您将学习如何将纯文本矩形文件读入r。在这里,我们只讨论数据导入的皮毛,但 ... [详细]
  • WPF菜鸟谈之依赖属性,附加属性(附加《深入浅出WPF》pdf下载)
    我们都知道.NET中有属性(Property)这个概念。在MSDN中是这样定义属性的:属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样 ... [详细]
  • 一条数据的漫游 XEngine SIGMOD Paper Introduction
    大多数人追寻永恒的家园(归宿),少数人追寻永恒的航向。----瓦尔特.本雅明背景X-Engine是阿里数据库产品事业部自研的OLTP数据库存储引擎, ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 转公众号:java技术栈1、自定义任务调度首先覆盖TaskSchedulingAutoConfiguration自动配置类里面的ThreadPoolTaskSch ... [详细]
author-avatar
西瓜246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有