【容器应用系列教程】Kubernetes的Job管理

一、Job的分类

  • job
    • 类似于一次性任务,创建Pod临时运行一次任务,任务完成后Podcomplete状态
    • 应用场景:适用于运行测试的任务
  • cronJob
    • 类似于周期性计划任务,创建Pod以周期性运行某个任务,例如数据库备份等
    • 通过和系统一样的crontab时间进行任务调度

二、Job

1.创建Job

注意:Job资源创建时,restartPolicy只支持NeverOnFailure,不支持Always避免进入死循环

[root@k8s-master opt]# vim job.yml

apiVersion: batch/v1
kind: Job
metadata:
    name: test-job
    namespace: wordpress
spec:
    template:
      metadata:
        name: test-job
      spec:
        restartPolicy: Never
        containers:
        - name: test-job
          image: centos:7
          imagePullPolicy: IfNotPresent
          command:
          - "/bin/bash"
          - "-c"
          - "for i in 1 2 3 4; do echo $i; done"
[root@k8s-master opt]# kubectl create -f job.yml 
job.batch/test-job created

查看Pod日志

循环正常执行

[root@k8s-master opt]# kubectl logs test-job-s7m2h -n wordpress
1
2
3
4

查看Pod状态

可以看到Pod处于Completed状态

[root@k8s-master opt]# kubectl get pod -n wordpress
NAME             READY   STATUS      RESTARTS   AGE
test-job-s7m2h   0/1     Completed   0          3s

三、cronJob

  • 类似于周期性计划任务,创建Pod以周期性运行某个任务,例如数据库备份等
  • 通过和系统一样的crontab时间进行任务调度

1.创建cronJob资源

[root@k8s-master opt]# cat cronjob.yml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: test-cronjob
  namespace: wordpress
spec:
  successfulJobsHistoryLimit: 3	#最多存在3个
  failedJobsHistoryLimit: 2	#最多允许创建失败2个
  schedule: "*/1 * * * *"	#每1分钟执行一次
  jobTemplate:
    spec:
      template:
        metadata:
          name: test-cronjob
        spec:
          restartPolicy: OnFailure	#重启策略为,容器异常退出的时候,触发重启
          containers:
          - name: test-cronjob
            image: centos:7
            imagePullPolicy: IfNotPresent
            command:
            - "/bin/sh"
            - "-c"
            - "for i in 9 8 7 6 5; do echo $i; done"
  • successfulJobsHistoryLimit
    • 设置最多记录执行成功的次数
    • 0表示不记录
    • 默认会记录成功的所有,避免数量过多,建议设置该值
  • failedJobsHistoryLimit
    • 设置最多记录失败的次数
    • 0表示不记录
    • 默认会记录失败的所有,避免数量过多,建议设置该值

2.查看cronJob

[root@k8s-master opt]# kubectl get cronjob -n wordpress
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
test-cronjob   */1 * * * *   False     0        53s             5m47s

3.查看Pod

[root@k8s-master opt]# kubectl get pod -n wordpress
NAME                            READY   STATUS      RESTARTS   AGE
test-cronjob-1686655500-fxngl   0/1     Completed   0          2m52s
test-cronjob-1686655560-4cq5n   0/1     Completed   0          111s
test-cronjob-1686655620-fg8kb   0/1     Completed   0          51s

[root@k8s-master opt]# kubectl logs test-cronjob-1686655560-4cq5n -n wordpress
9
8
7
6
5

每隔1分钟就创建一个,最多存在3个

[root@k8s-master opt]# kubectl get pod -n wordpress
NAME                            READY   STATUS              RESTARTS   AGE
test-cronjob-1686655560-4cq5n   0/1     Completed           0          3m1s
test-cronjob-1686655620-fg8kb   0/1     Completed           0          2m1s
test-cronjob-1686655680-56tdd   0/1     Completed           0          61s
test-cronjob-1686655740-c88ln   0/1     ContainerCreating   0          1s
[root@k8s-master opt]# kubectl get pod -n wordpress
NAME                            READY   STATUS      RESTARTS   AGE
test-cronjob-1686655620-fg8kb   0/1     Completed   0          2m12s
test-cronjob-1686655680-56tdd   0/1     Completed   0          72s
test-cronjob-1686655740-c88ln   0/1     Completed   0          12s