中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

K8S之任務計劃Cron Job

發布時間:2020-07-10 10:21:05 來源:網絡 閱讀:1302 作者:breaklinux 欄目:系統運維

Cron Job 是什么?

Cron Job 管理基于時間的 Job,即:

  • 在給定時間點只運行一次

  • 在給定時間點周期性地運行

一個 CronJob 對象類似于 crontab (cron table)文件中的一行。它根據指定的預定計劃周期性地運行一個 Job

注意: 在預定計劃中,問號(?)和星號(*)的意義是相同的,表示給定字段的取值是任意可用值。

注意: 在 Kubernetes 1.4 版本引入了 ScheduledJob 資源,但從 1.5 版本開始改成了 CronJob。

典型的用法如下所示:

  • 在給定的時間點調度 Job 運行

  • 創建周期性運行的 Job,例如:數據庫備份、發送郵件。

前提條件

當使用的 Kubernetes 集群,版本 >= 1.4(對 ScheduledJob),>= 1.5(對 CronJob),當啟動 API Server(參考 為集群開啟或關閉 API 版本 獲取更多信息)時,通過傳遞選項 --runtime-config=batch/v2alpha1=true 可以開啟 batch/v2alpha1 API。

創建 Cron Job

下面是一個 Cron Job 的例子。它會每分鐘運行一個 Job,打印出當前時間并輸出問候語 hello。

% include code.html language=“yaml” file=“cronjob.yaml”ghlink=“/docs/concepts/workloads/controllers/cronjob.yaml” %}

下載并運行該示例 Cron Job,然后執行如下命令:


$?kubectl?create?-f?./cronjob.yaml?
cronjob?"hello"?created

可選地,使用 kubectl run 創建一個 Cron Job,不需要寫完整的配置:


$?kubectl?run?hello?--schedule="*/1?*?*?*?*"?--restart=OnFailure?--image=busybox?--?/bin/sh?-c?"date;?echo?Hello?from?the?Kubernetes?cluster"?
cronjob?"hello"?created

創建該 Cron Job 之后,通過如下命令獲取它的狀態信息:

$?kubectl?get?cronjob?hello?
NAME??????SCHEDULE??????SUSPEND???ACTIVE????LAST-SCHEDULE?
hello?????*/1?*?*?*?*???False?????0?????????<none>

如上所示,既沒有 active 的 Job,也沒有被調度的 Job。

等待并觀察創建的 Job,大約一分鐘時間:

$?kubectl?get?jobs?--watch?
NAME?????DESIRED???SUCCESSFUL???AGE?
hello-4111706356???1?????????1?????????2s

現在能看到一個名稱為 hello 的 Job 在運行。我們可以停止觀察,并再次獲取該 Job 的狀態信息:


$?kubectl?get?cronjob?hello?
NAME??????SCHEDULE??????SUSPEND???ACTIVE????LAST-SCHEDULE?
hello?????*/1?*?*?*?*???False?????0??????Mon,?29?Aug?2016?14:34:00?-0700

應該能夠看到名稱為 “hello” 的 Job 在 LAST-SCHEDULE 指定的時間點被調度了。當前存在 0 個活躍(Active)的 Job,說明該 Job 已經被調度運行完成或失敗。

現在,找到最近一次被調度的 Job 創建的 Pod,能夠看到其中一個 Pod 的標準輸出。注意,Job 名稱和 Pod 名稱是不一樣的。

#?Replace?"hello-4111706356"?with?the?job?name?in?your?system??
$??pods=$(kubectl?get?pods?--selector=job-name=hello-4111706356?--output=jsonpath={.items..metadata.name})?
$?echo?$pods?hello-4111706356-o9qcm?

$?kubectl?logs?pods?
Mon?Aug?29?21:34:09?UTC?2016?
Hello?from?the?Kubernetes?cluster

刪除 Cron Job

一旦不再需要 Cron Job,簡單地可以使用 kubectl 命令刪除它:

$?kubectl?delete?cronjob?hello?
cronjob?"hello"?deleted

這將會終止正在創建的 Job。然而,運行中的 Job 將不會被終止,不會刪除 Job 或 它們的 Pod。為了清理那些 Job 和 Pod,需要列出該 Cron Job 創建的全部 Job,然后刪除它們:

