關於 Tasks
與應用程式 (長時間執行的程序) 不同,工作會在一段時間後停止執行。工作會根據父項應用程式的設定,在各自的容器中執行,並可設定為使用有限的資源 (例如 CPU/記憶體/暫時性磁碟儲存空間)。
工作用途
- 遷移資料庫
- 執行批次工作 (已排程/未排程)
- 傳送電子郵件
- 轉換資料 (ETL)
- 處理資料 (上傳/備份/下載)
Tasks 的運作方式
工作會以非同步方式執行,並獨立於父項應用程式或在同一應用程式中執行的其他工作。為執行工作而建立的應用程式不會建立或指派路徑,且會略過「Run」生命週期。原始碼上傳和建構生命週期仍會繼續,並在推送應用程式後產生用於執行工作項的容器映像檔 (請參閱「部署應用程式」一文,瞭解應用程式生命週期)。
工作生命週期如下:
- 您可以使用
kf push APP_NAME --task
指令推送應用程式,以便執行工作。 - 您可以使用
kf run-task APP_NAME
指令在應用程式上執行工作。工作會繼承與應用程式繫結的環境變數、服務繫結、資源分配、啟動指令和安全群組。 - Kf 會使用應用程式中的值和
run-task
指令中的參數,建立 Tekton PipelineRun。 - Tekton PipelineRun 會建立 Kubernetes Pod,並根據應用程式和工作中的設定啟動容器。
- 工作執行作業停止 (工作結束或手動終止),底層 Pod 會停止或終止。系統會保留已停止的任務 Pod,因此您可以透過
kf logs APP_NAME --task
指令存取任務記錄。 - 如果您在工作停止前終止工作,Tekton PipelineRun 就會取消 (請參閱「取消 PipelineRun」),底層 Pod 和記錄也會一併刪除。如果已設定,系統會將終止的工作記錄傳送至叢集層級記錄串流 (例如 Stackdriver、Fluentd)。
- 如果應用程式執行的工作數量超過 500 個,系統會自動刪除最舊的工作。
工作保留政策
工作會在 Kubernetes 叢集中建立為自訂資源,因此請務必不要耗盡基礎 etcd
資料庫的空間。根據預設,Kf 只會保留每個應用程式的最新 500 項工作。一旦工作數量達到 500 項,系統就會自動刪除最舊的工作 (以及底層 Pod 和記錄)。
工作記錄和執行記錄
您可以使用 kf logs APP_NAME --task
指令,取得工作輸出至 STDOUT 或 STDERR 的任何資料或訊息。叢集層級記錄機制 (例如 Stackdriver、Fluentd) 會將工作記錄傳送至已設定的記錄目的地。