郑文峰的博客 郑文峰的博客
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

zhengwenfeng

穷则变,变则通,通则久
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • docker

  • k8s

    • k8s之Pod
    • k8s之Deployment
    • k8s之Service
    • k8s之ConfigMap和Secret
    • k8s之Job和CronJob
      • Job
        • 什么是Job?
        • 使用Job
      • CronJob
        • 什么是ConJob?
        • 使用CronJob
    • k8s之DaemonSet
    • k8s之PV、PVC和StorageClass
    • k8s之StatefulSet
    • 使用kubeadm安装k8s
    • pod中将代码与运行环境分离
    • django后端服务、logstash和flink接入VictoriaMetrics指标监控
  • 云原生
  • k8s
zhengwenfeng
2022-08-31
目录

k8s之Job和CronJob

# Job

# 什么是Job?

该对象是用来执行运行一段时间后会退出的任务。

# 使用Job

使用yaml描述Job对象,其中restartPolicy是重启策略,需要设定为OnFailure,代表着如果失败则重启,如果是正常执行完成退出,则不需要再次启动。默认的值是Always,会保持着该Pod总是运行的。

template下的Pod模板,Job通过该模板来创建Pod。

apiVersion: batch/v1
kind: Job
metadata:
  name: echo-job

spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
      - image: busybox
        name: echo-job
        command: ["/bin/echo"]
        args: ["hello", "world"]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

使用yaml文件创建Job,然后查看job的pod对象,会发现它的STATUS状态为Completed,因为该job正常完成结束退出了。

[root@k8s-worker1 zwf]# kubectl apply -f job.yaml -n zwf
job.batch/echo-job created

[root@k8s-worker1 zwf]# kubectl get pods -n zwf
NAME                       READY   STATUS      RESTARTS   AGE
echo-job-45pmc             0/1     Completed   0          5s
1
2
3
4
5
6

再来看下该Completed的log,会发现已经输出了hello world

[root@k8s-worker1 zwf]# kubectl logs echo-job-45pmc  -n zwf
hello world
1
2

Job的参数

  • activeDeadlineSeconds,设置 Pod 运行的超时时间。

  • backoffLimit,设置 Pod 的失败重试次数。

为什么不直接在Pod上实现,而要新创建对象Job?

保持单一原则,将业务特性与容器管理分开。

# CronJob

# 什么是ConJob?

该对象用于定时任务。

# 使用CronJob

使用Yaml描述CronJob对象,会发现该对象多了一个schedule字段,这个是用来描述定时任务周期的规则,jobTemplate是Job对象的模板,也就是在定时周期内不断创建Job对象来达到定时任务的目的,也是一种组合的方式。


apiVersion: batch/v1
kind: CronJob
metadata:
  name: echo-cj

spec:
  schedule: '*/1 * * * *'
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - image: busybox
            name: echo-cj
            imagePullPolicy: IfNotPresent
            command: ["/bin/echo"]
            args: ["hello", "world"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

使用定义的Yaml创建CronJob

[root@k8s-worker1 zwf]# kubectl apply -f cronjob.yaml -n zwf
cronjob.batch/echo-cj created

[root@k8s-worker1 zwf]# kubectl get cronjob -n zwf
NAME      SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
echo-cj   */1 * * * *   False     1        1s              2m24s
1
2
3
4
5
6

等待3分钟后,创建了3个CronJob的Pod,并且通过AGE可以发现是每分钟创建一个。

[root@k8s-worker1 zwf]# kubectl get pods -n zwf
NAME                       READY   STATUS      RESTARTS   AGE
echo-cj-27698578-jtfxm     0/1     Completed   0          2m23s
echo-cj-27698579-cdzxg     0/1     Completed   0          83s
echo-cj-27698580-rfp72     0/1     Completed   0          23s
1
2
3
4
#k8s#容器#云原生
上次更新: 2023/01/15, 15:47:48
k8s之ConfigMap和Secret
k8s之DaemonSet

← k8s之ConfigMap和Secret k8s之DaemonSet→

最近更新
01
django rest_framework 分页
03-20
02
学习周刊-第03期-第09周
03-03
03
学习周刊-第02期-第08周
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2023 zhengwenfeng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式