当前位置:   article > 正文

K8s ❉ Job 与 CronJob控制器详解_cronjob控制器 模板 属性 说明

cronjob控制器 模板 属性 说明

一 Job

1 介绍

Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。Job特点如下:

  • 当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量
  • 当成功结束的pod达到指定的数量时,Job将完成执行

 

 2 资源清单

  1. apiVersion: batch/v1 # 版本号
  2. kind: Job # 类型
  3. metadata: # 元数据
  4. name: # rs名称
  5. namespace: # 所属命名空间
  6. labels: #标签
  7. controller: job
  8. spec: # 详情描述
  9. completions: 1 # 指定job需要成功运⾏Pods的次数。默认值: 1
  10. parallelism: 1 # 指定job在任⼀时刻应该并发运⾏Pods的数量。默认值: 1
  11. activeDeadlineSeconds: 30 # 指定job可运⾏的时间期限,超过时间还未结束,系统将会尝试进⾏终⽌。
  12. backoffLimit: 6 # 指定job失败后进⾏重试的次数。默认是6
  13. manualSelector: true # 是否可以使⽤selector选择器选择pod,默认是false
  14. selector: # 选择器,通过它指定该控制器管理哪些pod
  15. matchLabels: # Labels匹配规则
  16. app: counter-pod
  17. matchExpressions: # Expressions匹配规则
  18. - {key: app, operator: In, values: [counter-pod]}
  19. template: # 模板,当副本数量不⾜时,会根据下⾯的模板创建pod副本
  20. metadata:
  21. labels:
  22. app: counter-pod
  23. spec:
  24. restartPolicy: Never # 重启策略只能设置为Never或者OnFailure
  25. containers:
  26. - name: counter
  27. image: busybox:1.30
  28. command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"]

关于重启策略设置的说明:

  •  如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变
  •  如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启,failed次数加1
  •  如果指定为Always的话,就意味着一直重启,意味着job任务会重复去执行了,当然不对,所以不能设置为Always

 3 演示

  1. # 创建pc-job.yaml,内容如下:
  2. apiVersion: batch/v1
  3. kind: Job
  4. metadata:
  5. name: pc-job
  6. namespace: dev
  7. spec:
  8. manualSelector: true
  9. selector:
  10. matchLabels:
  11. app: counter-pod
  12. template:
  13. metadata:
  14. labels:
  15. app: counter-pod
  16. spec:
  17. restartPolicy: Never
  18. containers:
  19. - name: counter
  20. image: busybox:1.30
  21. command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"]
  22. # 创建job
  23. [root@k8s-master01 ~]# kubectl create -f pc-job.yaml
  24. job.batch/pc-job created
  25. # 查看job
  26. [root@k8s-master01 ~]# kubectl get job -n dev -o wide -w
  27. NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
  28. pc-job 0/1 21s 21s counter busybox:1.30 app=counter-pod
  29. pc-job 1/1 31s 79s counter busybox:1.30 app=counter-pod
  30. # 通过观察pod状态可以看到,pod在运⾏完毕任务后,就会变成Completed状态
  31. [root@k8s-master01 ~]# kubectl get pods -n dev -w
  32. NAME READY STATUS RESTARTS AGE
  33. pc-job-rxg96 1/1 Running 0 29s
  34. pc-job-rxg96 0/1 Completed 0 33s
  35. # 接下来,调整下pod运⾏的总数量和并⾏数量 即:在spec下设置下⾯两个选项
  36. # completions: 6 # 指定job需要成功运⾏Pods的次数为6
  37. # parallelism: 3 # 指定job并发运⾏Pods的数量为3
  38. # 然后重新运⾏job,观察效果,此时会发现,job会每次运⾏3个pod,总共执⾏了6个pod
  39. [root@k8s-master01 ~]# kubectl get pods -n dev -w
  40. NAME READY STATUS RESTARTS AGE
  41. pc-job-684ft 1/1 Running 0 5s
  42. pc-job-jhj49 1/1 Running 0 5s
  43. pc-job-pfcvh 1/1 Running 0 5s
  44. pc-job-684ft 0/1 Completed 0 11s
  45. pc-job-v7rhr 0/1 Pending 0 0s
  46. pc-job-v7rhr 0/1 Pending 0 0s
  47. pc-job-v7rhr 0/1 ContainerCreating 0 0s
  48. pc-job-jhj49 0/1 Completed 0 11s
  49. pc-job-fhwf7 0/1 Pending 0 0s
  50. pc-job-fhwf7 0/1 Pending 0 0s
  51. pc-job-pfcvh 0/1 Completed 0 11s
  52. pc-job-5vg2j 0/1 Pending 0 0s
  53. pc-job-fhwf7 0/1 ContainerCreating 0 0s
  54. pc-job-5vg2j 0/1 Pending 0 0s
  55. pc-job-5vg2j 0/1 ContainerCreating 0 0s
  56. pc-job-fhwf7 1/1 Running 0 2s
  57. pc-job-v7rhr 1/1 Running 0 2s
  58. pc-job-5vg2j 1/1 Running 0 3s
  59. pc-job-fhwf7 0/1 Completed 0 12s
  60. pc-job-v7rhr 0/1 Completed 0 12s
  61. pc-job-5vg2j 0/1 Completed 0 12s
  62. # 删除job
  63. [root@k8s-master01 ~]# kubectl delete -f pc-job.yaml
  64. job.batch "pc-job" deleted

