K8S學習筆錄 - 任務和定時任務

原文連接git

利用集羣來進行一些批處理任務。通常狀況下能夠並行或串行啓動多個計算進程去處理一批工做項,處理完成後整個批處理任務結束github

或者作成定時任務,定時去執行某些工做json

這個看起來是否是很適合DaemonSet篇中的做業任務呢api

Job

具體配置含義以下,也能夠經過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"`
}
複製代碼

CronJob

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"`
}
複製代碼

Job簡單示例

定義一個指望成功執行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/v1beta1app

相關文章
相關標籤/搜索