南瓜慢说官方网站

  • 首页
  • 文章汇总
  • 容器技术
  • SpringBoot-Cloud
  • 程序人生
  • 其它
  • 整理
  • 关于

  • 搜索
中间件 config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac 计划 Stream MongoDB Spring DevOps JVM String Map Set List 性能 Email Springboot 集合类 ArrayList Java
技术之前,先读诗书:

Kubernetes的Jobs和CronJobs的使用

发表于 2020-08-27 | 分类于 容器技术 | 0 | 阅读次数 229

1 前言

有时项目需要启动仅执行一次的任务,而不是像Web应用一样长期运行。Kubernetes Jobs负责处理任务,保证任务的成功执行,能定义执行次数和并行数等。而CronJobs则加上时间调度,可定时执行。

2 Jobs

2.1 简单示例

直接上示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: pkslow-job
spec:
  template:
    spec:
      containers:
        - name: busybox
          image: busybox
          command: ['echo', 'www.pkslow.com']
      restartPolicy: Never

上面的功能是打印一行字符串。restartPolicy可以设置为OnFailure或Never,不能设置为Always:

The Job "pkslow-job" is invalid: spec.template.spec.restartPolicy: Unsupported value: "Always": supported values: "OnFailure", "Never"

执行如下:

$ kubectl apply -f job.yaml 
job.batch/pkslow-job created

$ kubectl get job
NAME         COMPLETIONS   DURATION   AGE
pkslow-job   0/1           8s         8s

2.2 设置其它参数

参数spec.completions表示所需要的完成个数,只有完成这么多个才能算整个Job完成。

参数spec.parallelism表示几个Pod并行执行。

添加这两个参数如下:

apiVersion: batch/v1
kind: Job
metadata:
  name: pkslow-job
spec:
  template:
    spec:
      containers:
        - name: busybox
          image: busybox
          command: ['echo', 'www.pkslow.com']
      restartPolicy: Never
  completions: 6
  parallelism: 2

直接更新是不行的,对于同一个Job,这是不可变参数:

$ kubectl apply -f job.yaml 
The Job "pkslow-job" is invalid: spec.completions: Invalid value: 2: field is immutable

先删掉再执行就可以了。

$ kubectl delete -f job.yaml 
job.batch "pkslow-job" deleted

$ kubectl apply -f job.yaml 
job.batch/pkslow-job created

可以看到,会有两个Pod同时运行,最终如果6个都完成,才表示整个Job完成。

更多参数请参考文档:Kubernetes Job

3 CronJobs

定时的CronJobs就是在Jobs的基础加上Cron 表达式,示例如下:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: pkslow-cronjob
spec:
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: busybox
              image: busybox
              command: ['echo', 'www.pkslow.com']
          restartPolicy: Never
  schedule: "*/1 * * * *"
  successfulJobsHistoryLimit: 10
  failedJobsHistoryLimit: 5

schedule是Cron 表达式;

successfulJobsHistoryLimit和failedJobsHistoryLimit设置记录成功或失败任务的个数。

这个会每分钟执行一次,如下:

更多请参考官方文档:https://kubernetes.io/zh/docs/concepts/workloads/controllers/cron-jobs/

4 总结

本文主要是简单介绍,提供个yaml模板。


参考资料:

详解 Kubernetes Job 和 CronJob 的实现原理

Kubernetes: Job 和 CronJob 的实现原理


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

file

推荐阅读:
如何制定切实可行的计划并好好执行
容器技术(Docker-Kubernetes)
SpringBoot-Cloud相关
Https专题

  • 本文作者: 南瓜慢说
  • 本文链接: https://www.pkslow.com/archives/kubernetes-jobs-cronjobs
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# 中间件 # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # 计划 # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # 性能 # Email # Springboot # 集合类 # ArrayList # Java
中间件 config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac 计划 Stream MongoDB Spring DevOps JVM String Map Set List 性能 Email Springboot 集合类 ArrayList Java
Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置
IntelliJ IDEA远程Debug Linux的Java程序,找问题不要只会看日志了
  • 文章目录
  • 站点概览
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

多读书,多分享;多写作,多整理。

160 日志
7 分类
27 标签
RSS
0%
© 2020 — 2021 南瓜慢说 本站已挣扎运行:   粤ICP备20036375号