k8s资源之job&cronjob

欢迎关注我的公众号:

目前刚开始写一个月,一共写了18篇原创文章,文章目录如下:

istio多集群探秘,部署了50次多集群后我得出的结论

istio多集群链路追踪,附实操视频

istio防故障利器,你知道几个,istio新手不要读,太难!

istio业务权限控制,原来可以这么玩

istio实现非侵入压缩,微服务之间如何实现压缩

不懂envoyfilter也敢说精通istio系列-http-rbac-不要只会用AuthorizationPolicy配置权限

不懂envoyfilter也敢说精通istio系列-02-http-corsFilter-不要只会vs

不懂envoyfilter也敢说精通istio系列-03-http-csrf filter-再也不用再代码里写csrf逻辑了

不懂envoyfilter也敢说精通istio系列http-jwt_authn-不要只会RequestAuthorization

不懂envoyfilter也敢说精通istio系列-05-fault-filter-故障注入不止是vs

不懂envoyfilter也敢说精通istio系列-06-http-match-配置路由不只是vs

不懂envoyfilter也敢说精通istio系列-07-负载均衡配置不止是dr

不懂envoyfilter也敢说精通istio系列-08-连接池和断路器

不懂envoyfilter也敢说精通istio系列-09-http-route filter

不懂envoyfilter也敢说精通istio系列-network filter-redis proxy

不懂envoyfilter也敢说精通istio系列-network filter-HttpConnectionManager

不懂envoyfilter也敢说精通istio系列-ratelimit-istio ratelimit完全手册

————————————————

job:

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

Job 分类:

RestartPolicy:

Never

OnFailure

如果 RestartPolicy 指定 Never ,则 job 会在 pod 出现故障时创建新的 pod ,且故障 pod 不会消失。 . status.failed 1

如果 RestartPolicy 指定 OnFailure ,则 job 会在 pod 出现故障时其内部重启容器,而不是创建 pod . status.failed 不变

[root@master01 job]# cat busybox-never-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   template:
      spec:
         restartPolicy: Never
         containers:
         - name: job
           image: busybox
           command: ["echooo","Hello World"]
[root@master01 job]# cat busybox-onfailure-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command: ["echooo","Hello World"]

completions:

[root@master01 job]# cat busybox-completions-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   completions: 2
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command:
           - "sh"
           args:
           - "-c"
           - "sleep 30 && echo helloword"

parallelism:

[root@master01 job]# cat busybox-parallelism-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   parallelism: 2
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command:
           - "sh"
           args:
           - "-c"
           - "sleep 30 && echo helloword"
[root@master01 job]# cat busybox-completions-parallelism-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   parallelism: 2
   completions: 2
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command:
           - "sh"
           args:
           - "-c"
           - "sleep 30 && echo helloword"

activeDeadlineSeconds:

[root@master01 job]# cat busybox-activeDeadlineSeconds.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   activeDeadlineSeconds: 20
   completions: 2
   template:
      spec:
         restartPolicy: OnFailure
         containers:
         - name: job
           image: busybox
           command:
           - "sh"
           args:
           - "-c"
           - "sleep 30 && echo helloword"

ttlSecondsAfterFinished:

This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.

1.12 版本之后, k8s 提出了 通过 TTL 自动删除 Job 的特性 ,当前仅对 job 生效,对 Complete Failed 状态的 Job 都会自动删除

manualSelector:

使用 batch/v1 时,用户需要将 jod spec.manualSelector 设置为 true ,才可以定制 selector 。默认为 false

[root@master01 job]# cat busybox-selector.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   manualSelector: true
   selector:
     matchLabels:
       app: busybox
   template:
      metadata:
        labels:
          app: busybox
      spec:
         restartPolicy: Never
         containers:
         - name: job
           image: busybox
           command: ["echo","Hello World"]

backoffLimit:

. spec.backoffLimit 用于设置 Job 的容错次数,默认值为 6 。当 Job 运行的 Pod 失败次数到达 . spec.backoffLimit 次时, Job Controller 不再新建 Pod ,直接停止运行这个 Job ,将其运行结果标记为 Failure 。另外, Pod 运行失败后再次运行的时间间隔呈递增状态,例如 10s 20s 40s

