目录标题
20250407
Job
与Deployment及DaemonSet控制器管理的守护进程类的服务应用不同的是,Job控制器用于调配Pod对象运行一次性任务,容器中的进程在正常运行结束后不会对其进行重启,而是将Pod对象置于“Completed”(完成)状态。若容器中的进程因错误而终止,则需要依配置确定重启与否,未运行完成的Pod对象因其所在的节点故障而意外终止后会被重新调度。Job控制器的Pod对象的状态转换如图所示。
Job控制器
CronJob
CronJob控制器用于管理Job控制器资源的运行时间。Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划(crontab)的方式控制其运行的时间点及重复运行的方式,具体如下。
□在未来某时间点运行作业一次。
□在指定的时间点重复运行作业。
CronJob对象支持使用的时间格式类似于Crontab,略有不同的是,CronJob控制器在指定的时间点时,“?”和“*”的意义相同,都表示任何可用的有效值。
successfulJobsHistoryLimit: 3: 这是一项配置,用于设置成功完成的作业历史记录的保存限制。在这种情况下,只会保留最近的3个成功作业的记录。
suspend: false: 这是一项配置,用于指定是否挂起某个资源或对象。在这种情况下,它设置为false,表示该资源不会被挂起。
实践
查看CronJob资源对象
kq get cronjobs
SCHEDULE是指其调度时间点
SUSPEND表示后续任务是否处于挂起状态,即暂停任务的调度和运行
ACTIVE表示活动状态的Job对象的数量
LAST SCHEDULE则表示上次调度运行至此刻的时长
查看某CronJob控制器创建的Job资源对象
kq get jobs
CronJob
、Job
和 Pod
是三个不同层次的资源
在 Kubernetes 中,CronJob
、Job
和 Pod
是三个不同层次的资源,它们之间有明确的层次关系和职责分工。以下是它们的详细解释:
1. Pod
- 定义:Pod 是 Kubernetes 中的最小部署单元,它封装了一个或多个容器(通常是紧密相关的容器)。
- 职责:Pod 是实际运行应用程序的单位,负责执行具体的任务或服务。
- 生命周期:Pod 是短暂的,一旦被创建,它会运行直到完成或失败,或者被手动删除。
- 示例:一个 Pod 可以运行一个数据库容器,或者一个 Web 服务容器。
2. Job
- 定义:Job 是 Kubernetes 中用于运行一次性任务的资源。
- 职责:Job 负责创建一个或多个 Pod,并确保这些 Pod 成功完成任务。如果任务失败,Job 会根据配置进行重试,直到任务成功或达到最大重试次数。
- 生命周期:Job 是短期的,一旦任务完成(成功或失败),Job 会终止。
- 示例:运行一个批处理任务,比如数据备份或日志清理。
3. CronJob
- 定义:CronJob 是 Kubernetes 中用于定时运行任务的资源。
- 职责:CronJob 是基于时间的调度器,它会按照预定的时间表(类似于 Linux 的
cron
)创建 Job。 - 生命周期:CronJob 是长期运行的资源,它会根据时间表定期创建 Job。
- 示例:每天凌晨 2 点运行一个数据备份任务。
层次关系
- CronJob → Job → Pod
- CronJob 根据时间表创建 Job。
- Job 创建 Pod 来执行具体任务。
- Pod 是实际运行任务的单元。
示例
以下是一个简单的 CronJob
示例,用于每天运行一个备份任务:
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-cronjob
spec:
schedule: "0 2 * * *" # 每天凌晨 2 点运行
jobTemplate:
spec:
template:
spec:
containers:
- name: backup-container
image: backup-image:latest
command: ["/bin/sh", "-c", "run-backup-script.sh"]
restartPolicy: OnFailure
- CronJob:
backup-cronjob
每天凌晨 2 点触发。 - Job:CronJob 会创建一个 Job 来执行备份任务。
- Pod:Job 会创建一个 Pod 来运行备份脚本。
总结
- CronJob:定时调度器。
- Job:一次性任务管理器。
- Pod:实际运行任务的单元。
如果你有其他问题或需要进一步解释,请告诉我!