原文連接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