全部產品
Search
文件中心

Microservices Engine:K8s任務

更新時間:Jun 12, 2026

本文介紹如何在kubernetes環境中安裝schedulerx-agent,實現對K8s原生Pod/Job的定時調度,並進行狀態監控、警示、日誌採集及問題診斷。

簡介

K8s任務調度原理如下:

image

K8s任務和指令碼任務情境對比如下表:

情境

指令碼任務

K8s任務

指令碼調度不頻繁,且運行資源消耗高。

不推薦。每次fock一個子進程運行指令碼,佔用Agent所在機器的資源,機器負載有打滿風險。

推薦。通過K8s的負載平衡策略,每次彈一個Pod運行指令碼,穩定性高。

指令碼頻繁執行,資源消耗少。

推薦。fock子進程運行指令碼,速度快,資源使用率高。

不推薦。每次拉鏡像起Pod,速度比較慢。且頻繁調用API Server調度Pod/Job,可能會導致API Server限流。

依賴如何構建。

將依賴提前手動部署到ECS上。

構建基礎鏡像,如果依賴修改,需要重新構建基礎鏡像。

前提條件

接入SchedulerX,具體操作,請參見在Kubernetes叢集中部署SchedulerX

建立K8s任務

Shell指令碼

如果想通過Pod運行Shell指令碼,不需要自己構建鏡像,只需要在任務管理建立一個K8s任務,資源類型選擇Shell-Script,鏡像預設是busybox(也可以替換為自己的鏡像)。

任務配置樣本:任務類型選擇K8s資源類型選擇Shell-Script鏡像預設為busybox,在指令碼編輯地區輸入Shell指令碼內容(如echo hello schedulerx)。

單擊运行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-shell-{JobId}。

$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
schedulerx-shell-xxx          1/1     Running   0          xxx

在SchedulerX控制台的任务管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。日誌輸出地區顯示指令碼執行結果(如hello schedulerx),同時可查看執行時間和運行狀態。

Python指令碼

如果想通過Pod運行Python指令碼,不需要自己構建鏡像,只需要在任務管理建立一個K8s任務,資源類型選擇Python-Script,鏡像預設是Python(也可以替換為自己的鏡像)。

任務配置樣本:任務類型選擇K8s資源類型選擇Python-Script鏡像預設為python,在指令碼編輯地區輸入Python指令碼內容(如print('hello schedulerx'))。

單擊运行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-python-{JobId}。

$ kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
schedulerx-python-xxx           1/1     Running   0          xxx

在SchedulerX控制台任务管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。操作方式與Shell指令碼相同,日誌輸出地區顯示指令碼執行結果。

PHP指令碼

如果想通過Pod運行PHP指令碼,不需要自己構建鏡像,只需要在任務管理建立一個K8s任務,資源類型選擇Php-Script,鏡像預設是php:7.4-cli(也可以替換為自己的鏡像)。

任務配置樣本:任務類型選擇K8s資源類型選擇Php-Script鏡像預設為php:7.4-cli,在指令碼編輯地區輸入PHP指令碼內容。

單擊运行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-php-{JobId}。

$ kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
schedulerx-php-xxx           1/1     Running   0          xxx

在SchedulerX控制台任务管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。操作方式與Shell指令碼相同,日誌輸出地區顯示指令碼執行結果。

Node.js指令碼

如果想通過Pod運行Node.js指令碼,不需要自己構建鏡像,只需要在任務管理建立一個K8s任務,資源類型選擇Node.js-Script,鏡像預設是node:16(也可以替換自己的鏡像)。

任務配置樣本:任務類型選擇K8s資源類型選擇Node.js-Script鏡像預設為node:16,在指令碼編輯地區輸入Node.js指令碼內容(如console.log('hello schedulerx'))。

單擊运行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-node-{JobId}。

$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
schedulerx-node-xxx           1/1     Running   0          xxx

