Linux 中有 cron 程式定時執行任務,Kubernetes 的 CronJob 提供了類似的功能,可以定時執行 Job。CronJob 配置檔案示例如下:
① <code>batch/v2alpha1</code> 是目前 CronJob 的 <code>apiVersion</code>。
② 指明目前資源的類型為 <code>CronJob</code>。
③ <code>schedule</code> 指定什麼時候運作 Job,其格式與 Linux cron 一緻。這裡 <code>*/1 * * * *</code> 的含義是每一分鐘啟動一次。
④ <code>jobTemplate</code> 定義 Job 的模闆,格式與前面 Job 一緻。
接下來通過 <code>kubectl apply</code> 建立 CronJob。
失敗了。這是因為 Kubernetes 預設沒有 enable CronJob 功能,需要在 kube-apiserver 中加入這個功能。方法很簡單,修改 kube-apiserver 的配置檔案 /etc/kubernetes/manifests/kube-apiserver.yaml:

kube-apiserver 本身也是個 Pod,在啟動參數中加上 <code>--runtime-config=batch/v2alpha1=true</code> 即可。
然後重新開機 kubelet 服務:
kubelet 會重新開機 kube-apiserver Pod。通過 <code>kubectl api-versions</code> 确認 kube-apiserver 現在已經支援 <code>batch/v2alpha1</code>:
再次建立CronJob:
這次成功了。通過 <code>kubectl get cronjob</code> 檢視 CronJob 的狀态:
等待幾分鐘,然後通過 <code>kubectl get jobs</code> 檢視 Job 的執行情況:
可以看到每隔一分鐘就會啟動一個 Job。執行 <code>kubectl logs</code> 可檢視某個 Job 的運作日志:
運作容器化應用是 Kubernetes 最重要的核心功能。為滿足不同的業務需要,Kubernetes 提供了多種 Controller,包括 Deployment、DaemonSet、Job、CronJob 等。本章我們通過實踐詳細學習了這些 Controller,并讨論了它們的特性和應用場景。
書籍:
1.《每天5分鐘玩轉Docker容器技術》
<a href="https://item.jd.com/16936307278.html" target="_blank">https://item.jd.com/16936307278.html</a>
2.《每天5分鐘玩轉OpenStack》
<a href="https://item.jd.com/12086376.html" target="_blank">https://item.jd.com/12086376.html</a>