当前位置: 首页 > news >正文

【云原生|K8S系列】如何创建Kubernetes job和Cronjobs 入门指南

本kubernetes教程解释了如何创建kubernetes作业和cronjobs,以及它的基础知识、用例和一些提示和技巧。

什么是Kubernetes Job?

Kubernetes jobcronjobKubernetes对象,主要用于短期和批处理工作负载。

kubernetes作业对象基本上部署了一个pod,但它是为了完成而运行的,而不是像deploymentreplicasets、复制控制器和DaemonSets这样的对象,它们是持续运行的。

这意味着,作业将一直运行,直到作业中指定的任务完成,如果pods给出退出代码0,则作业将退出。该任务可以是shell脚本执行、API调用或执行数据转换并将其上传到云存储的java python执行。

然而,在正常的Kubernetes部署中,无论退出代码如何,部署对象都会在终止或抛出错误时创建新的pod,以保持部署所需的状态。

在作业运行期间,如果承载pod的节点失败,作业pod将自动重新调度到另一个节点。

Kubernetes Jobs和CronJobs用例

Kubernetes作业的最佳用例是:

  • 批处理:假设您希望每天运行一次批处理任务,或者在特定的计划中运行一次。它可以是从存储或数据库中读取文件,并将其提供给服务以处理文件。

  • 操作/特别任务:假设您想要运行运行数据库清理活动的脚本/代码,或者甚至备份kubernetes集群本身。

在我参与的一个项目中,我们将Kubernetes作业广泛用于ETL工作负载。

如何创建Kubernetes作业

在这个例子中,我将使用一个Ubuntu容器,它运行一个shell脚本,该脚本有一个for循环,根据您传递给容器的参数回显消息。参数应该是一个数字,决定循环运行的次数以回显消息。

例如,如果传递100作为参数,shell脚本将回显消息100次,容器将退出。

你可以在这里查看Dockerfile和shell脚本-> kube-job-example Docker configs

让我们从一个简单设置的作业开始。

步骤1:创建一个任务。使用我们自定义的Docker映像,以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

步骤2:让我们使用kubectl创建一个Job.yaml文件。Job部署在默认名称空间中。

kubectl apply -f job.yaml

步骤3:使用kubectl获取Job的状态。

kubectl get jobs

步骤4:现在,使用kubectl获取pod列表。

kubectl get po

步骤5:您可以使用kubectl获取Job pod日志。将pod名称替换为您在输出中看到的pod名称。

kubectl logs kubernetes-job-example-bc7s9 -f

您应该看到如下所示的输出。

多个Job Pod和并行性

在部署作业时,您可以让它在多个具有并行性的pod上运行。

例如,在一个Job中,如果您希望并行运行6个pod和2个pod,则需要将以下两个参数添加到Job清单中。

completions: 6
parallelism: 2
  • completions: 6  指定 job 需要成功运行 Pods 的次数为 6

  • parallelism: 3  指定 job 并发运行 Pods 的数量为 3

下面是带有这些参数的清单文件。

apiVersion: batch/v1
kind: Job
metadata:name: kubernetes-parallel-joblabels:jobgroup: jobexample
spec:completions: 6parallelism: 2template:metadata:name: kubernetes-parallel-joblabels:jobgroup: jobexamplespec:containers:- name: cimage: devopscube/kubernetes-job-demo:latestargs: ["100"]restartPolicy: OnFailure

并行pod处理的一个用例是消息队列上的批处理操作。假设您有一个消息队列,其中在每天的特定时间要处理数千条消息。

您可以将消息处理代码作为具有并行性的Job运行,以加快处理速度。尽管所有pod使用相同的消息处理代码,但每个pod将处理来自队列的不同消息。

生成Kubernetes Job的随机名称

你不能使用单一的Job清单文件创建多个Job。Kubernetes 会抛出一个错误,指出已经存在同名的 Job。

为了解决这个问题,你可以在元数据中添加 generateName参数。
例如:

apiVersion: batch/v1
kind: Job
metadata:generateName: kube-job-labels:jobgroup: jobexample

在上述示例中,每次运行该清单时,都会创建一个名称以 kube-job- 为前缀,后跟随机字符串的 Job。

如何创建 Kubernetes CronJob

如果你想在特定时间表上运行批处理任务,例如每两小时一次,你可以使用cron表达式创建一个Kubernetes CronJob。该任务将按照你在Job中指定的时间表自动启动。

以下是如何指定cron时间表。你可以使用crontab生成器来生成你自己的时间表。

schedule: "0,15,30,45 * * * *"

