k8s Job 执行一次性以及批处理任务使用场景案例

目录
  • 前言
  • Job 是什么
  • Job 的一些使用场景
  • Job 控制器
  • Job Spec 格式定义
  • Job pod 自动清理
  • 暂停和重启 Job
  • 案例讲解
  • 使用 Job 的注意事项
  • 总结

前言

Job 类型是 Kubernetes 资源对象之一,用于执行一次性任务或批处理作业。

本文将介绍 Kubernetes 的 Job 与相关概念,帮助理解和使用 Kubernetes 中的 Job。

Job 是什么

Job 是一种 Kubernetes 资源对象,用于执行一次性任务或批处理作业。

Job 可以控制 Pod 的数量,确保一定数量的 Pod 成功完成任务后停止并完成作业。

在 Kubernetes 中,Job 类型通常用于数据处理、备份和恢复操作等场景。

Job 的一些使用场景

  • 数据导出和转换:例如从数据库中导出数据到 CSV 文件、将图片转换为缩略图等。
  • 日志打包和压缩:例如按时间段打包日志文件、将多个日志文件压缩成一个文件等。
  • 备份和恢复操作:例如备份数据库、配置文件等,并将其存储到云存储服务中以便后续恢复。
  • Batch 任务:例如根据输入参数计算机器学习模型的特征向量、数据预处理等。

Job 控制器

Job 控制器是 Kubernetes 中的一个组件,可以监视 Job 对象的状态,并根据需要启动或停止 Pod。

Job 控制器接受用户提交的 Job Spec,根据其定义的规则创建一定数量的 Pod,确保它们能够执行指定的任务。

当所有 Pod 都成功完成任务后,Job 控制器会停止 Pod 并标记 Job 为已完成。

Job Spec 格式定义

Job Spec 定义了 Job 对象的规格,包括任务名称、镜像、命令、参数等信息。以下是一个示例 Job Spec:

apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  template:
    spec:
      containers:
        - name: example-container
          image: example-image
          command: ["echo", "Hello, Kubernetes!"]
      restartPolicy: Never

在上述示例中,Job 名称为 example-job,使用了一个名为 example-container 的容器,它运行了一个名为 echo 的命令和参数 Hello, Kubernetes!。该容器将从名为 example-image 的镜像中获取。

Job pod 自动清理

在 Kubernetes 中,Job 控制器可以自动清理已完成的 Pod。

默认情况下,Job 控制器会在 Pod 成功完成任务并退出后自动删除 Pod。

如果 Pod 失败,则控制器将根据重试限制进行重试,并在达到最大限制后删除 Pod。

暂停和重启 Job

Job 对象支持暂停和继续操作。通过修改 Job Spec 中的 .spec.suspend 字段可以实现暂停 Job,例如:

apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  suspend: true
  template:
    spec:
      containers:
        - name: example-container
          image: example-image
          command: ["echo", "Hello, Kubernetes!"]
      restartPolicy: Never

在上述示例中,将 .spec.suspend 设为 true 可以暂停 Job 执行。用户可以在需要时再次将其设置为 false,恢复 Job 的执行。

另外,用户也可以通过 kubectl 命令行工具来手动暂停和恢复 Job 的执行。例如,要暂停一个名为 example-job 的 Job,可以运行以下命令:

$ kubectl rollout pause job/example-job

注意:在暂停 Job 后,Job 将不会启动新的 Pod 或继续未完成的任务。

案例讲解

为了更好地理解 Kubernetes Job 资源对象,我们将通过一个实际案例来演示其用法。

假设有一个应用程序需要从数据库中导出一定数量的数据,并将其转换为 CSV 文件。由于该操作比较耗时,因此需要使用 Job 对象来执行此任务。

首先,我们需要定义一个 Job Spec,包括容器镜像、命令及其参数等信息。以下是一个示例 Job Spec:

apiVersion: batch/v1
kind: Job
metadata:
  name: export-data-job
spec:
  template:
    spec:
      containers:
        - name: export-data-container
          image: database-exporter:v1.0
          command: ["./export.sh"]
          args: ["--count=1000", "--output=exported_data.csv"]
      restartPolicy: Never

在上述示例中,我们定义了一个名为 export-data-job 的 Job,使用了一个名为 export-data-container 的容器。

该容器基于镜像 database-exporter:v1.0,并运行了一个名为 export.sh 的脚本文件。该脚本将按照参数 --count 指定的数量从数据库中导出数据,并将其存储为参数 --output 指定的 CSV 文件。

接下来,我们可以使用 kubectl apply 命令提交该 Job Spec,例如:

