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

    文章

    223

    浏览量

    8682

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

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

收藏 人收藏

    评论

    相关推荐

    Kubernetes集群搭建容器云需要几台服务器?

    Kubernetes集群搭建容器云需要几台服务器?至少需要4台服务器。搭建容器云所需的服务器数量以及具体的搭建步骤,会根据所选用的技术栈、业务规模、架构设计以及安全需求等因素而有所不同。以下是一个基于Kubernetes集群的容器云搭建的概述:
    的头像 发表于 10-21 10:06 111次阅读

    基于DPU与SmartNIC的K8s Service解决方案

    1.  方案背景 1.1. Kubernetes Service介绍 Kubernetes Service是Kubernetes中的一个核心概念,它定义了一种抽象,用于表示一组提供相同功能的Pods
    的头像 发表于 09-02 17:01 840次阅读
    基于DPU与SmartNIC的K8s Service解决方案

    使用Velero备份Kubernetes集群

    Velero 是 heptio 团队(被 VMWare 收购)开源的 Kubernetes 集群备份、迁移工具。
    的头像 发表于 08-05 15:43 312次阅读
    使用Velero备份<b class='flag-5'>Kubernetes</b>集群

    如何使用Kubeadm命令在PetaExpress Ubuntu系统上安装Kubernetes集群

    Kubernetes,通常缩写为K8s,是一个开源的容器编排平台,旨在自动化容器化应用的部署、扩展和管理。有了Kubernetes,您可以轻松地部署、更新和扩展应用,而无需担心底层基础设施。
    的头像 发表于 07-15 13:31 791次阅读
    如何使用Kubeadm命令在PetaExpress Ubuntu系统上安装<b class='flag-5'>Kubernetes</b>集群

     K8S学习教程一:使用PetaExpress云服务器安装Minikube 集群

    使得开发人员能够在本地机器上轻松创建一个单节点的 Kubernetes 集群,从而方便开发、测试和学习 Kubernetes。 我们看下如何使用PetaExpress云服务器安装Minikube 集群
    的头像 发表于 07-01 15:41 297次阅读
     K8S学习教程一:使用PetaExpress云服务器安装Minikube 集群

    e² studio创建lib文件及使用

    e² studio创建lib文件及使用
    的头像 发表于 01-18 08:06 396次阅读
    e² studio<b class='flag-5'>创建</b>lib文件及使用

    Kubernetes Gateway API攻略教程

    Kubernetes Gateway API 刚刚 GA,旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源,用于管理已暴露的服务。在这篇文章中,我将介绍 Gateway
    的头像 发表于 01-12 11:32 810次阅读
    <b class='flag-5'>Kubernetes</b> Gateway API攻略教程

    如何创建重叠的封装文件

    创建重叠的封装文件是一种常用的软件设计模式,它允许程序员使用多层次的连接和封装来保护数据和功能。下面介绍如何创建重叠的封装文件。 重叠的封装是一种软件设计模式,可用于创建安全、高效且易于维护的代码
    的头像 发表于 01-07 16:51 513次阅读

    配置Kubernetes中Pod使用代理的两种常见方式

    在企业网络环境中进行Kubernetes集群的管理时,经常会遇到需要配置Pods通过HTTP代理服务器访问Internet的情况。这可能是由于各种原因,如安全策略限制、网络架构要求或者访问特定资源
    的头像 发表于 01-05 11:22 1040次阅读
    配置<b class='flag-5'>Kubernetes</b>中Pod使用代理的两种常见方式

    使用Jenkins和单个模板部署多个Kubernetes组件

    在持续集成和部署中,我们通常需要部署多个实例或组件到Kubernetes集群中。通过Jenkins的管道脚本,我们可以自动化这个过程。在本文中,我将演示如何使用Jenkins Pipeline及单个
    的头像 发表于 01-02 11:40 675次阅读
    使用Jenkins和单个模板部署多个<b class='flag-5'>Kubernetes</b>组件

    Kubernetes RBAC:掌握权限管理的精髓

    Kubernetes RBAC(Role-Based Access Control)是 Kubernetes 中一项关键的安全功能,它通过细粒度的权限控制机制,确保集群资源仅被授权的用户或服务账号访问。
    的头像 发表于 12-25 09:43 438次阅读

    Kubernetes开发指南之深入理解CRD

    CRD本身是Kubernetes内置的资源类型,全称是CustomResourceDefinition,可以通过命令查看,kubectl get查看集群内定义的CRD资源。
    的头像 发表于 12-13 18:19 803次阅读
    <b class='flag-5'>Kubernetes</b>开发指南之深入理解CRD

    线程池的创建方式有几种

    线程池是一种用于管理和调度线程的技术,能够有效地提高系统的性能和资源利用率。它通过预先创建一组线程并维护一个工作队列,将任务提交给线程池来处理,从而减少线程的创建和销毁次数,避免了线程频繁创建和销毁
    的头像 发表于 12-04 16:52 797次阅读

    如何创建新的ROS工作空间

    创建新的ROS工作空间 由于ROS Motion Planning运动规划库与Navigation导航包存在一些同名但源码和功能不同的功能包,比如global_planne。 因此,个人推荐创建一个
    的头像 发表于 11-26 17:09 1316次阅读
    如何<b class='flag-5'>创建</b>新的ROS工作空间

    codeblocks怎么创建c文件

    在 CodeBlocks 中,你可以按照以下步骤创建一个新的 C 文件: 步骤 1: 打开 CodeBlocks 首先,你需要打开 CodeBlocks IDE。你可以在开始菜单或快捷方式上找到它
    的头像 发表于 11-26 10:21 4337次阅读