在SchedulerX控制台任务管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。操作方式與Shell指令碼相同,日誌輸出地區顯示指令碼執行結果。

Job-YAML

通過SchedulerX也可以運行K8s原生的Job,任務類型選擇K8s,資源類型選擇Job-YAML。

任務配置樣本:任務類型選擇K8s資源類型選擇Job-YAML,在YAML編輯地區輸入標準的Kubernetes Job定義(包含apiVersionkindmetadataspec等欄位)。

單擊运行一次,在Kubernetes叢集中可以看到Job和Pod啟動成功。

$ kubectl get jobs
NAME                COMPLETIONS   DURATION   AGE
schedulerx-xxx      1/1           xxx        xxx

$ kubectl get pods
NAME                     READY   STATUS      RESTARTS   AGE
schedulerx-xxx           0/1     Completed   0          xxx

在SchedulerX控制台任务管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。日誌輸出地區顯示Job運行結果,同時可查看執行時間和運行狀態。

重要

通過SchedulerX運行K8s Job,不建議使用CronJob,定時調度需要使用SchedulerX來配置,否則無法收集每次Pod的執行歷史和日誌。

Pod-YAML

通過SchedulerX也可以運行K8s原生的Pod,任務類型選擇K8s,資源類型選擇Pod-YAML。

任務配置樣本:任務類型選擇K8s資源類型選擇Pod-YAML,在YAML編輯地區輸入標準的Kubernetes Pod定義(包含apiVersionkindmetadataspec等欄位)。

單擊运行一次,在Kubernetes叢集中可以看到Pod啟動成功。

$ kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
schedulerx-xxx              1/1     Running   0          xxx

在SchedulerX控制台的任务管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。日誌輸出地區顯示Pod運行結果,同時可查看執行時間和運行狀態。

重要

通過SchedulerX運行K8s Pod,建議不要運行長周期的Pod(比如Web應用,一旦啟動永遠不會結束),重啟策略需要設定成Never(否則Pod會不斷重啟)。

通過環境變數擷取任務參數

SchedulerX系統支援將任務參數預先配置到環境變數中,這樣無論是指令碼任務、Pod還是Job,都可以便捷地通過讀取環境變數來擷取所需的各項參數資訊。

說明

Schedulerx-Agent 版本需要大於等於1.10.14。

key

描述

SCHEDULERX_JOB_NAME

任務名稱。

SCHEDULERX_SCHEDULE_TIMESTAMP

調度時間的時間戳記。

SCHEDULERX_DATA_TIMESTAMP

資料時間的時間戳記。

SCHEDULERX_WORKFLOW_INSTANCE_ID

如果有配置工作流程,可以擷取工作流程執行個體ID。

SCHEDULERX_JOB_PARAMETERS

任務參數。

SCHEDULERX_INSTANCE_PARAMETERS

任務執行個體參數。

SCHEDULERX_JOB_SHARDING_PARAMETER

如果是分區任務,可以擷取到分區參數。

如下所示,擷取SchedulerX任務參數值:

樣本:在任務配置中填寫任務參數值,指令碼中通過讀取環境變數SCHEDULERX_JOB_PARAMETERS擷取參數,如Shell指令碼中使用echo $SCHEDULERX_JOB_PARAMETERS列印參數值。

優勢

相較於K8s原生的Job功能,採用SchedulerX調度K8s Job具有以下顯著優勢:

可線上編輯的指令碼Pod

K8s Job常用情境是用來做資料處理和營運,一般以指令碼實現居多。原生的使用方式需要把指令碼打包到鏡像裡,在YAML檔案中配置指令碼命令。每當需要修改指令碼時,研發人員不得不經歷重新構建鏡像並再次發布的繁瑣過程。比如:

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["sh",  "/root/hello.sh"]
      restartPolicy: Never
  backoffLimit: 4

