k8s概念-Job和CronJob

回到目录

Job

  • 对于非耐久性任务,比如压缩文件,任务完成后,pod需要结束运行,不需要pod继续保持在系统中,这个时候就要用到Job。

  • Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束

yaml文件

多次执行任务

一个执行10次,并发为1的job任务,在容器中输出hello

Groovy 复制代码
apiVersion: batch/v1  #版本
kind: Job  #类型
metadata:
  name: busybox-job  #名称
spec:
  completions: 10                                               # 执行job的次数
  parallelism: 1                                                # 执行job的并发数
  template:
    metadata:
      name: busybox-job-pod #pod名
    spec:
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["echo", "hello"]
      restartPolicy: Never  #重启策略
一次性任务

不指定completions即默认为1,是一次性任务

改任务将执行sh命令,将mysql的host,数据库名和密码写入容器卷中

Groovy 复制代码
apiVersion: batch/v1  #版本
kind: Job  #类型
metadata:
  name: mysql-dump
spec:
  template:
    metadata:
      name: mysql-dump
    spec:
      nodeName: k8s-master2  #部署到指定节点
      containers:
      - name: mysql-dump
        image: mysql:5.7
        command: ["/bin/sh","-c","mysqldump --host=mysql-test -uroot -pabc123 --databases mysql > /root/mysql2022.sql"]
        volumeMounts:
        - mountPath: "/root"
          name: mysql-data
      restartPolicy: Never
      volumes:
      - name: mysql-data
        hostPath:
          path: /opt/mysqldump

CronJob

在 k8s 中周期性运行计划任务,与 linux 中的 crontab 相同

注意点:CronJob 执行的时间是 controller-manager 的时间,所以一定要确保 controller-manager 时间是准确的

cron表达式

格式
Groovy 复制代码
 ┌───────────── 分钟 (0 - 59)
 │ ┌───────────── 小时 (0 - 23)
 │ │ ┌───────────── 月的某天 (1 - 31)
 │ │ │ ┌───────────── 月份 (1 - 12)
 │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
 │ │ │ │ │                          或者是 sun,mon,tue,web,thu,fri,sat
 │ │ │ │ │
 │ │ │ │ │
 * * * * *

*代表全部

?代表不使用该位置

/后紧跟代表每隔多久

-代表前后期间

# 代表第几个

常见cron
bash 复制代码
0 0 0 * * ?:每天的零点整执行任务。

0 0 */2 * * ?:每隔2小时执行一次任务。

0 0 12 * * ?:每天中午12点执行任务。

0 15 10 * * ?:每天上午10点15分执行任务。

0 0 6,18 * * ?:每天的早上6点和晚上6点执行任务。

0 0/30 8-18 * * ?:每天的上午8点到下午6点之间,每隔30分钟执行一次任务。

0 0 0 1 1 ?:每年的1月1日零点整执行任务。

0 0 0 * * 2:每周的星期二零点整执行任务。

0 0 0 ? * 6#3:每月的第三个星期六零点整执行任务。

0 0 0 L * ?:每个月的最后一天零点整执行任务。

ymal文件

Groovy 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  concurrencyPolicy: Allow # 并发调度策略:Allow 允许并发调度,Forbid:不允许并发执行,Replace:如果之前的任务还没执行完,就直接执行新的,放弃上一个任务
  failedJobsHistoryLimit: 1 # 保留多少个失败的任务
  successfulJobHistoryLimit: 3 # 保留多少个成功的任务
  suspend: false # 是否挂起任务,若为 true 则该任务不会执行
#  startingDeadlineSeconds: 30 # 间隔多长时间检测失败的任务并重新执行,时间不能小于 10
  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
相关推荐
Libby博仙12 分钟前
docker 改了镜像源为阿里云,还是下载失败
阿里云·docker·容器
钗头风1 小时前
3.Docker常用命令
运维·docker·容器
ITPUB-微风2 小时前
网易严选DevOps实践:从传统到云原生的演进
运维·云原生·devops
桂月二二2 小时前
基于eBPF的全栈可观测性系统:重新定义云原生环境诊断范式
云原生
ITPUB-微风4 小时前
云原生数据抽象与弹性加速:Fluid开源系统的技术解析
云原生·开源
爬山算法4 小时前
Zookeeper(58)如何在Zookeeper中实现分布式锁?
分布式·zookeeper·云原生
圣心4 小时前
Ollama Docker 镜像部署
运维·docker·容器
Karoku0664 小时前
【CI/CD】Jenkinsfile管理+参数化构建+邮件通知以及Jenkins + SonarQube 代码审查
运维·ci/cd·容器·kubernetes·jenkins·rancher
转身後 默落4 小时前
06.Docker 镜像制作和管理
java·docker·容器
明明跟你说过6 小时前
【Kubernetes】常用命令全解析:从入门到实战(下)
运维·云原生·容器·kubernetes·k8s