十五、K8s计划任务Job&CronJob

K8s计划任务CronJob&Job

一、Job可以干什么

Job 控制器用于管理 Pod 对象运行一次性任务,比方说我们对数据库备份,可以直接在 k8s 上启动一个 mysqldump 备份程序,也可以启动一个 pod,这个 pod 专门用来备份用的,备份结束 pod 就可以终止了,不需要重启,而是将 Pod 对象置于"Completed"(完成)状态,若容器中的进程因错误而终止,则需要按照重启策略配置确定是否重启,对于 Job 这个类型的控制器来说,需不需要重建 pod 就看任务是否完成,完成就不需要重建,没有完成就需要重建 pod。

在这里插入图片描述
在这里插入图片描述


二、Job配置参数详解

编辑yaml文件

apiVersion: batch/v1
kind: Job
metadata:
  labels:
    job-name: echo
  name: echo
  namespace: default
spec:
  #suspend: true # 1.21+               #暂停任务,只有支持为false才执行
  #ttlSecondsAfterFinished: 100
  backoffLimit: 4                     #失败多少次不再执行,例如执行4次失败后不再执行
  completions: 1
  parallelism: 1
  template:
    spec:
      containers:
      - command:
        - echo
        - Hello, Job
        image: registry.cn-beijing.aliyuncs.com/dotbalo/busybox
        imagePullPolicy: IfNotPresent
        name: echo
        resources: {
   
   }
      restartPolicy: Never

backoffLimit: 如果任务执行失败,失败多少次后不再执行

completions:有多少个Pod执行成功,认为任务是成功的。例如:如果并发执行3,设置为2,则有2个成功就任务成功了。

  • ​ 为空默认和parallelism数值一样

parallelism:并行执行任务的数量

  • ​ 如果parallelism数值大于未完成任务数,只会创建未完成的数量;比如completions是4,并发是3,第一次会创建3个Pod执行任务,第二次只会创建一个Pod执行任务。

ttlSecondsAfterFinished:Job在执行结束之后(状态为completed或Failed)自动清理。设置为0表示执行结束立即删除,不设置则不会清除,需要开启TTLAfterFinished特性,一般不开启。

执行pod

[root@k8s-master01 job]#kubectl create -f job.yaml
job.batch/echo created
[root@k8s-master01 job]#kubectl get -f job.yaml
NAME   COMPLETIONS   DURATION   AGE
echo  
<think>嗯,用户想了解Kubernetes CronJob的用法和配置示例。首先,我需要回忆一下CronJob的基本概念。CronJobKubernetes中用于定时任务,类似于Linux的cron,但管理的是容器化的任务。用户可能需要知道如何创建、配置以及常见问题的解决方法。 首先,我应该解释什么是CronJob,以及它的作用。然后,给出一个基本的配置示例,用YAML文件展示。这里需要注意字段的说明,比如schedule、jobTemplate、concurrencyPolicy等。用户可能需要了解如何设置定时表达式,如何处理并发任务,比如是否允许同时运行多个Job实例。 接下来,需要考虑用户可能遇到的问题,例如任务不执行、Job重复创建或者资源不足。这时候要给出排查步骤,比如检查CronJob状态、查看Pod日志等。还要提醒用户注意时区设置,默认是UTC,可能需要调整。 然后,生成相关问题,这部分要涵盖CronJob的高级配置、与普通Job的区别、监控方法、调试技巧以及最佳实践。这些问题应该能帮助用户更深入地理解和使用CronJob。 需要确保回答结构清晰,分步骤说明,并且配置示例正确。另外,引用格式要正确,虽然用户没有提供引用来源,但按照系统指令,可能需要假设有相关引用。不过示例中没有引用标识,可能需要检查是否符合用户的要求。最后,确保使用中文,语法正确,数学公式格式正确,不过这里可能涉及较少数学内容,主要集中在代码和配置上。</think>### Kubernetes CronJob 使用指南及配置示例 #### 1. CronJob 基础概念 Kubernetes CronJob 用于在集群中定时执行任务,类似于 Linux 系统的 cron 服务。它通过定义时间表达式(Cron格式)触发 Job 资源的创建,从而运行容器化任务[^1]。 #### 2. 核心配置字段 ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: my-cronjob spec: schedule: "*/5 * * * *" # 每5分钟执行一次 concurrencyPolicy: Forbid # 禁止并发执行 startingDeadlineSeconds: 60 # 启动截止时间 jobTemplate: # Job模板定义 spec: template: spec: containers: - name: task-container image: busybox command: ["/bin/sh", "-c", "date; echo Hello Kubernetes"] restartPolicy: OnFailure ``` #### 3. 关键参数解析 - **schedule**: 使用5字段 Cron 表达式: $$ \text{分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-6)} $$ 例如 `"0 3 * * 1"` 表示每周一3:00执行 - **concurrencyPolicy**: - `Allow`(默认):允许并发 - `Forbid`:跳过新任务 - `Replace`:替换正在运行的任务 - **successfulJobsHistoryLimit**: 保留成功Job记录数(默认3) - **failedJobsHistoryLimit**: 保留失败Job记录数(默认1) #### 4. 常见问题排查 **问题:任务未按计划执行** 1. 检查CronJob状态: ```bash kubectl get cronjob my-cronjob kubectl describe cronjob my-cronjob ``` 2. 查看控制器日志: ```bash kubectl logs -n kube-system <cronjob-controller-pod> ``` **问题:Job重复创建** - 确认时区设置(默认UTC),可通过修改容器时区: ```yaml env: - name: TZ value: Asia/Shanghai ``` #### 5. 生产实践建议 - 设置合理的资源请求/限制 - 配置活跃期限(`activeDeadlineSeconds`) - 结合 Prometheus 监控任务执行状态 - 使用 `kubectl debug` 调试失败任务
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_Jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值