k8s-第十一节-Job和CronJob

Job

Kubernetes jobs主要是针对短时和批量的工作负载。它是为了结束而运行的,而不是像deployment、replicasets、replication controllers和DaemonSets等其他对象那样持续运行。

Kubernetes Jobs会一直运行到Job中指定的任务完成。也就是说,如果pods给出退出代码0,那么Job就会退出。而在正常的Kubernetes中,无论退出代码是什么,deployment对象在终止或出现错误时都会创建新的pod,以保持deployment的理想状态。

CronJob

Job 和 CronJob 都是 Kubernetes 中的资源对象,用于定义需要执行的任务。它们的主要区别在于执行频率和触发条件。

Job 用于执行一次性任务,即仅执行一次的任务。Job 对象会创建一个或多个 Pod,并在它们完成任务后删除它们。Job 的生命周期由 Kubernetes 自动管理,无需人工干预。

CronJob 用于执行周期性任务,即按照指定的时间间隔重复执行的任务。CronJob 对象会创建一个或多个 Job,并根据 Cron 表达式来确定任务的执行时间。CronJob 的生命周期由 Kubernetes 自动管理,无需人工干预。

时间周期是和Linux 一样

schedule: "分 时 日 月 周"

适用场景

对于Kubernetes Jobs最好的用例实践是:

批处理任务: 比如说你想每天运行一次批处理任务,或者在指定日程中运行。它可能是像从存储库或数据库中读取文件那样,将它们分配给一个服务来处理文件。

运维/ad-hoc任务: 比如你想要运行一个脚本/代码,该脚本/代码会运行一个数据库清理活动,甚至备份一个Kubernetes集群。

  • 一次性任务,例如数据导入、数据处理、批量任务等
  • 定时任务,例如定期备份数据、定期发送通知等
  • 批量任务,例如处理大量数据、发送大量通知等

如何在 Kubernetes 中使用 Job 和 CronJob 资源对象?

yaml 复制代码
apiVersion: batch/v1
kind: Job
metadata:
    name: my-job
spec:
    template:
        spec:
            containers:
            - name: my-container
              image: my-image
              command: ["echo", "Hello, World!"]
            restartPolicy: OnFailure

然后,你可以使用以下命令来创建和部署这个 Job 对象:

bash 复制代码
kubectl create -f job.yaml

如果你想要创建一个 CronJob 对象来执行一个周期性任务,你可以创建一个名为 cronjob.yaml 的文件,其中包含以下内容:

yaml 复制代码
apiVersion: batch/v1beta1
kind: CronJob
metadata:
    name: my-cronjob
spec:
    schedule: "0 0 * * *"
    jobTemplate:
        spec:
            template:
                spec:
                    containers:
                    - name: my-container
                      image: my-image
                      command: ["echo", "Hello, World!"]
                    restartPolicy: OnFailure
相关推荐
文静小土豆9 小时前
Java 应用上 K8s 全指南:从部署到治理的生产级实践
java·开发语言·kubernetes
努力搬砖的咸鱼9 小时前
Label 与 Selector:Kubernetes 资源选择的核心机制
微服务·云原生·容器·架构·kubernetes
Warren9811 小时前
Windows本地部署n8n完整教程(基于Docker,新手友好)
运维·windows·python·测试工具·docker·容器·可用性测试
倦王14 小时前
在docker下部署Xinference
运维·docker·容器
阿火~14 小时前
docker完整镜像迁移【亲测有效】
linux·运维·服务器·docker·容器
两点王爷14 小时前
在离线的Ubuntu机器中安装docker
运维·docker·容器
Devin~Y14 小时前
大厂Java面试实战:Spring Boot/WebFlux、Redis+Kafka、K8s可观测性与Spring AI RAG/Agent三轮连环问
java·spring boot·redis·kafka·kubernetes·resilience4j·spring webflux
Harvy_没救了15 小时前
Docker Desktop 部署新项目详细步骤
运维·docker·容器
PH = 715 小时前
解决Docker Hub无法访问的问题二
运维·docker·容器
IT大师兄吖16 小时前
Qwen3 ASR 流式转写 Docker 懒人整合包
docker·容器·eureka