$ kubectl apply -f export-data-job.yaml

Kubernetes 将根据该 Spec 创建一个 Job 对象,并启动一个或多个 Pod 执行任务。Job 控制器将监视这些 Pod 的状态,并在所有 Pod 成功完成操作后停止它们。

使用 Job 的注意事项

在使用 Kubernetes Job 时,需要注意以下几点:

  • Job 对象适用于一次性任务或批处理作业,不适用于长时间运行的服务。
  • 需要确保 Job Spec 中定义的容器可以正常运行,并有足够的资源和权限执行指定的操作。
  • 在设计 Job 时,应考虑 Pod 失败和重试的情况,并设置合适的重试次数和间隔时间。
  • 如果 Job 执行时间过长,需要设置合适的 Pod 生命周期以避免过度消耗资源。
  • 在使用 Job 控制器时,应确保控制器的版本和 Kubernetes 版本兼容。在不同版本之间可能存在语法变更和行为差异。

总结

本文介绍了 Kubernetes 中的 Job 资源对象及其相关概念,包括 Job 类型、Job 控制器、Job Spec 格式、Job pod 自动清理、暂停和重启等内容。

通过一个实际案例,我们演示了如何使用 Job 对象执行一次性任务或批处理作业。最后,我们列举了使用 Job 对象时需要注意的事项。

更多关于k8s Job 执行一次性批处理的资料请关注我们其它相关文章!

(0)

