Kubernetes学习目录
1、基础知识
1.1、场景
在我们日常的工作中,经常会遇到临时执行一个动作,但是这个动作必须在某个时间点执行才可以,而我们又
不想一直这么傻傻的等待,即使等待到了,由于特殊原因,我们执行的时候,已经不是准确的时间点了。
针对于这种场景,我们一般使用job的方式来帮助我们定制化的完成任务。
1.2、分类
在k8s场景中,关于job的执行,主要有两种类型:串行job、并行job。
串行job:即所有的job任务都在上一个job执行完毕后,再开始执行
并行job:如果存在多个job,我们可以设定并行执行的job数量。
1.3、资源清单解析
apiVersion: batch/v1 # API群组及版本
kind: Job # 资源类型特有标识
metadata:
name <string> # 资源名称,在作用域中要唯一
namespace <string> # 名称空间;Job资源隶属名称空间级别
spec:
selector <object> # 标签选择器,必须匹配template字段中Pod模板中的标签
template <object> # Pod模板对象
completions <integer> # 期望的成功完成的作业次数,成功运行结束的Pod数量
ttlSecondsAfterFinished <integer> # 终止状态作业的生存时长,超期将被删除
parallelism <integer> # 作业的最大并行度,默认为1
backoffLimit <integer> # 将作业标记为Failed之前的重试次数,默认为6
activeDeadlineSeconds <integer> # 作业启动后可处于活动状态的时长
2、实践1 - 单个任务
2.1、定义资源配置清单
cat >job-single.yml<<'EOF'
apiVersion: batch/v1
kind: Job
metadata:
name: job-single
spec:
template:
metadata:
name: job-single
spec:
restartPolicy: Never
containers:
- name: job-single
image: 192.168.10.33:80/k8s/busybox:latest
command: [ "/bin/sh", "-c", "for i in 9 8 7 6 5 4 3 2 1; do echo $i; sleep 2; done" ]
EOF
属性解析:
对于job来说,他的重启策略只有两种:仅支持Never和OnFailure两种,不支持Always,否则的话就成死循环了。
2.2、应用资源清单
master1 ]# kubectl apply -f job-single.yml
job.batch/job-single created
master1 ]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job-single-s8rfs 1/1 Running 0 2s
master1 ]# kubectl logs job-single-s8rfs --timestamps
2023-03-21T23:13:58.857401271+08:00 9
2023-03-21T23:14:00.857756611+08:00 8
2023-03-21T23:14:02.858705956+08:00 7
2023-03-21T23:14:04.859418774+08:00 6
2023-03-21T23:14:06.859870776+08:00 5
2023-03-21T23:14:08.860462764+08:00 4
2023-03-21T23:14:10.860692201+08:00 3
2023-03-21T23:14:12.861133843+08:00 2
2023-03-21T23:14:14.861628754+08:00 1
# 执行完成的状态
master1 ]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job-single-s8rfs 0/1 Completed 0 2m16s
3、实践2 - 多个串行任务
3.1、定义资源配置清单
cat >job-multi-one-task.yml<<'EOF'
apiVersion: batch/v1
kind: Job
metadata:
name: job-multi-one-task
spec:
completions: 5
parallelism: 1
template:
spec:
containers:
- name: job-multi
image: 192.168.10.33:80/k8s/busybox:latest
command: ["/bin/sh","-c","echo job; sleep 3"]
restartPolicy: OnFailure
EOF
3.2、应用资源清单
master1 ]# kubectl apply -f job-multi-one-task.yml
master1 ]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job-multi-one-task-cdcfn 0/1 Completed 0 13s
job-multi-one-task-f6pxp 0/1 Completed 0 27s
job-multi-one-task-nglhw 0/1 Completed 0 41s
job-multi-one-task-psj6z 0/1 Completed 0 20s
job-multi-one-task-vzbl4 0/1 Completed 0 34s
# 安装完成的时间排序
job_list=$(kubectl get pods | grep job | sort -k 5 | awk '{print $1}')
# 查询日志的时间
master1 ]# for i in $job_list;do kubectl logs $i --timestamps=true; done
2023-03-21T23:20:26.125247993+08:00 job
2023-03-21T23:20:19.135072499+08:00 job
2023-03-21T23:20:12.107366037+08:00 job
2023-03-21T23:20:04.957326877+08:00 job
2023-03-21T23:20:33.146876609+08:00 job
结果显示: 这些任务,确实是串行的方式来执行,由于涉及到任务本身是启动和删除,所以时间间隔要大于3s
4、实践3 - 并行任务
4.1、定义资源配置清单
cat >job-multi-bing.yml<<'EOF'
apiVersion: batch/v1
kind: Job
metadata:
name: job-multi-bing
spec:
completions: 6
parallelism: 2
template:
spec:
containers:
- name: job-multi-bing
image: 192.168.10.33:80/k8s/busybox:latest
command: ["/bin/sh","-c","echo job; sleep 3"]
restartPolicy: OnFailure
EOF
4.2、应用资源清单
master1 ]# kubectl apply -f job-multi-bing.yml
job.batch/job-multi-bing created
master1 ]# kubectl get jobs.batch
NAME COMPLETIONS DURATION AGE
job-multi-bing 0/6 5s 5s
master1 ]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job-multi-bing-22vf6 0/1 Completed 0 22s
job-multi-bing-5kqww 0/1 Completed 0 36s
job-multi-bing-fphn5 0/1 Completed 0 29s
job-multi-bing-pn6tg 0/1 Completed 0 36s
job-multi-bing-pv8z7 0/1 Completed 0 29s
job-multi-bing-xvsh4 0/1 Completed 0 22s
master1 ]# job_list=$(kubectl get pods | grep job | sort -k 5 | awk '{print $1}')
master1 ]# for i in $job_list;do kubectl logs $i --timestamps=true; done
2023-03-21T23:28:30.111105399+08:00 job
2023-03-21T23:28:30.156575615+08:00 job
2023-03-21T23:28:23.114241589+08:00 job
2023-03-21T23:28:23.077039456+08:00 job
2023-03-21T23:28:15.973194391+08:00 job
2023-03-21T23:28:16.029781746+08:00 job
结果显示:
这6条任务确实是两两并行执行的