$?kubectl?get?jobs?
NAME???DESIRED???SUCCESSFUL???AGE?hello-1201907962???1?????????1????????????11m?
hello-1202039034???1?????????1????????????8m?...?


$?kubectl?delete?jobs?hello-1201907962?hello-1202039034?...?
job?"hello-1201907962"?deleted?
job?"hello-1202039034"?deleted

一旦 Job 被刪除,由 Job 創建的 Pod 也會被刪除。注意,所有由名稱為 “hello” 的 Cron Job 創建的 Job 會以前綴字符串 “hello-” 進行命名。如果想要刪除當前 Namespace 中的所有 Job,可以通過命令 kubectl delete jobs --all 立刻刪除它們。

Cron Job 限制

Cron Job 在每次調度運行時間內 大概 會創建一個 Job 對象。我們之所以說 大概 ,是因為在特定的環境下可能會創建兩個 Job,或者一個 Job 都沒創建。我們嘗試少發生這種情況,但卻不能完全避免。因此,創建 Job 操作應該是 _冪等的_。

Job 根據它所創建的 Pod 的并行度,負責重試創建 Pod,并就決定這一組 Pod 的成功或失敗。Cron Job 根本不會去檢查 Pod。

編寫 Cron Job 規約

和其它 Kubernetes 配置一樣,Cron Job 需要 apiVersionkind、和 metadata 這三個字段。 關于如何實現一個配置文件的更新信息,參考文檔 部署應用、 配置容器 和 使用 kubectl 管理資源。

Cron Job 也需要 .spec 段。

注意: 對一個 Cron Job 的所有修改,尤其是對其 .spec 的修改,僅會在下一次運行的時候生效。

調度

.spec.schedule.spec 中必需的字段,它的值是 Cron 格式字的符串,例如:0 * * * *,或者 @hourly,根據指定的調度時間 Job 會被創建和執行。

Job 模板

.spec.jobTemplate 是另一個 .spec 中必需的字段。它是 Job 的模板。 除了它可以是嵌套的,并且不具有 apiVersionkind 字段之外,它和 Job 一樣具有完全相同的模式(schema)。 參考 編寫 Job 規格。

啟動 Job 的期限(秒級別)

.spec.startingDeadlineSeconds 字段是可選的。它表示啟動 Job 的期限(秒級別),如果因為任何原因而錯過了被調度的時間,那么錯過執行時間的 Job 將被認為是失敗的。如果沒有指定,則沒有期限。

并發策略

.spec.concurrencyPolicy 字段也是可選的。它指定了如何處理被 Cron Job 創建的 Job 的并發執行。只允許指定下面策略中的一種:

  • Allow(默認):允許并發運行 Job

  • Forbid:禁止并發運行,如果前一個還沒有完成,則直接跳過下一個

  • Replace:取消當前正在運行的 Job,用一個新的來替換

注意,當前策略只能應用于同一個 Cron Job 創建的 Job。如果存在多個 Cron Job,它們創建的 Job 之間總是允許并發運行。

掛起

.spec.suspend 字段也是可選的。如果設置為 true,后續所有執行都將被掛起。它對已經開始執行的 Job 不起作用。默認值為 false

Job 歷史限制

.spec.successfulJobsHistoryLimit.spec.failedJobsHistoryLimit 這兩個字段是可選的。它們指定了可以保留完成和失敗 Job 數量的限制。

默認沒有限制,所有成功和失敗的 Job 都會被保留。然而,當運行一個 Cron Job 時,很快就會堆積很多 Job,推薦設置這兩個字段的值。設置限制值為 0,相關類型的 Job 完成后將不會被保留。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顶山市| 黄浦区| 万源市| 凉城县| 建宁县| 吉林市| 九龙坡区| 海门市| 罗城| 桂林市| 福建省| 阳曲县| 长宁县| 灵石县| 巧家县| 屏东县| 西峡县| 抚宁县| 崇左市| 墨江| 河南省| 赤峰市| 稻城县| 临汾市| 隆回县| 银川市| 彰化县| 无极县| 通州区| 灵丘县| 科技| 长武县| 玛曲县| 阿勒泰市| 武山县| 富宁县| 清流县| 高陵县| 万山特区| 奈曼旗| 长沙市|