0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何创建Kubernetes jobs和cronjobs?

马哥Linux运维 来源:PHP开源社区 作者:PHP开源社区 2021-06-15 14:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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最好的用例实践是:

1.批处理任务:比如说你想每天运行一次批处理任务,或者在指定日程中运行。它可能是像从存储库或数据库中读取文件那样,将它们分配给一个服务来处理文件。

2.运维/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

Step2 :使用kubectl创建一个job.yaml文件的job

kubectlapply-fjob.yam

Step3:使用kubectl检查job的状态

kubectlgetjobs

Step4:使用kubectl获取pod列表

kubectlgetpo

Step5:使用kubectl获取job pod 日志。使用你在输出中看到的Pod名称替换原本的Pod名称。

kubectllogskubernetes-job-example-bc7s9-f

你应该看到如下输出:

并行运行多Job pods

当一个job被部署后,你可以让它在多个Pod上并行运行。例如,在一个job中如果你想要运行6个 pods,同时并行运行2个pods,你需要添加以下2个参数到你的job manifets中:

completions:6

以下是带有那些参数的manifest:

apiVersion:batch/v1为Kubernetes Job生成随机名称

你不能从一个job manifest文件中创建多个job,因为Kubernetes会报错,说存在一个同名的job。为了规避这个问题,你可以在元数据中添加 generateName 名称参数。

例如:

apiVersion:batch/v1

在上方示例中,每次你运行该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语法。

pYYBAGDIRC-AYzB5AAB8dMpIrKo604.jpg

来源:kubernetes.io

如果我们以cronjob的形式每15分钟运行一次我们之前的job,manifest应该如下所示。创建一个名为cron-job.yaml的文件,并复制以下manifest:

apiVersion:batch/v1beta1

让我们使用kubectl部署cronjob。

kubectlcreate-fcron-job.yaml

列出cronjobs:

kubectlgetcronjobs

你可以列出cronjob pod并从处于运行状态或完成状态的pods中获取日志来检查Cronjob日志。

手动运行Kubernetes CronJob

在某些情况下,你可能希望以临时的方式执行cronjob。你可以通过从现有的cronjob创建一个job来实现。

例如,如果你想手动触发一个cronjob,我们应该这样做:

kubectlcreatejob--from=cronjob/kubernetes-cron-jobmanual-cron-job

--from=cronjob/kubernetes-cron-job将复制cronjob模板并创建一个名为manual-cron-job的job。

Kubernetes Job的关键参数

根据你的需求,你还可以使用kubernetes jobs/cronjobs的几个关键参数:

1.failedJobHistoryLimit & successfulJobsHistoryLimit:根据你提供的保留数量删除失败和成功的job历史记录。当你尝试列出job时,这对于减少所有失败的条目非常有用。例如:

2.backoffLimit:如果你的Pod失败,重试的总次数。

3.activeDeadlineSeconds:如果你想对cronjob的运行时间进行硬性限制,可以使用此参数。例如,如果你想只运行1分钟的cronjob,你可以将其设置为60。

通过本文我们了解了创建Job以及Cron Job的步骤并且一些详细的配置过程和关键参数,希望藉由本文可以帮助你开始上手了解K8S Job和Cron Job,轻松搞定批处理任务!

图片来源:kubernetes.io

文章来源:PHP开源社区

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • kubernetes
    +关注

    关注

    0

    文章

    273

    浏览量

    9530

