k8s的Job和CronJob控制器介绍及实例

1. job

  • job复制批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。

2. 实例

vim  job.yaml

apiVersion: batch/v1 #定义 Kubernetes API 的版本号,此处使用的是 batch/v1,表示使用 Kubernetes Batch API 的 v1 版本。
kind: Job  #定义 Kubernetes 对象的种类,此处使用的是 Job,表示创建一个 Kubernetes Job 对象。
metadata:  #元数据部分,包括名称、标签等信息
  name: myjob  #定义 Job 的名称
spec:          #定义 Job 的规格,包括 Job 的模板和执行参数
  template:    #定义 Job 的 Pod 模板,包括 Pod 的元数据和容器规格
    metadata:  #定义 Pod 元数据,包括标签等信息
      name: myjob #定义pod的名称为myjob
    spec:         #定义 Pod 的规格,包括容器等信息
      containers: #定义 Pod 容器的详细信息
      - name: myjob #定义容器名称为myjob
        image: busybox  #定义容器使用的镜像
        command: ["echo", "Hello Kubernetes!"]  #容器启动时要执行的命令,容器启动后会执行 echo "Hello Kubernetes!" 命令。
      restartPolicy: Never     #定义容器重启策略,此处为 Never,表示容器退出后不会重启。
  backoffLimit: 4    #定义 Job 的重试次数限制,此处为 4,表示 Job 最多重试 4 次。当 Job 中的 Pod 执行失败时,Kubernetes 会根据该参数自动重试 Job

2.1. 创建job

[root@master1 ~]# kubectl apply  -f job.yaml
job.batch/myjob created
[root@master1 ~]# kubectl get jobs
NAME    COMPLETIONS   DURATION   AGE
myjob   0/1           8s         8s
[root@master1 ~]# kubectl get pod
NAME          READY   STATUS              RESTARTS   AGE
myjob-6wnlq   0/1     ContainerCreating   0          22s
[root@master1 ~]# kubectl logs myjob-6wnlq
Hello Kubernetes!

[root@master1 ~]# kubectl get pod
NAME          READY   STATUS      RESTARTS   AGE
myjob-6wnlq   0/1     Completed   0          50s     ---可以看的出来pod的状态已经是完成状态了

[root@master1 ~]# kubectl get jobs
NAME    COMPLETIONS   DURATION   AGE
myjob   1/1           30s        56s   

3. CronJob

  • CronJob管理基于时间的job,即:
    1. 在给定时间点只运行一次
    2. 周期性的在给定时间点运行
  • 使用条件:当前使用的k8s集群,版本>=1.8(对CronJob)
  • 典型的用法:
    1. 在给定的时间点调度job运行
    2. 创建周期性运行的job,例如:数据库备份、发送邮件等。

4. 实例:

vim  cronjob.yaml

apiVersion: batch/v1beta1  #CronJob 所使用的 Kubernetes API 版本
kind: CronJob    #该对象的类型,即 CronJob
metadata:        #定义 CronJob 的元数据信息,包括名称等信息
  name: my-cronjob #定义CronJob 的名称
spec:   # CronJob 的规范信息
            #分钟 小时  月的某一天  月份  周的某一天
  schedule: "*/1 * * * *"  #CronJob 的执行计划,表示每隔 1 分钟执行一次,
  jobTemplate:  #CronJob 创建的 Job 的模板信息
    spec:    #Job 的规范信息
      template:  #Job 使用的 Pod 模板信息
        spec:    # Pod 的规范信息
          containers: #Pod 中的容器列表
          - name: my-cronjob #定义容器的名称
            image: busybox   #定义容器使用的镜像
            args:   #容器启动时执行的命令,即打印当前时间和 Hello, World!。
            - /bin/sh
            - -c
            - date; echo "Hello, World!"
          restartPolicy: OnFailure   #该 Pod 的重启策略,表示在容器失败时重启 Pod。

4.1. 创建cronjob

[root@master1 ~]# kubectl apply -f cronjob.yaml
cronjob.batch/my-cronjob created

[root@master1 ~]# kubectl get cronjob
NAME         SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
my-cronjob   */1 * * * *   False     0        <none>          30s

[root@master1 ~]# kubectl get job
NAME                    COMPLETIONS   DURATION   AGE
my-cronjob-1686900660   1/1           12s        15s

[root@master1 ~]# kubectl get pod
NAME                          READY   STATUS      RESTARTS   AGE
my-cronjob-1686900660-sxsq2   0/1     Completed   0          43s

[root@master1 ~]# kubectl logs my-cronjob-1686900660-sxsq2
Fri Jun 16 07:31:14 UTC 2023
Hello, World!

[root@master1 ~]# kubectl get pod
NAME                          READY   STATUS      RESTARTS   AGE
my-cronjob-1686900660-sxsq2   0/1     Completed   0          81s
my-cronjob-1686900720-6lrbr   0/1     Completed   0          21s

[root@master1 ~]# kubectl logs my-cronjob-1686900720-6lrbr
Fri Jun 16 07:32:12 UTC 2023
Hello, World!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值