Job控制器
Job是Kubernetes中用于运行一次性任务的控制器,它确保指定数量的任务Pod能够成功完成。一个Job会创建一个或多个Pod实例(具体数量由completions
参数决定),直到所有Pod都成功执行完毕或者达到最大重试次数。
下面是一个简单的Job示例:
apiVersion: batch/v1
kind: Job
metadata:
name: pi-calculation
spec:
completions: 1 # 指定需要完成的任务数
parallelism: 1 # 并行执行的任务数,默认为1
backoffLimit: 4 # 最大失败重试次数
template:
metadata:
labels:
app: pi-calculation
spec:
containers:
- name: pi-calculator
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never # 对于Job来说,通常设置为Never,因为Job负责管理Pod的重启策略
保存为pi-job.yaml
后,使用kubectl创建:
kubectl apply -f pi-job.yaml
CronJob控制器
CronJob是基于Job的扩展,用于定时调度和执行Job。它可以根据预设的Cron表达式周期性地触发Job。
以下是一个CronJob示例:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello-world
spec:
schedule: "*/5 * * * *" # 每5分钟执行一次(Cron表达式)
concurrencyPolicy: Forbid # 控制同时运行的Job个数(Forbid禁止并发运行新Job)
successfulJobsHistoryLimit: 3 # 成功Job历史记录保留个数
failedJobsHistoryLimit: 1 # 失败Job历史记录保留个数
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo "Hello from the Kubernetes cluster"
restartPolicy: OnFailure
保存为hello-world-cronjob.yaml
后,使用kubectl创建:
kubectl apply -f hello-world-cronjob.yaml
管理CronJob与Job
-
查看状态:
kubectl get jobs kubectl get cronjobs kubectl describe cronjob hello-world
-
更新CronJob:修改配置文件并重新应用以更改Cron表达式或其他属性。
-
暂停/恢复CronJob:
# 暂停 kubectl patch cronjob hello-world -p '{"spec":{"suspend":true}}' # 恢复 kubectl patch cronjob hello-world -p '{"spec":{"suspend":false}}'
通过这些实战操作,您可以利用Kubernetes的Job和CronJob控制器来管理和调度一次性任务以及定期任务。