千家信息网

怎么创建K8S Job及搞定批处理

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,怎么创建K8S Job及搞定批处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Kubernetes jobs主要是针对短时和批量的
千家信息网最后更新 2024年11月26日怎么创建K8S Job及搞定批处理

怎么创建K8S Job及搞定批处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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  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: OnFailure

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

kubectl apply -f job.yam

Step3:使用kubectl检查job的状态

kubectl get jobs

Step4:使用kubectl获取pod列表

kubectl get po

Step5:使用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语法。 如果我们以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的几个关键参数:

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

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

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

关于怎么创建K8S Job及搞定批处理问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

运行 参数 脚本 文件 代码 任务 名称 时间 状态 问题 容器 数据 日志 生成 关键 多个 对象 手动 数据库 时间表 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是收费服务器 jstor期刊数据库 怎样把服务器文件放到桌面 审计署审计软件开发技术 服务器吃撑了什么原因 有光网络技术有限公司 银川软件开发公司有什么优点 网络安全就业好找工作吗 基于时序的图数据库 深圳软件开发工作室 discuz更改数据库 西南财经网络安全插画 防范网络安全问题措施 ppt怎样找回未保存数据库 南方电网网络安全系统 华为账号连不上服务器怎么回事 杭州乐有为网络技术服务部 网络安全依法承担责任 新世纪网络技术有限公司在哪里 乌苏市网络安全宣传视频 国内高级软件开发经理薪资 绘制软件开发流程图的软件 正规的网络技术 众信网络技术有限公司 查询类数据库er图怎么画 空间数据库网格索引的适用范围 打电话给对方提示服务器错误 网络安全的七个隐私和财产 中国软件开发做加密的公司 湖北国家网络安全宣传周
0