点击上方 "编程技术圈"关注, 星标或置顶一起成长

后台回复“大礼包”有惊喜礼包!

日英文

In life, then boring time, also are limited edition. Don't waste your new tears for the old sorrow.

在生命中,再无聊的时光,也都是限量版。所以,不要为旧的悲伤,浪费新的眼泪。

每日掏心话

清贫,不但可以说是思想的导师,并且是风格的导师;它教精神与肉体同样懂得淡泊。

责编:乐乐 | 来自:RancherLabs

编程技术圈(ID:study_tech)第 1238 次推文

往日回顾:刘强东的代码水平到底有多牛? 网友:95年一个晚上赚5万!

     

   正文   

Kubernetes jobs主要是针对短时和批量的工作负载。它是为了结束而运行的,而不是像deployment、replicasets、replication controllers和DaemonSets等其他对象那样持续运行。本文将介绍如何创建Kubernetes jobs和cronjobs,以及一些小技巧。
Kubernetes Jobs会一直运行到Job中指定的任务完成。也就是说,如果pods给出退出代码0,那么Job就会退出。而在正常的Kubernetes中,无论退出代码是什么,deployment对象在终止或出现错误时都会创建新的pod,以保持deployment的理想状态。
在job运行过程中,如果托管pod的节点发生故障,Job pod将被自动重新安排到另一个节点。‍‍‍‍‍‍‍Kubernetes Jobs用例
对于Kubernetes Jobs最好的用例实践是:
批处理任务:比如说你想每天运行一次批处理任务,或者在指定日程中运行。它可能是像从存储库或数据库中读取文件那样,将它们分配给一个服务来处理文件。
运维/ad-hoc任务:比如你想要运行一个脚本/代码,该脚本/代码会运行一个数据库清理活动,甚至备份一个Kubernetes集群。
如何创建Kubernetes Job
在本例中,我们将使用Ubuntu 容器来运行一个带有for循环的shell脚本,并根据你传递给容器的参数来呼应消息。这个参数是一个数字,决定shell脚本循环应该运行多少次。
例如,如果你传递了参数100,那么shell脚本将呼应消息100次然后容器将会退出。
你可以访问以下链接查看Dockerfile和shell脚本:
https://github.com/devopscube/Kubernetes-jobs-example/tree/master/Docker
我们先从一个简单设置的job开始。
Step1:使用自定义的Docker镜像创建一个job.yaml文件,命令参数为100。100将会作为参数传递给docker ENTRYPOINT脚本。
apiVersion: batch/v1 kind: Job metadata:     name: kubernetes-job-example     labels:         jobgroup: jobexample spec:     template:         metadata:             name: kubejob             labels:                 jobgroup: jobexample         spec:             containers:             - name: c                 image: devopscube/kubernetes-job-demo:latest                 args: ["100"]             restartPolicy: OnFailureStep2 :使用kubectl创建一个job.yaml文件的job
kubectl apply -f job.yamStep3:使用kubectl检查job的状态
kubectl get jobsStep4:使用kubectl获取pod列表
kubectl get poStep5:使用kubectl获取job pod 日志。使用你在输出中看到的Pod名称替换原本的Pod名称。
kubectl logs kubernetes-job-example-bc7s9 -f你应该看到如下输出:
并行运行多Job pods
当一个job被部署后,你可以让它在多个Pod上并行运行。例如,在一个job中如果你想要运行6个 pods,同时并行运行2个pods,你需要添加以下2个参数到你的job manifets中:
搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。
completions: 6parallelism: 2以下是带有那些参数的manifest:
apiVersion: batch/v1kind: Jobmetadata:  name: kubernetes-parallel-job  labels:    jobgroup: jobexamplespec:  completions: 5  parallelism: 2  template:    metadata:      name: kubernetes-parallel-job      labels:        jobgroup: jobexample    spec:      containers:      - name: c        image: devopscube/kubernetes-job-demo:latest        args: ["100"]      restartPolicy: OnFailure
为Kubernetes Job生成随机名称
你不能从一个job manifest文件中创建多个job,因为Kubernetes会报错,说存在一个同名的job。为了规避这个问题,你可以在元数据中添加 generateName 名称参数。
例如:
apiVersion: batch/v1kind: Jobmetadata:  generateName: kube-job-  labels:    jobgroup: jobexample在上方示例中,每次你运行该manifest,job将以kube-job-作为前缀,后面跟着一个随机字符串来创建。如何创建Kubernetes CronJob
如果你想按照特定的时间表运行批处理job,例如,每2个小时运行一次。你可以用cron表达式创建一个Kubernetes cronjob。Job会按照你在job中提到的时间表自动启动。
下面我们将介绍如何指定一个cron计划,你可以使用crontab生成器(https://crontab-generator.org/)来生成自己的时间计划。
schedule: "0,15,30,45 * * * *"下图显示了Kubernetes cronjob schedule语法。
来源:kubernetes.io
如果我们以cronjob的形式每15分钟运行一次我们之前的job,manifest应该如下所示。创建一个名为cron-job.yaml的文件,并复制以下manifest:
apiVersion: batch/v1beta1kind: CronJobmetadata:    name: kubernetes-cron-jobspec:  schedule: "0,15,30,45 * * * *"  jobTemplate:    spec:      template:        metadata:          labels:            app: cron-batch-job        spec:          restartPolicy: OnFailure          containers:          - name: kube-cron-job            image: devopscube/kubernetes-job-demo:latest            args: ["100"]让我们使用kubectl部署cronjob。
kubectl create -f cron-job.yaml列出cronjobs:
kubectl get cronjobs你可以列出cronjob pod并从处于运行状态或完成状态的pods中获取日志来检查Cronjob日志。手动运行Kubernetes CronJob
在某些情况下,你可能希望以临时的方式执行cronjob。你可以通过从现有的cronjob创建一个job来实现。
例如,如果你想手动触发一个cronjob,我们应该这样做:
kubectl create job --from=cronjob/kubernetes-cron-job manual-cron-job--from=cronjob/kubernetes-cron-job将复制cronjob模板并创建一个名为manual-cron-job的job。
Kubernetes Job的关键参数
根据你的需求,你还可以使用kubernetes jobs/cronjobs的几个关键参数:
failedJobHistoryLimit & successfulJobsHistoryLimit:根据你提供的保留数量删除失败和成功的job历史记录。当你尝试列出job时,这对于减少所有失败的条目非常有用。例如:
backoffLimit:如果你的Pod失败,重试的总次数。
activeDeadlineSeconds:如果你想对cronjob的运行时间进行硬性限制,可以使用此参数。例如,如果你想只运行1分钟的cronjob,你可以将其设置为60。
通过本文我们了解了创建Job以及Cron Job的步骤并且一些详细的配置过程和关键参数,希望藉由本文可以帮助你开始上手了解K8S Job和Cron Job,轻松搞定批处理任务!
原文链接:
https://devopscube.com/create-kubernetes-jobs-cron-jobs/
PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!欢迎加入后端架构师交流群,在后台回复“学习”即可。最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。在这里,我为大家准备了一份2021年最新最全BAT等大厂Java面试经验总结。
别找了,想获取史上最简单的Java大厂面试题学习资料
扫下方二维码回复「面试」就好了猜你还想看
阿里、腾讯、百度、华为、京东最新面试题汇集
SpringBoot库存管理系统,拿来学习真香腾讯员工晒出薪资:真实 985 毕业薪资,大家看我还有救吗?网友:日薪?2W 字你全面认识 Nginx嘿,你在看吗?

5步创建K8S Job,搞定批处理相关推荐

  1. 剪贴板占用计算机的内存,电脑提示系统内存不足怎么办?五步帮你轻松搞定内存不足问题...

    原标题:电脑提示系统内存不足怎么办?五步帮你轻松搞定内存不足问题 电脑提示系统内存不足怎么办?五步帮你轻松搞定内存不足问题!电脑提示系统内存不足这类问题,相信经常使用电脑的人或多或少都会遇到.那么,在 ...

  2. 如何制作印章_用Word也能做出逼真的电子印章!简单3步!1分钟搞定

    我们在办公的时候经常需要用到印章,以前可能是在纸上盖章,现在电子文档比较多,电子印章也开始流行使用,那么我们如何制作一个逼真的印章呢?很简单,用Word就可以搞定啦! 一.印章制作 1.圆圈制作 首先 ...

  3. 2 如何设置窗口title_如何正确的知晓生僻字发音?无需字典查询,2步手机设置轻松搞定...

    我们使用手机进行浏览或者阅读时,是不是会遇到一些生僻字,我们完全就不知不知道这些生僻字的发音.比如说下面这些字: 以上这些字,小酱觉得大家应该很少有能认出来的吧,那么我们遇到这种情况时,很多人的选择应 ...

  4. 如何正确的知晓生僻字发音?无需字典查询,2步手机设置轻松搞定

    我们使用手机进行浏览或者阅读时,是不是会遇到一些生僻字,我们完全就不知不知道这些生僻字的发音.比如说下面这些字: 以上这些字,小酱觉得大家应该很少有能认出来的吧,那么我们遇到这种情况时,很多人的选择应 ...

  5. Word怎么转换成PDF?三步教你免费搞定

    Word文档是我们日常工作和学习中最常用的文件格式之一,但是有时候我们需要将其转换成PDF格式,以便更方便地与他人共享和阅读.转换Word文档为PDF格式非常简单,下面将介绍一个简单三步免费搞定的方法 ...

  6. 干货!三步走带你搞定秋招面试!

    今天的这篇文章是为今年的秋季招聘来写的,主要针对的是大学毕业实习的同学,今天不针对在工作中想转行的就业辅导,但是有些内容都是相通的,大家也可以看一下. 秋季招聘会 今天的内容主要包括3个部分讲解:1. ...

  7. 【论文写作】学位毕业论文怎么写,简单九步清清楚楚帮你搞定!

    1:选择合适的论文题目 科技史著名教授任定成提醒,有的研究生在写论文的时候,题目很大,但写作过程中就会发现自己其实很难驾驭.所以,写论文一定要学会大处着眼.小处着手,要做封闭研究,比如可以做一些数据统 ...

  8. bcc校验码计算_CRC校验你会吗?计算、校验、C语言实现,三步教你轻松搞定

    目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研究了一下,周末有时间整理了一 ...

  9. 三星c7语言设为英文,三星C7手机如何更改显示语言?简单几步就可轻松搞定!

    三星C7怎么更改显示语言呢?当三星C7显示的语言不是自己所需要的语言的时候,我们可以进入手机设置里面进行相关修改语言哦.但考虑到有的朋友是刚刚入手三星C7不知道在哪里更改,下面小编就和大家分享一下三星 ...

最新文章

  1. 从起源到未来,一文看懂70年的人工智能简史
  2. 英特尔披露人工智能战略
  3. python线程信号量semaphore
  4. Nginx的nginx.conf配置文件中文注释说明
  5. BeanFactory和ApplicationContext对比
  6. 新快现类似产品_小米全新折叠屏产品曝光,预计今年还有更多折叠屏产品亮相...
  7. mysql怎么初始化自增值_MySQL 重置自增值
  8. ireport怎么生成jasper文件
  9. linux系统写入iso到u盘,怎么将aptosid ISO系统写入u盘等设备制作系统启动盘
  10. spring-boot-starter-thymeleaf对没有结束符的HTML5标签解析出错
  11. IMX290 291驱动
  12. 电厂数字化进阶之路(一):光明的使者
  13. office2007加载缓慢_word2007打开特别慢怎么解决
  14. 注册页面案例-世纪佳缘
  15. STING 与 cGAS的结合导致TBK1 激酶募集和活化
  16. 5分钟搞定内网穿透工具-ngrok
  17. 直播已入下半场,秀场直播该何去何从?
  18. VMware Workstation实例二:单IP的虚拟机提供外网访问
  19. 第三章:3.3 傅里叶级数收敛分析
  20. Ceph分布式文件系统及服务器远程存储的部署

热门文章

  1. 【AList】网盘聚合神器,打造灵活的私人云存储
  2. 美通企业日报 | 海信发布中国首款社交电视;阿里与VEX将成立高校机器人联盟...
  3. java学籍管理系统课设报告,java课程设计学籍管理系统.doc
  4. 快速实现抖音分享与第三方登录
  5. 服务器数据恢复通用方法/服务器硬盘故障导致数据丢失解决方案
  6. 正确的Python学习路线图,来了!
  7. Java 汉语转拼音
  8. 基于SSH的游艇出租系统
  9. 基于Java+SpringBoot+vue+element实现毕业就业招聘系统
  10. 辛辛苦苦写了一个产品,如何获取种子用户?