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
相关推荐
青 春 记 忆5 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
Java王小怪7 小时前
Docker环境Redis没挂载保存数据
运维·docker·容器
AKCJDJ8 小时前
k8s的管理及控制器管理
云原生·容器·kubernetes
SCandL1528 小时前
k8s service
linux·容器·kubernetes
众人皆醒我独醉10 小时前
InferenceGraph:把多个推理服务编排成 DAG
面试·kubernetes·gpu
众人皆醒我独醉10 小时前
LLMService:KServe 面向 LLM 的下一步
面试·kubernetes·gpu
aaaBsBsBsB11 小时前
k8s pod管理
运维·docker·容器
阿里云云原生11 小时前
解决 AI Agent 可观测性难题:eBPF 技术在 Serverless 容器场景下的落地应用
云原生
Doep_key12 小时前
Kubenetes控制器
运维·docker·容器
做一个AK梦14 小时前
论基于云原生数据库的企业信息系统架构设计
数据库·云原生