K8S-Job & Cronjob

一、Job & Cronjob介绍

1、Job

Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。

一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。

你也可以使用 Job 以并行的方式运行多个 Pod。

2、Cronjob

CronJob 创建基于时隔重复调度的 Job。

CronJob 用于执行排期操作,例如备份、生成报告等。 一个 CronJob 对象就像 Unix 系统上的 crontab(cron table)文件中的一行。 它用 Cron 格式进行编写, 并周期性地在给定的调度时间执行 Job。

二、配置解读

1、Job配置

cpp 复制代码
   apiVersion: batch/v1        ## api版本
    kind: Job                    ## 资源类型
    metadata:                    ## 元数据
      name: pi                    ## 资源名称
      namespace: default        ## 命名空间
    spec:                        ## 详情
      backoffLimit: 4            ## 最大失败次数
      completions: 1            ## 要求完成的次数
      parallelism: 1            ## 并发数量
      activeDeadlineSeconds: 100        ## 最大运行时间
      ttlSecondsAfterFinished: 20        ## ttl时间
      template:                            ## Pod配置模板
        spec:                            ## 规约
          containers:                    ## 容器信息
          - name: pi                    ## 容器名称
            image: perl:5.34.0            ## 镜像
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]    ## 容器运行命令
            imagePullPolicy: IfNotPresent
          restartPolicy: Never            ## 重启策略

2、Cronjob配置

cpp 复制代码
 apiVersion: batch/v1        ## api版本
    kind: CronJob                ## 资源类型
    metadata:                    ## 元数据
      name: hello                ## 资源名称
      namespace: default        ## 命名空间
    spec:                        ## 详情
      schedule: "* * * * *"        ## 定时配置
      successfulJobsHistoryLimit: 3        ## 保留运行完成pod的历史数量
      jobTemplate:                ## job配置模板
        spec:                    ## job详细配置
          template:                ## pod配置模板
            spec:                ## pod详细配置
              containers:        ## 容器配置
              - name: hello        ## 容器名称
                image: busybox:1.28        ## 容器镜像
                imagePullPolicy: IfNotPresent        ## 镜像拉取策略
                command:                ## 镜像启动运行命令
                - /bin/sh                
                - -c
                - date; echo Hello from the Kubernetes cluster
              restartPolicy: OnFailure    ## 重启策略
              
    ###################################################################          
              imagePullSecrets:            ## 镜像下载秘钥
              - name: harbor-secret

重启策略 restartPolicy

Never:当 Pod 失败时,Job 控制器会启动一个新的 Pod

OnFailure:Pod 继续留在当前节点,但容器会被重新运行

三、演练

1、Job

1.1、创建job

cpp 复制代码
  [root@k8s-master test]# vim job-pi.yaml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
      namespace: test
    spec:
      backoffLimit: 4
      completions: 1
      parallelism: 1
      activeDeadlineSeconds: 100
      ttlSecondsAfterFinished: 20
      template:
        spec:
          containers:
          - name: pi
            image: perl:5.34.0
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
            imagePullPolicy: IfNotPresent
          restartPolicy: Never
    [root@k8s-master test]# kubectl apply -f job-pi.yaml
    job.batch/pi created

1.2、查看job pod生命周期

cpp 复制代码
    [root@k8s-master ~]# kubectl get pod  -o wide -w

1.3、查看job详细信息

cpp 复制代码
    [root@k8s-master test]# kubectl get job  -o wide

1.4、查看job运行结果

cpp 复制代码
    [root@k8s-master test]# kubectl logs -f pi-8ckcl 

2、Cronjob

2.1、创建Cronjob

cpp 复制代码
   [root@k8s-master test]# vim cronjob-hello.yaml
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: hello
      namespace: test
    spec:
      schedule: "* * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox:1.28
                imagePullPolicy: IfNotPresent
                command:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
              restartPolicy: OnFailure
    
    [root@k8s-master test]# kubectl apply -f cronjob-hello.yaml
    cronjob.batch/hello created

2.2、查看Cronjob详情

cpp 复制代码
    [root@k8s-master test]# kubectl get cj  -o wide

2.3、查看pod生命周期

cpp 复制代码
    [root@k8s-master test]# kubectl get pod 

    [root@k8s-master ~]# kubectl get pod  -o wide -w

2.4、查看运行结果

cpp 复制代码
    [root@k8s-master test]# kubectl logs -f hello-1680840900-5c72g 
    Fri Apr  7 04:15:01 UTC 2023
    Hello from the Kubernetes cluster
    [root@k8s-master test]# kubectl logs -f hello-1680840840-r2zn8 
    Fri Apr  7 04:14:01 UTC 2023
    Hello from the Kubernetes cluster
相关推荐
Flynn Liang11 分钟前
LLM 应用安全:Prompt 注入、越权与输入输出护栏
java·人工智能·大模型·langchain4j·llm 安全·prompt 注入·guardrail
特立独行的猫A6 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
无奈笑天下8 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
Rabitebla12 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
budingxiaomoli13 小时前
Spring统一功能处理
java·后端·spring
java_logo14 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
Flynn Liang14 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
xbzb15 小时前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
金銀銅鐵15 小时前
带您看懂字节码指令(三):同一行加法,为什么有四种指令
java·jvm
坤坤子吖16 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习