//举个栗子
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
[root@docker-k8s01 ~]# kubectl apply -f test-job.yaml
[root@docker-k8s01 ~]# kubectl logs test-job-hsl9z
hello k8s job!
注:注意,如果容器内执行任务有误,会根据容器的重启策略操作容器, 不过这里的容器重启策略只能是: Never和 OnFailure。
提高Job的执行效率
我们可以在Job.spec字段下加上parallelism选项。表示同时运行多少个 Pod执行任务。
我们可以在Job.spec字段下加上completions选项。表示总共需要完成 Pod的数量。
将上述Job任务进行更改。提示,更改Job任务的时候,需要先将原来的Job资源对象删除。
kind: Job
apiVersion: batch/v1
metadata:
name: test-job
spec:
parallelism: 2
completions: 8
template:
metadata:
name: test-job
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello k8s job!"]
restartPolicy: Never
如何定时执行Job
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: hello
spec:
schedule: "*/1 * * * *" # 添加此行,和crontab -e 里面的分时日月周一样
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo","hello cronjob!"]
restartPolicy: OnFailure
#此时查看Pod的状态,会发现,每分钟都会运行一个新的Pod来执行命令规 定的任务。
#但是如果是规定具体时间,他可能并不会去执行任务!!!
添加apiVersion库
[root@docker-k8s01 ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml
#在command字段下添加- --runtime-config=batch/v2alpha1=true
- command:
- kube-apiserver
- --advertise-address=192.168.171.151
- --runtime-config=batch/v2alpha1=true
- --allow-privileged=true
#重启kubelet服务,重新识别api文件内容使之生效
[root@docker-k8s01 ~]# systemctl restart kubelet
//查看api版本库
[root@docker-k8s01 ~]# kubectl api-versions
.................
batch/v2alpha1
注意:此时仍然不能正常运行指定时间的cronJob,这是因为K8s官方 在cronjob这个资源对象的支持中还没有完善此功能,还待开发。
跟Job资源一样在cronjob.spec.jobTemplate.spec下同样支持并发Job参数:parallelism,也支持完成Pod的总数参数:completions
原文:https://blog.51cto.com/14227204/2530105