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
相关推荐
阿里云云原生1 小时前
阿里云发布 Alibaba Cloud AI Agent Handbook,阐述“智能面积”
云原生
灯澜忆梦3 小时前
【docker】#1 | Docker 初识
运维·docker·容器
骑着蜗牛撵大象3274 小时前
穿越 Docker 内核迷雾:镜像分层的叠加态与卷挂载的空间穿梭
运维·docker·容器·联合文件系统·卷挂载·镜像分层·存储驱动
吴声子夜歌4 小时前
Docker入门与实战——Docker数据管理
docker·容器
vipxieliang4 小时前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
kubernetes
程序员老赵4 小时前
Docker 部署 TeslaMate:轻松搭建特斯拉车辆数据记录平台
docker·容器·开源
月落汀兰5 小时前
为什么跨网桥容器 ping 不通?Docker 网络模式详解,端口映射、容器访问外网底层实战
网络·docker·容器
Zhu7586 小时前
在k8s环境中,离线部署与使用Topograph
云原生·容器·kubernetes
凯歌的博客7 小时前
docker镜像代理
运维·docker·容器
A.说学逗唱的Coke8 小时前
【人工智能专题】PolarDB 深度解析:存算分离到 AI Lakebase,云原生数据库的架构演进与实战指南
数据库·人工智能·云原生