kubernetes 配置示例 - Job & CronJob

1. Job 定义示例

    此例只是运行一个已经安装了 bc 的 Ubuntu 系统,去计算圆周率的值,精确到 1000 位小数

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  parallelism: 2
  completions: 4
  template:
    spec:
      containers:
      - name: pi
        image: resouer/ubuntu-bc
        command: ["sh", "-c", "echo 'scale=1000; 4*a(1)' | bc -l "]
      restartPolicy: Never
# job 的重试次数  
  backoffLimit: 4
# 设置最长运行时间(单位:秒),一旦超过这个时间,这个 Job 的所有 Pod 都会被中止
  activeDeadlineSeconds: 100

注: Job 的 restartPolicy 只允许设置为 Never 和 OnFailure。否则会不停地重启,不停地重新计算。 

在 Job 对象中,负责并行控制的参数有两个:

1. spec.parallelism,它定义的是一个 Job 在任意时间最多可以启动多少个 Pod 同时运行;
2. spec.completions,它定义的是 Job 至少要完成的 Pod 数目,即 Job 的最小完成数。

上面示例表示的意思是:同时最多有 2 个 Pod 运行任务,某个 Pod 运行完成后,会自动再启动一个 Pod,直到有 4 个 Pod 完成此任务。

2. CronJob 定义示例

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

定时任务的特殊性,很可能某个 Job 还没有执行完,另外一个新 Job 就产生了。这时候,你可以通过 spec.concurrencyPolicy 字段来定义具体的处理策略。比如:
1. concurrencyPolicy=Allow,这也是默认情况,这意味着这些 Job 可以同时存在;
2. concurrencyPolicy=Forbid,这意味着不会创建新的 Pod,该创建周期被跳过;
3. concurrencyPolicy=Replace,这意味着新产生的 Job 会替换旧的、没有执行完的 Job。


而如果某一次 Job 创建失败,这次创建就会被标记为“miss”。当在指定的时间窗口内,miss 的数目达到 100 时,那么 CronJob 会停止再创建这个 Job。这个时间窗口,可以由 spec.startingDeadlineSeconds 字段指定。比如 startingDeadlineSeconds=200,意味着在过去 200 s 里,如果 miss 的数目达到了 100 次,那么这个 Job 就不会被创建执行了。


posted @ 2021-07-24 20:09  一剑侵心  阅读(251)  评论(0编辑  收藏  举报