十、kubernetes Job和CronJob

简介: 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:
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
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 # 定义了成功完成的
|
7月前
|
存储 Kubernetes 负载均衡
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
357 2
|
4天前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
5月前
|
资源调度 Kubernetes 调度
从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革
从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革
118707 59
|
7月前
|
Kubernetes 安全 Linux
【面试题系列】关于K8s—Job的2个问题
【面试题系列】关于K8s—Job的2个问题
62 0
|
7月前
|
Kubernetes API 调度
【K8S系列】深入解析Job(下)
【K8S系列】深入解析Job
101 0
|
7月前
|
Kubernetes API Python
【K8S系列】深入解析Job(上))
【K8S系列】深入解析Job
209 0
|
15天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
20小时前
|
存储 运维 监控
Kubernetes 集群的持续监控与性能优化策略
【5月更文挑战第11天】在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。随着其在不同规模企业的广泛采用,如何确保 Kubernetes 集群的高效稳定运行变得至关重要。本文将探讨一套系统的 Kubernetes 集群监控方法,并结合实践经验分享针对性能瓶颈的优化策略。通过实时监控、日志分析与定期审计的结合,旨在帮助运维人员快速定位问题并提出解决方案,从而提升系统的整体表现。
|
2天前
|
Kubernetes Java API
Kubernetes详解(三)——Kubernetes集群组件
Kubernetes详解(三)——Kubernetes集群组件
13 1