本次介绍两个关联度很高的类型,Job和CronJob。
Job基本说明
在 Kubernetes 中,Job 是一种用于运行一次性任务的资源对象。它用于确保在集群内部执行某个任务,即使任务运行失败或其中一个 Pod 发生故障时,也会进行重试。Job 可以保证任务的结束状态为成功(成功完成所有任务)或失败(任何一个任务失败)。
Job 的主要特点包括:
-
一次性任务:Job 用于运行一次性任务,即执行一次特定任务后就完成了它的工作。与其他资源对象(如 Deployment)不同,Job 不会持续运行,而是等待任务完成后进行清理。
-
并行任务:Job 可以指定要并行运行多少个任务。例如,可以创建一个 Job,并指定要同时运行 5 个 Pod 来执行任务,从而提高任务执行效率。
-
任务重试:如果某个 Pod 的任务运行失败,则 Kubernetes 会自动重新创建一个新的 Pod 来重试任务,直到成功完成任务为止。这有助于确保任务的可靠性。
-
完成状态:Job 的任务可以定义为成功完成或失败完成。如果所有的任务都成功完成,则 Job 的状态将被标记为成功。如果任何一个任务失败,则 Job 的状态将被标记为失败。
Job 使用一个或多个 Pod 来执行任务,并通过 Pod 的数量来决定任务的并行性。可以使用控制器(如 CronJob)来调度 Job 的运行时间,并可以使用 Pod 模板来定义 Job 中运行的任务。
Job基本样例
以下是 kind
类型为 Job
的 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
常见关键字说明
apiVersion
:batch/v1
,指定使用的 API 版本。kind
:Job
,定义资源类型为 Job。metadata
: 元数据,包括 Job 的名称。spec
: Job 的规范,包含以下关键字:template
: 定义 Job 中用于创建 Pod 的模板。spec
: Pod 的规范,与 Pod 的 YAML 定义相同。spec.template.spec.containers
: Pod 中的容器列表,定义要运行的容器和相关信息。spec.template.spec.containers[].name
: 容器的名称。spec.template.spec.containers[].image
: 容器的镜像。spec.template.spec.containers[].command
: 容器的命令和参数。spec.template.spec.restartPolicy
: Pod 中容器的重启策略,可选值为Always
、OnFailure
或Never
。
以上示例展示了一个简单的 Job,它创建一个包含一个容器的 Pod,在容器中执行命令打印 “Hello, World!”。你可以根据实际需求来自定义和扩展。
扩展关键字及举例
除了上述提到的关键字,还有一些其他常用的关键字可以在 Job 的 YAML 中添加,以下是一些示例:
metadata.namespace
: 指定 Job 所属的命名空间。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
namespace: my-namespace
spec:
template:
spec:
# ...
spec.completions
: 定义 Job 需要成功完成的 Pod 的个数,默认值为 1。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
completions: 2
template:
spec:
# ...
spec.parallelism
: 定义同时进行的 Pod 的最大数量,默认值为 1。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
parallelism: 3
template:
spec:
# ...
spec.backoffLimit
: 定义当 Job 失败并且达到重试次数上限时的行为,默认值为 6。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
backoffLimit: 3
template:
spec:
# ...
spec.activeDeadlineSeconds
: 定义 Job 的最长执行时间,超过此时间将被终止并认为是失败,默认值为 3600 秒。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
activeDeadlineSeconds: 1800
template:
spec:
# ...
spec.ttlSecondsAfterFinished
: 定义 Job 完成后保留的时间,默认值为 nil(保留 Job)。
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
ttlSecondsAfterFinished: 3600
template:
spec:
# ...
这些关键字可以根据实际需求来设置和调整 Job 的行为和配置,从而满足特定的业务需求。
CronJob基本说明
在 Kubernetes 中,CronJob 是一种用于定期运行任务的资源对象。它继承自 Kubernetes 的 Job 对象,可以按照 Cron 表达式指定的时间计划运行 Jobs。
CronJob 的特点包括:
-
定期执行:CronJob 可以按照 Cron 表达式指定的时间周期性地调度 Job 的运行。Cron 表达式语法可以很容易地指定要运行的时间和日期,例如每天 8 点运行任务或者每周五下午 5 点运行任务等。
-
任务运行:CronJob 创建 Job 对象来运行一次性任务。它们的表现就像执行单次任务的 Job。任务并行性可以通过设置
spec.parallelism
字段指定。 -
处理 Job 运行:CronJob 可以根据不同的策略,如
spec.concurrencyPolicy
,处理 Job 运行和完成情况。CronJob 还会保存成功完成 Job 的历史纪录,以及保留失败 Job 的日志。
CronJob基本样例
kind
类型为 CronJob
和 Job
的 YAML 编写示例,以及常见关键字的说明:
CronJob
的 YAML 示例:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-container
image: my-image
restartPolicy: OnFailure
常见关键字说明
apiVersion
:batch/v1beta1
,指定使用的 API 版本。kind
:CronJob
,定义资源类型为 CronJob。metadata
: 元数据,包括 CronJob 的名称。spec
: CronJob 的规范,包含以下关键字:schedule
: 定义 CronJob 的调度规则。示例中的*/1 * * * *
表示每分钟执行一次。jobTemplate
: 定义生成的 Job 的模板。spec
: Job 的规范,与 Job 的 YAML 定义相同。
补充:Crontab表达式
Crontab的语法规则格式
Crontab规则由五个时间字段和一个命令字段组成,每个字段之间由空格或制表符分隔。
代表意义 分钟 小时 日期 月份 周 命令
数字范围 0~59 0~23 1~31 1~12 0~7 需要执行的命令
在这些时间字段中,您可以使用以下特殊字符:
- 星号(*):表示匹配所有可能的值。例如,"*"在分钟字段中表示每分钟。
- 逗号(,):用于指定多个值。例如,"1,3,5"在小时字段中表示1点、3点和5点。
- 连字符(-):用于指定一个范围。例如,"10-15"在分钟字段中表示从10到15分钟。
- 斜杠(/):用于指定一个步长。例如,"*/5"在分钟字段中表示每隔5分钟。
- @符号:用于指定一些特定的预定义值,如"@reboot"表示在系统启动时执行任务。
参考
https://blog.csdn.net/m0_61452396/article/details/131270621