https://www.kubernetes.org.cn/job
https://www.kubernetes.org.cn/cronjobnode
Job負責批量處理短暫的一次性任務 (short lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束.數據庫
Kubernetes支持如下幾種Job:api
Job類型 | 使用示例 | 行爲 | completions | Parallelism |
---|---|---|---|---|
一次性Job | 數據庫遷移 | 建立一個Pod直至其成功結束 | 1 | 1 |
固定結束次數的Job | 處理工做隊列的Pod | 依次建立一個Pod運行直至completions個成功結束 | 2+ | 1 |
固定結束次數的並行Job | 多個Pod同時處理工做隊列 | 依次建立多個Pod運行直至completions個成功結束 | 2+ | 2+ |
並行Job | 多個Pod同時處理工做隊列 | 建立一個或多個Pod直至有一個成功結束 | 1 | 2+ |
第一步:編寫job的yml文件app
apiVersion: batch/v1 kind: Job metadata: name: job spec: template: spec: restartPolicy: Never containers: - name: job image: busybox command: ["echooo","Hello World"]
第二步:執行yml文件3d
╭─root@node1 ~ ╰─➤ kubectl apply -f job.yml job.batch/job created
第三步:查看podrest
╭─root@node1 ~ ╰─➤ kubectl get pod NAME READY STATUS RESTARTS AGE job-jhlsf 0/1 ContainerCannotRun 0 53s job-ldxnr 0/1 ContainerCannotRun 0 23s job-m6cpf 0/1 ContainerCreating 0 3s job-m8skh 0/1 ContainerCannotRun 0 64s
問題發現:建立了不少pod,爲何?code
解答:Job Controller負責根據Job Spec建立Pod,並持續監控Pod的狀態,直至其成功結束。若是失敗,則根據restartPolicy(只支持OnFailure和Never,不支持Always)決定是否建立新的Pod再次重試任務。若是重啓策略爲OnFailure的話,pod會一直重啓!blog
第一步:編寫yml文件隊列
apiVersion: batch/v1 kind: Job metadata: name: job spec: completions: 2 # 完成數 parallelism: 2 # 並行數 template: spec: restartPolicy: OnFailure containers: - name: job image: busybox command: ["/bin/sh","-c","sleep 5;echo Hello World"]
第二步:運行crontab
╭─root@node1 ~ ╰─➤ kubectl apply -f job.yml job.batch/job created
第三步:查看
╭─root@node1 ~ ╰─➤ kubectl get pod NAME READY STATUS RESTARTS AGE job-x5tfw 1/1 Running 0 35s job-zx8p2 0/1 Completed 0 35s ╭─root@node1 ~ ╰─➤ kubectl logs job-x5tfw Hello World ╭─root@node1 ~ ╰─➤ kubectl logs job-zx8p2 Hello World
CronJob即定時任務,就相似於Linux系統的crontab,在指定的時間週期運行指定的任務。
第一步:編寫yml文件
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob1 spec: schedule: "* * * * *" jobTemplate: metadata: name: job spec: template: metadata: name: pod spec: restartPolicy: OnFailure containers: - name: busybox image: busybox command: ["echo","hello"] imagePullPolicy: IfNotPresent
第二步:運行
╭─root@node1 ~ ╰─➤ kubectl apply -f cronjob.yml cronjob.batch/cronjob1 created
第三步: 查看
╭─root@node1 ~ ╰─➤ kubectl get pod NAME READY STATUS RESTARTS AGE cronjob1-1567149060-vjqtp 0/1 Completed 0 43s ╭─root@node1 ~ ╰─➤ kubectl logs cronjob1-1567149060-vjqtp hello