相关推荐

  • kubeadm init快速搭建k8s源码解析

    目录 引言 下面的代码就都是为 init 命令绑定和添加一些标志 以方法 AddInitConfigFlags 为例 kubeadm init --help 指令 引言 我们都知道,从头搭建k8s集群是个非常棘手的事情,所以在更多的情况下大家通常会选择通过 kubeadm 工具来搭建 k8s 集群.当我们执行 kubeadm init 命令后就可以进行 k8s 的快速搭建 根据k8s的官方文档以及源码,我们可以对整个 init 命令的工作原理做个了解,官方文档地址:kubernetes.io/z

  • K8S Operator部署及自定义详解

    目录 Kubernetes Operator是什么 分析之前部署过的Prometheus Operator 关于开发自定义的Operator Kubernetes Operator是什么 K8S Operator这个东西不好解释,这么说吧,比如有一个应用程序,并且想要将其部署到 k8s 上,并且希望能够实现自动化运维和可扩展性,那么就可以考虑使用 K8S Operator 的框架,将应用程序的管理逻辑抽象为 k8s 资源,并编写自定义 Operator 来管理和运维该应用程序. 还是有点懵?我举

  • K8S prometheus operator监控工作原理介绍

    目录 1. Prometheus Operator介绍 2. 它如何工作 3. ServiceMonitor 4. helm安装 5. yaml文件安装 5.1 安装 5.2 访问服务 5.3 接入grafana 6. 监控集群外的服务 6.1 exporter安装 6.2 K8S配置 1)官方格式 2) 创建资源 6.3 接入grafana 7 监控集群外的服务-redis 7.1 exporter安装 7.2 K8S配置 7.3 Prometheus检查 7.4 接入grafana 8. 监

  • k8s Service 实现服务发现和负载均衡

    目录 前言 Service 介绍 Service 的四种类型及使用方式 Service 的定义和使用 通过命令创建服务 查看创建的服务情况 不指定 Selectors 的服务 Headless 服务 Service 工作原理及原理图 Ingress 讲解 集群外部如何访问服务 总结 前言 本文将介绍 Kubernetes 的资源对象 Service,内容包括 Service 介绍.Service 的四种类型及使用方式.不指定 Selectors 的服务.Headless 服务.Service 工

  • k8s Ingress实现流量路由规则控制的定义格式类型

    目录 前言 什么是 Ingress Ingress 的定义格式 Ingress 的类型有哪几种? 1. Simple fanout 2. Name-based virtual hosting 3. Path-based routing 该如何实现更新 Ingress Ingress Controller Ingress Class 总结 前言 在 Kubernetes 中,Ingress 是一个非常重要的概念.它可以将外部流量路由到 Kubernetes 集群内的不同服务. Ingress 可以

  • 带你学会k8s 更高级的对象Deployment

    目录 Deployment 引入 Deployment & RC 对比 Deployment 创建 Deployment 滚动升级 Deployment 回滚 Deployment 扩容 总结 Deployment 引入 前面我们学习了 RC 和 RS 两种资源对象,它们的功能基本上是差不多的,唯一的区别就是 RS 支持集合的 selector. 另外,前面我们也了解了如何用 RC/RS 资源对象来控制 Pod 副本的数量,如何实现了滚动升级 Pod 的功能.现在回过头来看,似乎这些操作都比较完

  • 批处理重命名系列案例代码

    批处理用于文本/文件的操作确实非常简单有力!不用多么复杂的代码,仅一个记事本加上简洁的代码即可搞定大部分文本/文件的操作,下面记录下我用过的一些代码,基本都是我在百度回答知友的一些代码,既给涧客们参考,也让起到备忘的作用.... 案例一. 想把一个文件夹里的全部文件都命名成001,002--这样按顺序,什么顺序无所谓,只要名字都变了就行,谁帮忙写个 我给出的代码: @echo off setlocal enabledelayedexpansion set var=1000 for /r "%~d

  • 深入分析C++中执行多个exe文件方法的批处理代码介绍

    不同目录下的多个二进制执行文件的批处理代码 @echo offpushd "G:\apache-activemq-5.5.0-bin\apache-activemq-5.5.0\bin\"start /min ""   G:\apache-activemq-5.5.0-bin\apache-activemq-5.5.0\bin\activemq.batpopd ping 127.0.0.1  -n 5 pushd "G:\backup2011-10-31\

  • 常用批处理内部命令使用详解

    批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程. 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到非常BAT!" pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行, 他就会在屏幕上显示以下二行话: 欢迎来到非常BAT! 请按任意键继续. .

  • DOS批处理高级教程 第一章 批处理基础

    第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程. 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到非常BAT!" pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行,他就会在屏幕上显示以下二行话: 复制代码 代

  • 批处理中常用命令介绍(Echo、rem、goto、call、pause、if、for)

    一.echo命令 (echo图文版) 1. Echo :显示当前ECHO的状态:ECHO ON 或者ECHO OFF .2. ECHO ON :ECHO状态设为ON,将显示命令行(如每行前的C:\>等类似标志).3. ECHO OFF:CHO状态设为OFF,将不显示命令行(如每行前的C:\>等类似标志) .4. ECHO 字符串 :将输入的字符串显示在CMD屏幕上.5. ECHO 字符串 &ECHO 字符串 - :&,类似and的意思,逻辑运算,用来显示多行数据.6. ECHO

  • 经过整理的一些dos/bat批处理教程

    该教程一共分为4大部分,第一部分是批处理的专用命令,第二部分是特殊的符号与批处理,第三部分是批处理与变量,第四部分是完整案例.因为教程比较长,所有在杂志上我们将分为两次连载,本期首先刊登一.二两部分,敬请读者注意. 第一部分:批处理的专用命令 批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT.这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令. 1.    REM REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示

  • 批处理学习教程

    第一部分:批处理的专用命令 批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT.这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令. 1. REM REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行.例: REM 你现在看到的就是注解,这一句将不会被执行.在以后的例子中解释的内容都REM 会放在REM后面.请大家注意. 2. ECHO ECHO 是一个回显命令主要参数有OFF和 ON,一般用ECHO messa

  • 精通批处理教程 批处理从入门到精通

    最近好多猜测弱口令的病毒在网上流行,比如前段时间闹得很厉害的Worm.Dvldr 蠕虫就是一个典型.这些病毒有个共同点就是利用批处理来进行ipc$连接,从而来猜测管理员的口令达到控制服务器的目的.病毒由几个文件和几个复杂的批处理组成.批处理算不上真正意义上的编程,但是它的一些思想和编程比较近似.通过在网上和一些初学的朋友交流,发现他们对于批处理很感兴趣,多多少少了解一些命令的用法,但缺乏比较系统的了解,所以特意写下这篇教程,好让感兴趣的朋友对批处理有个整体的认识,并能通过该教程举一反三,写出自己

  • 分享一下SQL Server执行动态SQL的正确方式

    SQL Server执行动态SQL的话,应该如何实现呢?下面就为您介绍SQL Server执行动态SQL两种正确方式,希望可以让您对SQL Server执行动态SQL有更深的了解 动态SQL:code that is executed dynamically.它一般是根据用户输入或外部条件动态组合的SQL语句块.动态SQL能灵活的发挥SQL强大的功能.方便的解决一些其它方法难以解决的问题.相信使用过动态SQL的人都能体会到它带来的便利,然而动态SQL有时候在执行性能(效率)上面不如静态SQL,而

  • BAT 批处理脚本教程(详细篇脚本之家补充)

    第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程. 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到我们!" pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行, 他就会在屏幕上显示以下二行话

随机推荐