zoukankan      html  css  js  c++  java
  • 007-k8s资源控制器-Job、CronJob

    一、概述

    1.1、Job

      Job负责批处理任务,即仅执行一次的任务,他保证批处理任务的一个或多个Pod成功结束

    说明

      spec.template格式同Pod

      RestartPolicy仅支持Never或OnFailure

      单个Pod时,默认Pod成功运行后Job即结束

      spec.completion标志Job结束需要成功运行的Pod个数,默认为1

      spec.parallelism标志并运行的Pod的个数,默认为1

      spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

    示例:显示pi的2000千位

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      completions: 60
      parallelism: 2
      template:
        metadata:
          name: pi
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
          restartPolicy: Never

    1.2、CronJob

    基于时间管理的Job

      在给定时间点只运行一次

      周期性地在给定时间点运行

    使用条件:kubectl集群,版本》1.8,如,发送邮件,备份数据库

    说明

      spec.template格式同Pod

      RestartPolicy仅支持Never或OnFailure

      单个Pod时,默认Pod成功运行后Job即结束

      spec.completion标志Job结束需要成功运行的Pod个数,默认为1

      spec.parallelism标志并运行的Pod的个数,默认为1

      spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

      spec.schedule:调度,必须字段,指定任务运行周期,格式cron

      spec.jodTemplate:job模板,指定要运行的任务,格式同job  

      spec.startingDeadlineSeconds :启动 Job 的期限(秒级别),该字段是可选的。

        如果因为任何原因而错过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。

        如果没有指定,则没有期限。

      spec.concurrencyPolicy:并发策略,该字段也是可选的。

        它指定了如何处理被 Cron Job 创建的 Job 的并发执行。只允许指定下面策略中的一种。

        Allow(默认):允许并发运行 Job。

        Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个。

        Replace:取消当前正在运行的 Job,用一个新的来替换。

        注意,当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个 Cron Job,它们创建的 Job 之间总是允许并发运行。

      spec.suspend :挂起,该字段也是可选的。

        如果设置为 true,后续所有执行都会被挂起。

        它对已经开始执行的 Job 不起作用。默认值为 false。

      spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit :历史限制,是可选的字段。

        它们指定了可以保留多少完成和失败的 Job。

        默认没有限制,所有成功和失败的 Job 都会被保留。

        当运行一个 Cron Job 时,Job 可以很快就堆积很多,推荐设置这两个字段的值。

        设置限制的值为 0,相关类型的 Job 完成后将不会被保留。

    示例

    apiVersion: batch/v1beta1 #batch/v2alpha1
    kind: CronJob
    metadata:
      name: clean-job
    spec:
      schedule: "*/1 * * * *"  # 分钟,小时,日,月,星期
      startingDeadlineSeconds: 300  # 300秒没有启动成功,就不再启动
      concurrencyPolicy: Forbid #Allow 允许job并发执行,Forbid只允许当前这个执行,Replace取消当前这个,而执行新的
      suspend: false # 设置为true,后续所有执行被挂起
      jobTemplate:
        spec:
    #      ttlSecondsAfterFinished: 100 # 任务完成后的10s之后自动删除pod,k8s 1.12以后才有
          backoffLimit: 4  # 最大允许失败的次数
          template:
            spec:
              restartPolicy: OnFailure
              containers:
              - name: clean-job
                image: busybox
                args: ['/bin/sh','-c','date; echo hello']

    可以通:kubectl create -f cronjob-demo.yaml创建

    查看任务:kubectl get cronjob

     kubectl get job

     日志: kubectl logs pod名称

  • 相关阅读:
    面试官:讲讲redis的过期策略如何实现?
    Java并发-CopyOnWriteArrayList
    Java并发-CopyOnWriteArrayList
    idea万能快捷键,不可不知的17个实用技巧
    Java面试题必备知识之ThreadLocal
    Java面试题必备知识之ThreadLocal
    再谈源码阅读
    再谈源码阅读
    七月伊始 LeetCode算法总结
    ta和夏天一起来了
  • 原文地址:https://www.cnblogs.com/bjlhx/p/13617475.html
Copyright © 2011-2022 走看看