1. job
- job复制批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。
2. 实例
vim job.yaml
apiVersion: batch/v1 #定义 Kubernetes API 的版本号,此处使用的是 batch/v1,表示使用 Kubernetes Batch API 的 v1 版本。
kind: Job #定义 Kubernetes 对象的种类,此处使用的是 Job,表示创建一个 Kubernetes Job 对象。
metadata: #元数据部分,包括名称、标签等信息
name: myjob #定义 Job 的名称
spec: #定义 Job 的规格,包括 Job 的模板和执行参数
template: #定义 Job 的 Pod 模板,包括 Pod 的元数据和容器规格
metadata: #定义 Pod 元数据,包括标签等信息
name: myjob #定义pod的名称为myjob
spec: #定义 Pod 的规格,包括容器等信息
containers: #定义 Pod 容器的详细信息
- name: myjob #定义容器名称为myjob
image: busybox #定义容器使用的镜像
command: ["echo", "Hello Kubernetes!"] #容器启动时要执行的命令,容器启动后会执行 echo "Hello Kubernetes!" 命令。
restartPolicy: Never #定义容器重启策略,此处为 Never,表示容器退出后不会重启。
backoffLimit: 4 #定义 Job 的重试次数限制,此处为 4,表示 Job 最多重试 4 次。当 Job 中的 Pod 执行失败时,Kubernetes 会根据该参数自动重试 Job
2.1. 创建job
[root@master1 ~]# kubectl apply -f job.yaml
job.batch/myjob created
[root@master1 ~]# kubectl get jobs
NAME COMPLETIONS DURATION AGE
myjob 0/1 8s 8s
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myjob-6wnlq 0/1 ContainerCreating 0 22s
[root@master1 ~]# kubectl logs myjob-6wnlq
Hello Kubernetes!
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myjob-6wnlq 0/1 Completed 0 50s ---可以看的出来pod的状态已经是完成状态了
[root@master1 ~]# kubectl get jobs
NAME COMPLETIONS DURATION AGE
myjob 1/1 30s 56s
3. CronJob
- CronJob管理基于时间的job,即:
- 在给定时间点只运行一次
- 周期性的在给定时间点运行
- 使用条件:当前使用的k8s集群,版本>=1.8(对CronJob)
- 典型的用法:
- 在给定的时间点调度job运行
- 创建周期性运行的job,例如:数据库备份、发送邮件等。
4. 实例:
vim cronjob.yaml
apiVersion: batch/v1beta1 #CronJob 所使用的 Kubernetes API 版本
kind: CronJob #该对象的类型,即 CronJob
metadata: #定义 CronJob 的元数据信息,包括名称等信息
name: my-cronjob #定义CronJob 的名称
spec: # CronJob 的规范信息
#分钟 小时 月的某一天 月份 周的某一天
schedule: "*/1 * * * *" #CronJob 的执行计划,表示每隔 1 分钟执行一次,
jobTemplate: #CronJob 创建的 Job 的模板信息
spec: #Job 的规范信息
template: #Job 使用的 Pod 模板信息
spec: # Pod 的规范信息
containers: #Pod 中的容器列表
- name: my-cronjob #定义容器的名称
image: busybox #定义容器使用的镜像
args: #容器启动时执行的命令,即打印当前时间和 Hello, World!。
- /bin/sh
- -c
- date; echo "Hello, World!"
restartPolicy: OnFailure #该 Pod 的重启策略,表示在容器失败时重启 Pod。
4.1. 创建cronjob
[root@master1 ~]# kubectl apply -f cronjob.yaml
cronjob.batch/my-cronjob created
[root@master1 ~]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
my-cronjob */1 * * * * False 0 <none> 30s
[root@master1 ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
my-cronjob-1686900660 1/1 12s 15s
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-cronjob-1686900660-sxsq2 0/1 Completed 0 43s
[root@master1 ~]# kubectl logs my-cronjob-1686900660-sxsq2
Fri Jun 16 07:31:14 UTC 2023
Hello, World!
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-cronjob-1686900660-sxsq2 0/1 Completed 0 81s
my-cronjob-1686900720-6lrbr 0/1 Completed 0 21s
[root@master1 ~]# kubectl logs my-cronjob-1686900720-6lrbr
Fri Jun 16 07:32:12 UTC 2023
Hello, World!