二 CronJob

1 介绍

        CronJob控制器以Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务。

 2 资源清单

  1. apiVersion: batch/v1beta1 # 版本号
  2. kind: CronJob # 类型
  3. metadata: # 元数据
  4. name: # rs名称
  5. namespace: # 所属命名空间
  6. labels: #标签
  7. controller: cronjob
  8. spec: # 详情描述
  9. schedule: # cron格式的作业调度运⾏时间点,⽤于控制任务在什么时间执⾏
  10. concurrencyPolicy: # 并发执⾏策略,⽤于定义前⼀次作业运⾏尚未完成时是否以及如何运⾏后⼀次的作业
  11. failedJobHistoryLimit: # 为失败的任务执⾏保留的历史记录数,默认为1
  12. successfulJobHistoryLimit: # 为成功的任务执⾏保留的历史记录数,默认为3
  13. startingDeadlineSeconds: # 启动作业错误的超时时⻓
  14. jobTemplate: # job控制器模板,⽤于为cronjob控制器⽣成job对象;下⾯其实就是job的定义
  15. metadata:
  16. spec:
  17. completions: 1
  18. parallelism: 1
  19. activeDeadlineSeconds: 30
  20. backoffLimit: 6
  21. manualSelector: true
  22. selector:
  23. matchLabels:
  24. app: counter-pod
  25. matchExpressions: 规则
  26. - {key: app, operator: In, values: [counter-pod]}
  27. template:
  28. metadata:
  29. labels:
  30. app: counter-pod
  31. spec:
  32. restartPolicy: Never
  33. containers:
  34. - name: counter
  35. image: busybox:1.30
  36. command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 20;done"]
  37. #需要重点解释的⼏个选项:
  38. schedule: cron表达式,⽤于指定任务的执⾏时间
  39. */1 * * * *
  40. <分钟> <⼩时> <> <⽉份> <星期>
  41. 分钟 值从 059.
  42. ⼩时 值从 023.
  43. ⽇ 值从 131.
  44. ⽉ 值从 112.
  45. 星期 值从 06, 0 代表星期⽇
  46. 多个时间可以⽤逗号隔开; 范围可以⽤连字符给出;*可以作为通配符; /表示每...
  47. concurrencyPolicy:
  48. Allow: 允许Jobs并发运⾏(默认)
  49. Forbid: 禁⽌并发运⾏,如果上⼀次运⾏尚未完成,则跳过下⼀次运⾏
  50. Replace: 替换,取消当前正在运⾏的作业并⽤新作业替换它

3 演示

  1. # 创建pc-cronjob.yaml,内容如下
  2. apiVersion: batch/v1beta1
  3. kind: CronJob
  4. metadata:
  5. name: pc-cronjob
  6. namespace: dev
  7. labels:
  8. controller: cronjob
  9. spec:
  10. schedule: "*/1 * * * *"
  11. jobTemplate:
  12. metadata:
  13. spec:
  14. template:
  15. spec:
  16. restartPolicy: Never
  17. containers:
  18. - name: counter
  19. image: busybox:1.30
  20. command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done"]
  21. # 创建cronjob
  22. [root@k8s-master01 ~]# kubectl create -f pc-cronjob.yaml
  23. cronjob.batch/pc-cronjob created
  24. # 查看cronjob
  25. [root@k8s-master01 ~]# kubectl get cronjobs -n dev
  26. NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
  27. pc-cronjob */1 * * * * False 0 <none> 6s
  28. # 查看job
  29. [root@k8s-master01 ~]# kubectl get jobs -n dev
  30. NAME COMPLETIONS DURATION AGE
  31. pc-cronjob-1592587800 1/1 28s 3m26s
  32. pc-cronjob-1592587860 1/1 28s 2m26s
  33. pc-cronjob-1592587920 1/1 28s 86s
  34. # 查看pod
  35. [root@k8s-master01 ~]# kubectl get pods -n dev
  36. pc-cronjob-1592587800-x4tsm 0/1 Completed 0 2m24s
  37. pc-cronjob-1592587860-r5gv4 0/1 Completed 0 84s
  38. pc-cronjob-1592587920-9dxxq 1/1 Running 0 24s
  39. # 删除cronjob
  40. [root@k8s-master01 ~]# kubectl delete -f pc-cronjob.yaml
  41. cronjob.batch "pc-cronjob" deleted

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/563750
推荐阅读
相关标签
  

闽ICP备14008679号