Job
Kubernetes jobs主要是針對短時和批量的工作負載。它是為了結束而運行的,而不是像deployment、replicasets、replication controllers和DaemonSets等其他對象那樣持續運行。
Kubernetes Jobs會一直運行到Job中指定的任務完成。也就是說,如果pods給出退出代碼0,那么Job就會退出。而在正常的Kubernetes中,無論退出代碼是什么,deployment對象在終止或出現錯誤時都會創建新的pod,以保持deployment的理想狀態。
CronJob
Job 和 CronJob 都是 Kubernetes 中的資源對象,用于定義需要執行的任務。它們的主要區別在于執行頻率和觸發條件。
Job 用于執行一次性任務,即僅執行一次的任務。Job 對象會創建一個或多個 Pod,并在它們完成任務后刪除它們。Job 的生命周期由 Kubernetes 自動管理,無需人工干預。
CronJob 用于執行周期性任務,即按照指定的時間間隔重復執行的任務。CronJob 對象會創建一個或多個 Job,并根據 Cron 表達式來確定任務的執行時間。CronJob 的生命周期由 Kubernetes 自動管理,無需人工干預。
時間周期是和Linux 一樣
schedule: "分 時 日 月 周"
適用場景
對于Kubernetes Jobs最好的用例實踐是:
批處理任務: 比如說你想每天運行一次批處理任務,或者在指定日程中運行。它可能是像從存儲庫或數據庫中讀取文件那樣,將它們分配給一個服務來處理文件。
運維/ad-hoc任務: 比如你想要運行一個腳本/代碼,該腳本/代碼會運行一個數據庫清理活動,甚至備份一個Kubernetes集群。
一次性任務
,例如數據導入、數據處理、批量任務等定時任務
,例如定期備份數據、定期發送通知等批量任務
,例如處理大量數據、發送大量通知等
如何在 Kubernetes 中使用 Job 和 CronJob 資源對象?
apiVersion: batch/v1
kind: Job
metadata:name: my-job
spec:template:spec:containers:- name: my-containerimage: my-imagecommand: ["echo", "Hello, World!"]restartPolicy: OnFailure
然后,你可以使用以下命令來創建和部署這個 Job 對象:
kubectl create -f job.yaml
如果你想要創建一個 CronJob 對象來執行一個周期性任務,你可以創建一個名為 cronjob.yaml 的文件,其中包含以下內容:
apiVersion: batch/v1beta1
kind: CronJob
metadata:name: my-cronjob
spec:schedule: "0 0 * * *"jobTemplate:spec:template:spec:containers:- name: my-containerimage: my-imagecommand: ["echo", "Hello, World!"]restartPolicy: OnFailure