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

    文章

    256

    浏览量

    9405

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    Kubernetes安全加固的核心技术

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

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

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

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

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

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

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

    Kubernetes Helm入门指南

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

    Kubernetes负载均衡器MetalLB介绍

    Kubernetes中一个应用服务会有一个或多个实例,每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏蔽这些后端实例的动态变化和对多实例的负载均衡,引入了 Service这个资源对象。
    的头像 发表于 03-18 16:24 718次阅读
    <b class='flag-5'>Kubernetes</b>负载均衡器MetalLB介绍

    Kubernetes中部署MySQL集群

    一般情况下 Kubernetes 可以通过 ReplicaSet 以一个 Pod 模板创建多个 pod 副本,但是它们都是无状态的,任何时候它们都可以被一个全新的 pod 替换。
    的头像 发表于 03-18 16:22 611次阅读
    <b class='flag-5'>Kubernetes</b>中部署MySQL集群

    Kubernetes包管理工具Helm的安装和使用

    Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义、安装和升级复杂的 Kubernetes 应用程序,Charts 包很容易创建、版本管理、分享和分布。
    的头像 发表于 03-13 16:06 1915次阅读

    Kubernetes Pod常用管理命令详解

    Kubernetes Pod常用管理命令详解
    的头像 发表于 02-17 14:06 977次阅读
    <b class='flag-5'>Kubernetes</b> Pod常用管理命令详解

    Kubernetes:构建高效的容器化应用平台

    Kubernetes 作为容器编排的事实标准,在容器化应用部署中发挥着关键作用。 搭建 Kubernetes 集群是应用的基础。可以使用kubeadm工具快速搭建。在主节点执行kubeadm
    的头像 发表于 01-23 15:22 574次阅读

    使用 Flexus 云服务器 X 实例部署 Kubernetes 图形化管理平台

    Kubernetes 作为当今最流行的容器编排平台,随着云计算、微服务架构和 DevOps 文化的普及,Kubernetes 在自动化部署、扩展和管理容器化应用程序方面扮演着越来越重要的角色。未来
    的头像 发表于 01-21 16:14 551次阅读
    使用 Flexus 云服务器 X 实例部署 <b class='flag-5'>Kubernetes</b> 图形化管理平台

    Kubernetes的CNI网络插件之flannel

    Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信。
    的头像 发表于 01-02 09:43 1189次阅读

    艾体宝与Kubernetes原生数据平台AppsCode达成合作

    虹科姐妹公司艾体宝宣布与Kubernetes 原生数据平台 AppsCode达成正式合作,致力于将其核心产品KubeDB引入中国市场,为企业提供专业、高效的云原生数据库管理解决方案。
    的头像 发表于 12-16 15:07 888次阅读