十、kubernetes Job和CronJob

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: kubernetes Job和CronJob

1、首先介绍一下job和cronjob
在Kubernetes集群提供了Job和CronJob两种资源对象

Job负责处理任务,即仅执行一次的任务,它保障批处理任务的一个或多个Pod成功结束
CronJob则就是在Job上加上了时间调度
1、Job演示

# 这里使用job资源对象创建一个任务,用于倒计时
apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  template:
    metadata:
      name: job-demo
    spec:
      restartPolicy: Never
      containers:
      - name: counter
        image: busybox
        command:
        - "bin/sh"
        - "-c"
        - "for i in 9 8 7 6 5 4 3 2 1;do echo $i;done"

​执行并检查job

$ kubectl apply -f job.yaml

[root@k8s-master01 k8s]# kubectl get job
NAME       COMPLETIONS   DURATION   AGE
job-demo   1/1           19s        53s
[root@k8s-master01 k8s]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
job-demo-n6vc5           0/1     Completed   0          67s


# 还可以使用describe查看job的详细信息

只有job执行完毕后,STATUS状态才为Completed,没有执行完毕的状态为Running

Job Pod类型中的RestartPolicy (pod重启策略)仅支持Never和OnFailure两种,不支持Always,Job就相当于来执行一批处理任务,执行完就结束,如果支持Always(一直重启,直到pod健康)就会陷入死循环

2、CronJob演示
Cronjob其实就是在Job的基础上加上了时间调度,我们可以在指定的时间点运行一个类似于任务,也可以周期性的在指定时间点运行。这个实际上和Linux中的crontab非常类似。一个CronJob对象其实就是对应crontab中的一行,根据时间配置格式周期运行一个Job,配置格式和crontab相同

crontab的格式如下

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

* * * * *
分时日月周

(1) 接下来创建一个每隔30分钟打印数字的定时任务

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          name: cronjob-demo
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox
            command: 
            - "bin/sh"
            - "-c"
            - "for i in 9 8 6 5 4 3 2 1 ;do echo $i; done"

(2) 创建完毕后可以通过下面的方式进行查看

[root@k8s-master01 k8s]# kubectl get cronjob
NAME           SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob-demo   */30 * * * *   False     0        <none>          2m13s

#每30分钟执行一次job,执行完毕job后状态会进行保留。通过get jobs和get pod都可以看到

​我们需要给cronjob设置一个历史记录限制,否则jobs会一直增加(1.14版本默认只保留3个)

在spec下面添加如下2条内容,自定义历史记录限制
successfulJobsHistoryLimit: 5   #成功保留次数
failedJobsHistoryLimit: 10      #失败保留次数

spec:
  successfulJobsHistoryLimit: 5   #成功保留次数
  failedJobsHistoryLimit: 10
  schedule: "*/30 * * * *"
  jobTemplate:
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
Kubernetes Perl 容器
kubernetes 的Job 的并行执行 配置
在Kubernetes中,Job是一种用于批处理任务的Controller对象。如果你想要配置Job以支持并行执行,可以使用Job的`.spec.parallelism`字段。这个字段定义了Job中可以并行运行的Pod的最大数量。 下面是一个简单的Job定义,其中包含了`.spec.parallelism`字段: ```yaml apiVersion: batch/v1 kind: Job metadata: name: example-job spec: parallelism: 3 # 这里定义了并行运行的Pod的数量 completions: 5 # 定义了成功完成的
109 1
|
13天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Job控制器单工作队列的串行方式
Kubernetes中的Job控制器用于管理一次性任务,确保任务完成后不再重启。本文介绍了Job的工作原理、运行方式及示例,包括创建Job、查看Job和Pod信息等步骤,并附有视频讲解。
|
13天前
|
Kubernetes Linux 调度
【赵渝强老师】K8s的周期性任务控制器CronJob
本文介绍了K8s中的CronJob控制器,它类似于Linux的crontab命令,用于管理和调度定时作业。CronJob可以设置在未来某一时间运行作业一次或在指定时间点重复运行作业。文章通过一个示例展示了如何创建和使用CronJob控制器,包括创建配置文件、应用配置、查看Pod信息和日志等步骤。同时,还解释了CronJob的时间表示方式及其限制。
|
13天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s的Job控制器多工作队列的并行方式
Kubernetes Job 是一次性任务控制器,用于控制 Pod 中的容器执行特定任务。本文介绍了 Job 控制器的工作原理、运行方式及多工作队列并行执行的示例。示例中创建了 5 个作业,以 3 个队列并行执行,整个过程需 2 分钟。文中还提供了详细的 YAML 文件配置和执行命令。
|
6月前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
6月前
|
Kubernetes Linux 调度
k8s-高级调度-CronJob 计划任务
k8s-高级调度-CronJob 计划任务
117 0
|
11月前
|
资源调度 Kubernetes 调度
从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革
从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革
118938 59
|
Kubernetes 安全 Linux
【面试题系列】关于K8s—Job的2个问题
【面试题系列】关于K8s—Job的2个问题
124 0
|
7天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
30 1
|
28天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景