運用SchedulerX進行K8s任務管理時,您無需構建鏡像或編寫YAML配置指令碼。只需在控制台直接編輯支援Shell、Python、PHP和Node.js等多種語言的指令碼內容,系統便會自動將其以Pod方式運行。若需對指令碼進行更新,僅需在控制台重新編輯並儲存,下次調度時新版本指令碼將自動生效,顯著提升開發和管理K8s Job的工作效率。同時,藉助SchedulerX的K8s任務功能,完全屏蔽了容器相關的細節,對於不熟悉Container Service的研發人員而言,這項改進無疑顯著提升了開發效率,為他們帶來了極大的便利。

如下:

在SchedulerX控制台的任務編輯頁面中,您可以直接在指令碼編輯地區線上編寫和修改指令碼內容,編輯完成後單擊儲存按鈕即可生效,下次調度時將自動運行最新版本的指令碼。

可視化任務編排

當前在K8s生態系統中,Argo作為一種主流的工作流程編排解決方案被廣泛應用。例如:

# The following workflow executes a diamond workflow
# 
#   A
#  / \
# B   C
#  \ /
#   D
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: dag-diamond-
spec:
  entrypoint: diamond
  templates:
  - name: diamond
    dag:
      tasks:
      - name: A
        template: echo
        arguments:
          parameters: [{name: message, value: A}]
      - name: B
        depends: "A"
        template: echo
        arguments:
          parameters: [{name: message, value: B}]
      - name: C
        depends: "A"
        template: echo
        arguments:
          parameters: [{name: message, value: C}]
      - name: D
        depends: "B && C"
        template: echo
        arguments:
          parameters: [{name: message, value: D}]

  - name: echo
    inputs:
      parameters:
      - name: message
    container:
      image: alpine:3.7
      command: [echo, "{{inputs.parameters.message}}"]

藉助SchedulerX的工作流程功能,您能夠通過直觀的可視化介面,採用簡單的滑鼠拖拽操作來高效編排K8s任務流程。

在使用體驗上,相較於Argo,SchedulerX更為便捷易用,尤其是在運行時,它提供了可視化的工作流程圖展示,能夠清晰地追蹤任務進度,方便快速識別和定位任務受阻的具體環節,顯示出具體的任務失敗:

在工作流程執行個體運行視圖中,各任務節點以不同顏色標識狀態(如綠色表示成功、紅色表示失敗),可直觀定位失敗的具體環節。

警示監控

通過SchedulerX對您的Pod和Job進行調度,能夠充分利用其內建的監控警示機制,實現高效的任務狀態跟蹤與異常預警。

  • 支援的警示通道:簡訊、電話、郵件、WebHook(DingTalk/企業微信/飛書)。

  • 支援的警示策略:失敗警示、執行逾時警示。

Log Service

使用SchedulerX調度您的Pod和Job時,無需額外開通Log Service,系統將自動收集Pod運行期間產生的日誌。一旦Pod執行失敗,您可直接在SchedulerX控制台查看到詳細的失敗原因並分析,實現高效便捷的問題定位與調試。

在任務執行個體詳情中,可查看Pod運行期間產生的完整日誌資訊,包括錯誤堆棧和失敗原因,便於快速定位和調試問題。

監控大盤

通過SchedulerX來調度您的Pod和Job,無需另行開通Prometheus服務,即可查看內建的任務監控功能。

監控大盤頁面展示任務執行次數、成功率、失敗率等統計指標及執行耗時趨勢圖,提供任務運行狀態的全域視圖。

離線上混布

對於諸如訂單處理等對即時性要求較高的線上定時任務,可在同一進程內直接調用方法進行高效處理,與線上業務無縫整合。而對於即時性要求較低但資源消耗較大的離線定時任務,如報表定時匯出,可通過編寫指令碼並以啟動獨立Pod的方式運行。SchedulerX平台支援Java和Kubernetes任務類型,能夠實現離線與線上定時任務的混布調度,靈活滿足不同需求。