[root@master01 job]# cat busybox-backoffLimit.yaml 
apiVersion: batch/v1
kind: Job
metadata:
   name: job
spec:
   backoffLimit: 1
   template:
      spec:
         restartPolicy: Never
         containers:
         - name: job
           image: busybox
           command: ["echooo","Hello World"]

命令:

kubectl create job my-job --image= busybox – date

kubectl create job my-job -- image= busybox

kubectl create job test-job --from= cronjob /a- cronjob

CronJob:

CronJob 即定时任务,就类似于 Linux 系统的 crontab ,在指定的时间周期运行指定的任务。

schedule:

[root@master01 cronjob]# cat schedule-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

backoffLimit:

[root@master01 cronjob]# cat backoffLimit-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         backoffLimit: 1
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echooo","hello"]
                 imagePullPolicy: IfNotPresent

suspend:

. spec.suspend 字段也是可选的。如果设置为 true ,后续所有执行都将被挂起。它对已经开始执行的 Job 不起作用。默认值为 false

kubectl patch cronjob cronjob1 -p '{"spec":{" suspend":false }}'

[root@master01 cronjob]# cat suspend-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "*/1 * * * *"
   suspend: true
   jobTemplate:
      metadata:
         name: job
      spec:
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

completions:

[root@master01 cronjob]# cat completion-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 2
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

[root@master01 cronjob]# cat parallelism-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 2
         parallelism: 2
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

concurrencyPolicy:

spec.concurrencyPolicy 字段也是可选的。它指定了如何处理被 Cron Job 创建的 Job 的并发执行。只允许指定下面策略中的一种:

Allow (默认):允许并发运行 Job
Forbid :禁止并发 运行 , 等待前一个执行完毕
Replace :取消当前正在运行的 Job ,用一个新的来替换

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

[root@master01 cronjob]# cat concurrencyPolicy-allow-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   concurrencyPolicy: Allow
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 2
         parallelism: 2
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent
[root@master01 cronjob]# cat concurrencyPolicy-forbid-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   concurrencyPolicy: Forbid
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 2
         parallelism: 2
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command:
                 - "sh"
                 args:
                 - "-c"
                 - "sleep 70"
                 imagePullPolicy: IfNotPresent
[root@master01 cronjob]# cat concurrencyPolicy-replace-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   concurrencyPolicy: Replace
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 2
         parallelism: 2
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command:
                 - "sh"
                 args:
                 - "-c"
                 - "sleep 70"
                 imagePullPolicy: IfNotPresent

startingDeadlineSeconds:

. spec.startingDeadlineSeconds 字段是可选的。它表示启动 Job 的期限(秒级别),如果因为任何原因而错过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。如果没有指定,则没有期限

activeDeadlineSeconds:

[root@master01 cronjob]# cat activeDeadlineSeconds-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         activeDeadlineSeconds: 10
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command:
                 - "sh"
                 args:
                 - "-c"
                 - "sleep 30"
                 imagePullPolicy: IfNotPresent

failedJobsHistoryLimit:successfulJobsHistoryLimit

. spec.successfulJobsHistoryLimit . spec.failedJobsHistoryLimit 这两个字段是可选的。它们指定了可以保留完成和失败 Job 数量的限制

[root@master01 cronjob]# cat failedJobsHistoryLimit-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   failedJobsHistoryLimit: 2
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 1
         backoffLimit: 0
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echoioo","hello"]
                 imagePullPolicy: IfNotPresent
[root@master01 cronjob]# cat successfulJobsHistoryLimit-cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
   name: cronjob1
spec:
   successfulJobsHistoryLimit: 1
   schedule: "*/1 * * * *"
   jobTemplate:
      metadata:
         name: job
      spec:
         completions: 2
         template:
            metadata:
               name: pod
            spec:
               restartPolicy: OnFailure
               containers:
               - name: busybox
                 image: busybox
                 command: ["echo","hello"]
                 imagePullPolicy: IfNotPresent

命令:

kubectl create cronjob my-job -- image= busybox
kubectl create cronjob my-job --image= busybox – date
kubectl create cronjob test-job --image= busybox --schedule="*/1 * * * *"


版权声明:本文为hxpjava1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。