原文标题:带你5分钟快速了解 K8S Job

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    浅谈Kubernetes的六个核心概念

    运维工程师在学习 Kubernetes 时,往往会在某些核心概念上反复卡住。这些概念不是孤立的知识点,而是相互关联、层层递进的体系。理解这些概念的关键在于动手实践,而非仅仅阅读文档。
    的头像 发表于 04-13 13:55 116次阅读

    Kubernetes Ingress Controller对比解析

    Kubernetes集群对外提供服务时,Ingress是标准的服务暴露方式。Ingress资源定义了HTTP/HTTPS路由规则,而Ingress Controller则是这些规则的实现者
    的头像 发表于 04-09 10:09 193次阅读

    Kubernetes Pod异常问题排查实战

    集群跑着跑着,Pod 挂了。Slack 告警一刷屏,脑子一片空白。打开终端敲 kubectl get pods,看到一堆 CrashLoopBackOff、ImagePullBackOff、Pending,不知道从哪下手。这是每个刚接触 Kubernetes 运维的人都会遇到的场景。
    的头像 发表于 03-18 15:43 241次阅读

    Kubernetes Pod调度策略原理与落地指南

    Pod调度是Kubernetes的核心机制之一,决定了Pod最终运行在哪个节点上。默认调度器kube-scheduler通过一系列预选(Filtering)和优选(Scoring)算法完成调度决策,但默认行为在生产环境中往往不够用。
    的头像 发表于 02-27 11:08 288次阅读

    Kubernetes存储管理功能的落地实践

    容器本身是无状态的,Pod重启后容器内的数据全部丢失。数据库、消息队列、文件存储这类有状态服务跑在K8s上,必须解决持久化存储问题。Kubernetes通过PersistentVolume(PV)、PersistentVolumeClaim(PVC)和StorageClass三层抽象来管理存储。
    的头像 发表于 02-26 14:45 383次阅读

    KubePi:开源Kubernetes可视化管理面板,让集群管理如此简单

    KubePi:开源Kubernetes可视化管理面板,让集群管理如此简单 在云原生时代,Kubernetes已成为容器编排的事实标准,但其复杂性却让许多开发者望而却步。KubePi作为一款现代化
    发表于 02-11 12:53

    Kubernetes kubectl命令行工具详解

    kubectl是Kubernetes官方提供的命令行工具,作为与Kubernetes集群交互的主要接口,它通过调用Kubernetes API Server实现对集群资源的全面管理。在生产环境中,运维工程师需要熟练掌握kubec
    的头像 发表于 02-02 16:40 583次阅读

    香港服务器支持Docker和Kubernetes吗?

    在云原生技术成为主流的今天,Docker和Kubernetes(K8s)已成为现代化应用开发和部署的事实标准。对于选择香港服务器的开发者与企业而言,一个核心问题是:香港服务器能否完美支持Docker
    的头像 发表于 10-21 15:47 882次阅读

    借助京东AI言犀提升Kubernetes集群巡检的效率和准确性

    介绍 目前k8s-cluster-inspector组件可以自动化完成Kubernetes集群巡检,并在巡检结果中给出当前集群存在的问题,问题分级,问题类型,问题解决方法。 示例巡检数据结构如下
    的头像 发表于 09-15 16:56 630次阅读
    借助京东AI言犀提升<b class='flag-5'>Kubernetes</b>集群巡检的效率和准确性

    Kubernetes安全加固的核心技术

    在生产环境中,Kubernetes集群的安全性直接关系到企业数据安全和业务稳定性。本文将从实战角度,带你掌握K8s安全加固的核心技术。
    的头像 发表于 08-18 11:18 938次阅读

    高效管理Kubernetes集群的实用技巧

    作为一名经验丰富的运维工程师,我深知在日常的Kubernetes集群管理中,熟练掌握kubectl命令是提升工作效率的关键。今天,我将分享15个经过实战检验的kubectl实用技巧,帮助你像艺术家一样优雅地管理K8s集群。
    的头像 发表于 08-13 15:57 1102次阅读

    生产环境中Kubernetes容器安全的最佳实践

    随着容器化技术的快速发展,Kubernetes已成为企业级容器编排的首选平台。然而,在享受Kubernetes带来的便利性和可扩展性的同时,安全问题也日益凸显。本文将从运维工程师的角度,深入探讨生产环境中Kubernetes容器
    的头像 发表于 07-14 11:09 924次阅读

    树莓派部署 Kubernetes:通过 UDM Pro 实现 BGP 负载均衡!

    最近,我将家庭实验室的架构核心切换为一组树莓派。尽管在树莓派上运行的Kubernetes发行版众多,但在资源受限的设备上运行Kubernetes时,控制平面的开销是一个常见挑战
    的头像 发表于 06-25 18:00 1064次阅读
    树莓派部署 <b class='flag-5'>Kubernetes</b>:通过 UDM Pro 实现 BGP 负载均衡!

    详解Kubernetes中的Pod调度亲和性

    Kubernetes(K8s)中,Pod 调度亲和性(Affinity) 是一种高级调度策略,用于控制 Pod 与节点(Node)或其他 Pod 之间的关联(亲和)或反关联(反亲和)关系。通过亲和性规则,管理员可以更精细地控制 Pod 的调度行为,满足业务的拓扑约束、资源局部性、高可用等需求。
    的头像 发表于 06-07 13:56 1082次阅读

    Kubernetes Helm入门指南

    环境中部署和管理复杂应用的挑战。Helm命令行客户端工具,主要用于Kubernetes应用中的Chart的创建、打包、发布和管理。
    的头像 发表于 04-30 13:42 3204次阅读
    <b class='flag-5'>Kubernetes</b> Helm入门指南