【赵渝强老师】K8s的周期性任务控制器CronJob

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文介绍了K8s中的CronJob控制器,它类似于Linux的crontab命令,用于管理和调度定时作业。CronJob可以设置在未来某一时间运行作业一次或在指定时间点重复运行作业。文章通过一个示例展示了如何创建和使用CronJob控制器,包括创建配置文件、应用配置、查看Pod信息和日志等步骤。同时,还解释了CronJob的时间表示方式及其限制。

b125.png

在K8s中,Job控制器管理的作业在控制器资源被创建之后便会立即执行,而CronJob控制器可用于管理和调度作业运行的时间,从而实现定时作业和周期作业的目的,这种控制器管理和调度作业的方式类似Linux的crontab命令。CronJob控制器管理和调度作业的方式主要有以下两种:

  • 在未来某一时间运行作业一次
  • 在指定的时间点重复运行作业

  

视频讲解如下:


一、运行第一个CronJob控制器

  

下面通过一个具体的示例来演示如何使用CronJob控制器。该示例会在每分钟打印出当前时间和问候消息。


(1)创建"cronjob-demo.yaml"文件,并输入下面的内容。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
 name: cronjob-demo
spec:
 #CronJob控制器将1分钟调度一次
 schedule: "*/1 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
         - name: cronjob-demo
           image: busybox
           imagePullPolicy: IfNotPresent
           command:
           - /bin/sh
           - -c
           - date; echo Hello from the CronJob
         restartPolicy: OnFailure


(2)执行命令创建CronJob。

kubectl apply -f cronjob-demo.yaml


(3)查看CronJob和Pod的信息,如下图所示。

kubectl get cronjob,pod


提示:这时候CronJob控制器将创建第一个Pod。


(4)查看Pod的标准输出信息。

kubectl logs pod/cronjob-demo-1643438580-9v556
# 输出的信息如下:
Sat Jan 29 06:43:05 UTC 2022
Hello from the CronJob


(5)等待一分钟后,再次查看CronJob和Pod的信息,如下图所示。

kubectl get cronjob,pod


提示:这时候CronJob控制器将创建第二个Pod。


(6)再次等待一分钟后,再次查看CronJob和Pod的信息,如下图所示。

kubectl get cronjob,pod


提示:这时候CronJob控制器将创建第三个Pod,以后每隔一分钟将创建一个新的Pod。


二、CronJob的时间表示

  

CronJob控制器中的时间表示方式与Linux中的crontab命令表示时间的方式类似。以"cronjob-demo.yaml"为例。通过".spec.schedule"字段设置CronJob控制器将1分钟调度一次。具体的参数含义如下图所示。


  

按照CronJob的时间表示方式,下面的CronJob控制器将在每个月21号的午夜以及每个星期六的午夜开始任务。

schedule: "0 0 21 * 6"

  

下表列举了一些常见的CronJob的时间表示方式。


三、CronJob控制器的限制

  

CronJob控制器根据预写设定的时间定时创建一个Job并执行该Job。但CronJob并不严格保证Job一定会被创建,某些情况下可能不会创建Job,某些情况下可能会创建两个Job。应该尽量减少这种情况的发生,但不能完全杜绝。当字段"startingDeadlineSeconds"保持默认值或者很大,且字段"concurrencyPolicy"设置为"Allow"时,CronJob控制器将保证Job将始终至少运行一次。


提示:由于CronJob控制器每隔10秒钟执行一次检查。因此不能将字段"startingDeadlineSeconds"的值设置过小。如果该字段的值低于了10秒钟,CronJob可能无法被调度。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
8天前
|
Kubernetes 监控 调度
【赵渝强老师】K8s的DaemonSet控制器
DaemonSet控制器确保每个节点上运行一个Pod副本,适用于监控、日志收集等场景。通过示例创建DaemonSet并查看Pod信息,展示了其自动扩展和回收的能力。视频讲解和代码示例详细说明了DaemonSet的使用方法和调度机制。
|
8天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Job控制器单工作队列的串行方式
Kubernetes中的Job控制器用于管理一次性任务,确保任务完成后不再重启。本文介绍了Job的工作原理、运行方式及示例,包括创建Job、查看Job和Pod信息等步骤,并附有视频讲解。
|
8天前
|
存储 Kubernetes 调度
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
|
8天前
|
存储 Kubernetes 调度
【赵渝强老师】K8s的有状态控制器StatefulSet
在Kubernetes中,StatefulSets用于部署有状态应用程序,提供持久存储和唯一标识符。与Deployment不同,StatefulSets确保Pod的标识符在重新调度后保持不变,适用于需要稳定网络标识符和持久存储的场景。本文介绍了StatefulSets的创建、扩容与缩容、更新与回滚等操作,并提供了具体示例和视频讲解。
|
8天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s的Job控制器多工作队列的并行方式
Kubernetes Job 是一次性任务控制器,用于控制 Pod 中的容器执行特定任务。本文介绍了 Job 控制器的工作原理、运行方式及多工作队列并行执行的示例。示例中创建了 5 个作业,以 3 个队列并行执行,整个过程需 2 分钟。文中还提供了详细的 YAML 文件配置和执行命令。
|
23天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
24天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
122 17
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
471 1
|
1月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
105 1

相关产品

  • 容器服务Kubernetes版