原文连接git
利用集群来进行一些批处理任务。通常状况下能够并行或串行启动多个计算进程去处理一批工做项,处理完成后整个批处理任务结束github
或者作成定时任务,定时去执行某些工做json
这个看起来是否是很适合DaemonSet篇中的做业任务呢api
具体配置含义以下,也能够经过Job文档学习。bash
type Job struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // Job的主要定义就在这里 Spec JobSpec `json:"spec,omitempty"` // Job的各类状态,对于咱们来说是只读的 Status JobStatus `json:"status,omitempty"` } type JobSpec struct { // 定义最多能运行的Pod数量,不能超过Completions的值 // 无论任什么时候间,Pod在运行状态中的数量都不会超过该数 // 默认为1 Parallelism *int32 `json:"parallelism,omitempty"` // 能够表明Job成功的成功运行的Pod数量 // 不设置则表明任何Pod执行成功后都表明Job成功 // 设置为N,则Parallelism的的最大值为N,只要有N个Pod运行成功就表明这个Job执行成功 Completions *int32 `json:"completions,omitempty"` // Pod的存活的最大时间,超过这个时间会当即被杀死,并杀死相关的容器 // 必须为正整数 ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"` // Job失败后重试次数,默认为6次 BackoffLimit *int32 `json:"backoffLimit,omitempty"` // Label筛选器,经过Pod的Label匹配当前Pod的数量 // 通常状况系统会帮忙设置好这个 Selector *metav1.LabelSelector `json:"selector,omitempty"` // 是否要手动控制Pod的labels和selectors的生成 // 不设置或者设置为false的时候,系统会为这个Pod生成一个惟一标签给Job和他的Pod模板 // 设置成true的话,一切都要手动来完成,除非有特殊需求而且明白怎么搞,不然不建议设置 ManualSelector *bool `json:"manualSelector,omitempty"` // Pod定义 // 须要额外说明一下 // Job的Template中 // Pod的重启配置restartPolicy属性只能设置为Never或OnFailure Template v1.PodTemplateSpec `json:"template"` // 一个alpha等级的功能,若是使用须要配置开启 // 功能大概是在Job完成N秒之后删除Job // 具体能够看网上的一些文档说明 TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty"` } 复制代码
type CronJob struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // CronJob定义 Spec CronJobSpec `json:"spec,omitempty"` // CronJob的状态 Status CronJobStatus `json:"status,omitempty"` } type CronJobSpec struct { // 执行周期, 详情https://zh.wikipedia.org/wiki/Cron Schedule string `json:"schedule"` // 等待调度的时间,若是到时间还未被调度,无论什么缘由,都算任务失败 StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty"` // 对并发任务的处理方案,例如CronJob A,每分钟执行一次,可是执行时间超过了一分钟,则在第二次执行时间到达时的处理方案 // 值为Allow、Forbid、Replace // Allow 容许屡次任务同时进行 // Forbid 忽略第二次执行,须要等到第一次任务执行完成后才能够 // Replace 取消当前任务,第二次执行替代第一次执行 ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty"` // 是否暂停 // 在修改了此值以后,控制器会中止后续的任务执行,可是已经开始的任务不受影响 Suspend *bool `json:"suspend,omitempty"` // Job模板 JobTemplate JobTemplateSpec `json:"jobTemplate"` // 任务成功(失败)记录上限,默认值而为3 SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty"` FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty"` } type ConcurrencyPolicy string const ( AllowConcurrent ConcurrencyPolicy = "Allow" ForbidConcurrent ConcurrencyPolicy = "Forbid" ReplaceConcurrent ConcurrencyPolicy = "Replace" ) type JobTemplateSpec struct { metav1.ObjectMeta `json:"metadata,omitempty"` Spec batchv1.JobSpec `json:"spec,omitempty"` } 复制代码
定义一个指望成功执行4次、同时只启动2个Pod来执行的任务配置。markdown
apiVersion: batch/v1 kind: Job metadata: name: ab labels: app: ab spec: completions: 4 parallelism: 2 template: metadata: labels: app: ab spec: restartPolicy: Never containers: - name: ab image: jordi/ab args: - -n100 - -c10 - -k - -r - http://www.mi0ffice.cn/ 复制代码
运行状态和最终状态以下并发
$ kubectl describe job/ab
Name: ab
Namespace: default
Selector: controller-uid=ba5277a5-1f53-46dc-965a-7bb676d3201e
Labels: app=ab
Annotations: <none>
Parallelism: 2
Completions: 4
Start Time: Sun, 19 Jan 2020 19:06:20 +0800
Completed At: Sun, 19 Jan 2020 19:07:10 +0800
Duration: 50s
Pods Statuses: 0 Running / 4 Succeeded / 0 Failed
Pod Template:
Labels: app=ab
controller-uid=ba5277a5-1f53-46dc-965a-7bb676d3201e
job-name=ab
Containers:
ab:
Image: jordi/ab
Port: <none>
Host Port: <none>
Args:
-n100
-c10
-k
-r
http://www.mi0ffice.cn/
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 54s job-controller Created pod: ab-2mvhc
Normal SuccessfulCreate 54s job-controller Created pod: ab-hq64x
Normal SuccessfulCreate 32s job-controller Created pod: ab-cr7fz
Normal SuccessfulCreate 27s job-controller Created pod: ab-kc7q7
复制代码
对于CronJob不在多说了,你们本身试一试就知道了。须要注意,CronJob的apiVersion为 batch/v1beta1
app