Google 工作表

關於 Tasks

與應用程式 (長時間執行的程序) 不同,工作會在一段時間後停止執行。工作會根據父項應用程式的設定,在各自的容器中執行,並可設定為使用有限的資源 (例如 CPU/記憶體/暫時性磁碟儲存空間)。

工作用途

  • 遷移資料庫
  • 執行批次工作 (已排程/未排程)
  • 傳送電子郵件
  • 轉換資料 (ETL)
  • 處理資料 (上傳/備份/下載)

Tasks 的運作方式

工作會以非同步方式執行,並獨立於父項應用程式或在同一應用程式中執行的其他工作。為執行工作而建立的應用程式不會建立或指派路徑,且會略過「Run」生命週期。原始碼上傳建構生命週期仍會繼續,並在推送應用程式後產生用於執行工作項的容器映像檔 (請參閱「部署應用程式」一文,瞭解應用程式生命週期)。

工作生命週期如下:

  1. 您可以使用 kf push APP_NAME --task 指令推送應用程式,以便執行工作。
  2. 您可以使用 kf run-task APP_NAME 指令在應用程式上執行工作。工作會繼承與應用程式繫結的環境變數、服務繫結、資源分配、啟動指令和安全群組。
  3. Kf 會使用應用程式中的值和 run-task 指令中的參數,建立 Tekton PipelineRun
  4. Tekton PipelineRun 會建立 Kubernetes Pod,並根據應用程式和工作中的設定啟動容器。
  5. 工作執行作業停止 (工作結束或手動終止),底層 Pod 會停止或終止。系統會保留已停止的任務 Pod,因此您可以透過 kf logs APP_NAME --task 指令存取任務記錄。
  6. 如果您在工作停止前終止工作,Tekton PipelineRun 就會取消 (請參閱「取消 PipelineRun」),底層 Pod 和記錄也會一併刪除。如果已設定,系統會將終止的工作記錄傳送至叢集層級記錄串流 (例如 Stackdriver、Fluentd)。
  7. 如果應用程式執行的工作數量超過 500 個,系統會自動刪除最舊的工作。

工作保留政策

工作會在 Kubernetes 叢集中建立為自訂資源,因此請務必不要耗盡基礎 etcd 資料庫的空間。根據預設,Kf 只會保留每個應用程式的最新 500 項工作。一旦工作數量達到 500 項,系統就會自動刪除最舊的工作 (以及底層 Pod 和記錄)。

工作記錄和執行記錄

您可以使用 kf logs APP_NAME --task 指令,取得工作輸出至 STDOUT 或 STDERR 的任何資料或訊息。叢集層級記錄機制 (例如 Stackdriver、Fluentd) 會將工作記錄傳送至已設定的記錄目的地。

排定工作

如上所述,您可以使用 kf run-task APP_NAME 指令以非同步方式執行工作。或者,您也可以先使用 kf create-job 指令建立工作,再使用 kf schedule-job JOB_NAME 指令排定工作執行時間,以便安排工作執行時間。您可以排定該工作,讓系統根據指定的 unix-cron 時程自動執行工作。

Tasks 的排程方式

建立並排程工作以執行工作。工作會說明要執行的工作,並自動管理工作建立作業。

即使先前的執行作業仍在進行中,系統也會依據排程建立工作。如果因任何原因而遺漏執行作業,系統復原時只會執行最近遺漏的執行作業。

刪除工作會一併刪除所有相關聯的工作。如果任何相關工作仍在進行中,系統會強制刪除這些工作,而不會等待工作執行完畢。

由排程工作建立的工作仍須遵守工作保留政策

與 PCF Scheduler 的差異

PCF Scheduler 可為單一工作建立多個時間表,而 Kf 只支援每項工作一個時間表。您可以建立多個工作 (每個工作對應一個時間表),複製 PCF Scheduler 行為。