下图显示了 Kubernetes CronJob 的调度语法。

如果我们要将之前的Job作为CronJob每15分钟运行一次,可以使用以下清单。
创建一个名为cron-job.yaml的文件,并复制以下清单内容。

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: kubernetes-cron-job
spec:schedule: "0,15,30,45 * * * *"jobTemplate:spec:template:metadata:labels:app: cron-batch-jobspec:restartPolicy: OnFailurecontainers:- name: kube-cron-jobimage: devopscube/kubernetes-job-demo:latestargs: ["100"]

让我们使用kubectl部署cronjob。

kubectl create -f cron-job.yaml

列出cronjob

kubectl get cronjobs

要检查Cronjob日志,您可以列出Cronjob pod,并从处于运行状态的pod或已完成的pod中获取日志。

手动运行Kubernetes CronJob

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

例如,如果您希望手动触发cronjob,那么我们应该这样做。

kubectl create job --from=cronjob/kubernetes-cron-job manual-cron-job

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

几个关键的Kubernetes Job参数

还有一些关键参数可以根据需要用于kubernetes Job/cronjobs。让我们各看一看。

  • failedJobHistoryLimitsuccessfulJobsHistoryLimit:根据您提供的保留数删除失败和成功的作业历史记录。当您尝试列出作业时,这对于减少所有失败的条目非常有用。例如:failedJobHistoryLimit: 5 successfulJobsHistoryLimit: 10

  • backoffLimit:如果您的pod失败,重试的总次数。

  • activedeadlinesseconds:如果您想要指定cronjob运行时间的硬限制,可以使用此参数。例如,如果您只想运行cronjob一分钟,则可以将其设置为60。

总结

Kubernetes JobCronJob是处理批处理任务和周期性任务的强大工具。通过定义相应的YAML文件,并使用kubectl命令创建和管理这些任务,可以轻松实现复杂的任务调度和执行。希望这篇指南能帮助你快速上手Kubernetes JobCronJob,提升你的容器编排能力。

相关文章:

【云原生|K8S系列】如何创建Kubernetes job和Cronjobs 入门指南

本kubernetes教程解释了如何创建kubernetes作业和cronjobs,以及它的基础知识、用例和一些提示和技巧。 什么是Kubernetes Job? Kubernetes job和cronjob是Kubernetes对象,主要用于短期和批处理工作负载。 kubernetes作业对象基本上部署了一个pod&…...

力扣每日一题 6/23 字符串/模拟

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 520.检测大写字母【简单】 题目: 我们定义,在以下…...

Google trend搜索关键词

Google trend地址:https://trends.google.com/trends/?geoUS&hlzh-CN 1、具体的操作步骤如下: 2、Google trend搜索页面如下:...

Unity C#调用Android,IOS震动功能

最近在Unity上需要很原生移动端进行交互, 原理:新建一个android项目,把生成的app module给干掉,然后留下一个vibrationPlugin module,在这个module下写android震动代码,将这个android工程构建出来的 aar移…...

Ruby 注释

Ruby 注释 在编程中,注释是用于解释代码如何工作以及为什么这样编写的重要工具。Ruby作为一种解释型、面向对象的脚本语言,提供了灵活的注释方式,帮助开发者更好地组织和理解代码。本文将详细介绍Ruby中的注释类型、用法以及最佳实践。 Rub…...

C语言入门系列:特殊的main函数和exit函数

文章目录 一,main函数二,exit函数1,exit函数2,atexit()函数2.1 atexit函数的简介2.2 atexit注册的函数一定会被调用吗2.2.1 正常退出测试2.2.2 异常退出测试 一,main函数 一个C程序至少包含一个函数,这个函…...

JAVA复习3

目录 19. 下列关于 do…while 语句和 while 语句的叙述中错误的是( C ) 20. 若有定义 int a9, b6; System.out.println(a > b) 的结果是( D ) 21. 关于接口和抽象类,下列说法正确的是(A) …...

Oracle共享内存不释放

Oracle数据库使用共享内存来管理其系统全局区(SGA)和程序全局区(PGA)。当Oracle数据库的共享内存没有正确释放时,可能会导致数据库启动失败或性能问题。以下是一些可能的原因和解决方法: /dev/shm空间不足&…...

windows cmd中单引号和双引号的问题

文章目录 前言单引号和双引号的用法单引号双引号 示例对比Linux ShellWindows CMD PowerShell中的引号用法结论 前言 这个问题的起因是在windows cmd中运行一个简单的命令 node -e console.log(process)发现没有输出,但是进入node环境后,直接执行conso…...

Nacos 2.x 系列【15】数据源插件支持达梦、Oracel、PostgreSQL......

文章目录 1. 概述2. 持久层机制2.1 固定语句2.2 数据源插件 3. 案例演示3.1 编译已实现插件3.2 自定义插件3.3 数据库初始化3.4 插件引入3.4.1 方式一:引入到源码3.4.2 方式二:插件加载目录 3.5 修改配置3.6 测试 1. 概述 在实际项目开发中,…...

HJ39判断两个IP是否属于同一子网(中)

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 接上文HJ39判断两个IP是否属于同一子网 查了下&#xff0c;atoi可以转换负数。 修改成下面的代码 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool isTargetSonN…...

渗透测试基础(二) Linux+Win常用命令介绍

1. Linux常用命令 1.1 解压缩相关 1.1.1 tar命令 解包&#xff1a;tar zxvf FileName.tar 打包&#xff1a;tar czvf FileName.tar DirName1.1.2 gz命令 对于.gz格式的解压1&#xff1a;gunzip FileName.gz解压2&#xff1a;gzip -d FileName.gz压缩&#xff1a;gzip FileN…...

手机usb共享网络电脑没反应的方法

适用于win10电脑&#xff0c;安卓手机上可以 开启usb网络共享选择&#xff0c;如果选择后一直跳&#xff0c;让重复选择usb选项的话&#xff0c;就开启 开发者模式&#xff0c;进到 开发者模式 里设置 默认usb 共享网络 选项 &#xff0c;就不会一直跳让你选。 1.先用数据线 连…...

Scrivener v3 解锁版安装教程 (写作辅助软件)

前言 Scrivener&#xff0c;一个多功能的写作软件&#xff0c;被世界各地的作家广泛采用&#xff0c;从小说家到剧本家&#xff0c;再到非小说类作家和学术研究者&#xff0c;它的用户群跨越了广泛的领域&#xff0c;包括学生、法律专业人士、记者和翻译。这个软件非常注重用户…...

Python开发——用什么数据储存结构复杂的数据

在Python中&#xff0c;当需要储存包含不同类型的数据时&#xff0c;可以使用以下几种数据结构&#xff1a; 1. 字典&#xff08;dict&#xff09; 字典是一种非常灵活的数据结构&#xff0c;允许使用键-值对来存储不同类型的数据。 data {"name": "Alice&quo…...

【0-1系列】从0-1快速了解搜索引擎Scope以及如何快速安装使用(下)

前言 近日&#xff0c;社区版家族正式发布V2024.5版本&#xff0c;其中&#xff0c;社区开发版系列重磅发布Scope开发版以及StellarDB开发版。 为了可以让大家更进一步了解产品&#xff0c;本系列文章从背景概念开始介绍&#xff0c;深入浅出的为读者介绍Scope的优势以及能力…...

前端核心框架Vue指令详解

目录 ▐ 关于Vue指令的介绍 ▐ v-text与v-html ▐ v-on ▐ v-model ▐ v-show与v-if ▐ v-bind ▐ v-for ▐ 前言&#xff1a;在学习Vue框架过程中&#xff0c;大家一定要多参考官方API &#xff01; Vue2官方网址https://v2.cn.vuejs.org/v2/guide/ ▐ 关于Vue指令的…...

SD卡无法读取?原因分析与数据恢复策略

一、SD卡无法读取的困境 SD卡作为便携式的存储介质&#xff0c;广泛应用于手机、相机、平板等多种电子设备中。然而&#xff0c;在使用过程中&#xff0c;我们可能会遭遇SD卡无法读取的困扰。当我们将SD卡插入设备时&#xff0c;设备无法识别SD卡&#xff0c;或者虽然识别了SD…...

线程池的工作原理

线程池可以减少创建和销毁线程的次数&#xff0c;从而减少系统资源的消耗。当一个任务&#xff08;Runnable或Callable对象&#xff09;&#xff08;Runnable无返回值&#xff0c;Callable有返回值&#xff09;被提交到线程池时&#xff1a; 一、首先判断核心线程池中的线程是…...

Nikto一键扫描Web服务器(KALI工具系列三十)

目录 1、KALI LINUX 简介 2、Nikto工具简介 3、信息收集 3.1 目标IP&#xff08;服务器) 3.2kali的IP 4、操作实例 4.1 基本扫描 4.2 扫描特定端口 4.3 保存扫描结果 4.4 指定保存格式 4.5 连接尝试 4.6 仅扫描文件上传 5、总结 1、KALI LINUX 简介 Kali Linux 是一…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...