SchedulerX支援定時發送器、多語言指令碼和HTTP介面,也支援調度原生的K8s Job或者Pod。本文介紹如何在Kubernetes環境中部署SchedulerX。
使用情境
使用SchedulerX調度K8s Job有如下優勢。
可線上編輯指令碼Pod
K8s Job常用於資料處理和營運情境,一般以指令碼實現居多。原生的使用方式需要將指令碼打包到鏡像裡,在YAML檔案中配置指令碼命令。如果要修改指令碼,需要重新構建鏡像和發布。如下所示。
而使用SchedulerX則無需構建鏡像和編寫YAML指令碼,只需在SchedulerX控制台直接編輯指令碼(Shell、Python、PHP或Node.js),即可自動以Pod方式運行指令碼。如果要修改指令碼,只需在SchedulerX控制台重新編輯指令碼,下次調度會自動生效,繼而提高K8s Job的開發效率。同時,使用SchedulerX的K8s任務時,您無需瞭解容器底層細節,可以低門檻使用容器技術。
可視化任務編排
K8s中主流解決方案是使用argo進行工作流程編排,如下所示。
SchedulerX支援通過可視化介面拖拽進行K8s任務的編排,相較於當前主流的、通過代碼進行工作流程編排的解決方案更為便捷。此外,任務運行時,可視化的工作流程圖可以協助您快速排查任務卡點,提高營運效率。
警示監控
使用SchedulerX來調度Pod或者Job,可以複用SchedulerX的監控警示功能。
支援的警示通道:簡訊、電話、郵件、Webhook(DingTalk/企業微信/飛書)。
支援的警示策略:失敗警示、執行逾時警示。
Log Service
使用SchedulerX調度Pod或者Job時,無需額外開通Log Service,就可以自動採集Pod啟動並執行日誌。如果Pod運行失敗,您可以直接在SchedulerX控制台排查Pod執行失敗的原因。
監控大盤
您可以通過SchedulerX內建的任務監控大盤即時觀察您的任務。
離線線上混和部署
SchedulerX提供離線上定時任務混布調度功能,支援Java和K8s任務類型。一個業務應用通常包括多個定時任務。如果定時任務調度頻率較高,可以直接使其與業務應用處於同一進程中。但進程內調用會消耗線上應用自身的CPU和記憶體,無法與線上業務隔離。所以,當一個定時任務資源消耗大且調度頻率不高(例如每小時或每天運行一次)時,可以新增一個Pod運行該定時任務,使之與原來的線上應用處於不同進程中。
方式一:通過Deployment部署SchedulerX(推薦)
使用非Java應用類型時,可以通過Deployment部署一個schedulerx-agent.yaml。SchedulerX會以單獨的Pod啟動應用。流程和原理如下圖所示。

前提條件
已建立Kubernetes叢集(阿里雲Container ServiceACK叢集或自建Kubernetes叢集)。具體操作,請參見建立Kubernetes叢集。

步驟一:配置ServiceAccount
SchedulerX K8s任務依賴於ServiceAccount進行驗證與授權,且預設使用Namespace的SchedulerX ServiceAccount運行K8s任務。
在K8s叢集裡和對應的Namespace下,僅需運行一次schedulerx-serviceaccount.yaml。如果Namespace之間需要隔離,僅調度目標Namespace下的Pod或者Job,可運行如下YAML範例程式碼。
如果有跨Namespace調度的需求,需使用ClusterRole和ClusterRoleBinding。
步驟二:安裝schedulerx-agent.yaml
schedulerx-agent.yaml配置如下所示。
SchedulerX agent image變數說明
晶片架構 | 地區 | 說明 |
X86_64 | 中國地區 | registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64 |
中國境外 | schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-amd64 | |
ARM64 | 中國地區 | registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-arm64 |
中國境外 | schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-arm64 |
SchedulerX agent env變數說明
變數 | 說明 |
${SCHEDULERX_ENDPOINT} | 您部署應用的地區(Region)和對應的Endpoint,例如addr-sh-internal.edas.aliyun.com。更多資訊,請參見Endpoint列表。 |
${SCHEDULERX_NAMESPACE} | Namespace為命名空間ID,可以在SchedulerX控制台的命名空間頁面擷取。 |
${SCHEDULERX_GROUPID} | GroupId為應用ID,可以在SchedulerX控制台應用管理頁面擷取。 |
${SCHEDULERX_APPKEY} | AppKey為應用Key,可以在SchedulerX控制台應用管理頁面擷取。 |
部署Deployment完成後,如果可以在SchedulerX控制台應用管理頁面查看執行個體,表明接入成功。
方式二:通過helm包部署SchedulerX
前提條件
已建立Kubernetes叢集(阿里雲Container ServiceACK叢集或自建Kubernetes叢集)。具體操作,請參見建立Kubernetes叢集。
步驟一:下載SchedulerX helm
執行如下命令,下載SchedulerX helm包。
wget https://schedulerx2.oss-cn-hangzhou.aliyuncs.com/helm/schedulerxchart-2.0.0.tgz步驟二:安裝schedulerx helm包
在分布式任務調度平台擷取應用的接入參數。
登入分布式任務調度平台。
在頂部功能表列選擇地區。
在左側導覽列,單擊應用管理。
在應用管理頁面的操作列,單擊接入配置。在接入配置頁面左上方,選擇k8s。
執行如下安裝命令。
說明安裝命令的接入參數需要替換為目標應用的接入參數。
接入配置中的鏡像地址預設為公網中amd架構的鏡像。您需要根據自身機器所在的地區以及機器架構選擇合適的鏡像地址。
helm install schedulerxchart schedulerxchart-2.0.0.tgz \ --set SCHEDULERX_ENDPOINT=acm.aliyun.com\ ,SCHEDULERX_NAMESPACE=f856c3f8-a15c-4a7e-9b4e-f812a9f8****\ ,SCHEDULERX_GROUPID=k8s-test3\ ,SCHEDULERX_APPKEY=****\ ,SCHEDULERX_AGENT_IMAGE=registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64安裝過程截圖如下所示。

SchedulerX agent image變數說明
晶片架構
地區
說明
x86_64
中國地區
registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-amd64
中國境外
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-amd64
arm64
中國地區
registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:latest-arm64
中國境外
schedulerx-registry.ap-southeast-1.cr.aliyuncs.com/schedulerx/agent:latest-arm64
SchedulerX agent env變數說明
變數
說明
${SCHEDULERX_ENDPOINT}
您部署應用的地區(Region)和對應的Endpoint,例如addr-sh-internal.edas.aliyun.com。更多資訊,請參見Endpoint列表。
${SCHEDULERX_NAMESPACE}
Namespace為命名空間ID,可以在SchedulerX控制台的命名空間頁面擷取。

${SCHEDULERX_GROUPID}
GroupId為應用ID,可以在SchedulerX控制台應用管理頁面擷取。
${SCHEDULERX_APPKEY}
AppKey為應用Key,可以在SchedulerX控制台應用管理頁面擷取。
SCHEDULERX_AGENT_IMAGE
鏡像地址。
安裝完成後,可以通過SchedulerX控制台查看執行個體。
方式三:通過Java SDK部署SchedulerX
如果您的應用為Java應用,除K8s任務外,還需要調度Java程式,您可以使用Java SDK部署。SchedulerX和您的線上業務處於一個進程中。流程和原理如下圖所示。
前提條件
建立Kubernetes叢集(阿里雲Container ServiceACK叢集或自建Kubernetes叢集)。具體操作,請參見建立Kubernetes叢集。
接入SchedulerX
關於SDK接入,請參見Spring Boot應用接入SchedulerX。
使用K8s任務還需要依賴一個schedulerx-plugin-kubernetes,如下所示。
schedulerx2.version使用最新用戶端版本,更多資訊,請參見發布記錄。
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-spring-boot-starter</artifactId>
<version>${schedulerx2.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.schedulerx</groupId>
<artifactId>schedulerx2-plugin-kubernetes</artifactId>
<version>${schedulerx2-plugin-kubernetes.version}</version>
</dependency>後續步驟:建立K8s任務
運行以下指令碼時,您需要在任務管理頁面建立一個K8s任務。具體操作,請參見任務管理。
Shell指令碼
如果您想通過Pod運行Shell指令碼,您可以在任務管理頁面建立一個K8s任務,選擇資源類型為Shell-Script,使用預設鏡像busybox,或替換為您自建的鏡像。
單擊運行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-shell-{JobId}。
在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以查看Pod啟動並執行日誌。
Python指令碼
如果您想通過Pod運行Python指令碼,您可以在任務管理頁面建立一個K8s任務,選擇資源類型為Python-Script,使用預設鏡像Python,或替換為您自建的鏡像。
單擊運行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-python-{JobId}。
在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。
PHP指令碼
如果您想通過Pod運行PHP指令碼,您可以在任務管理頁面建立一個K8s任務,選擇資源類型為PHP-Script,使用預設鏡像php:7.4-cli,或替換為您自建的鏡像。
單擊運行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-php-{JobId}。
在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以查看Pod啟動並執行日誌。
Node.js指令碼
如果您想通過Pod運行Node.js指令碼,您可以在任務管理頁面建立一個K8s任務,選擇資源類型為Nodejs-Script,使用預設鏡像node:16,或替換為您自建的鏡像。
單擊運行一次,在Kubernetes叢集中可以看到Pod啟動,Pod名稱為schedulerx-node-{JobId}。
在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。
Job-YAML
通過SchedulerX也可以運行K8s原生的Job。您可以在任務管理頁面建立一個K8s任務,選擇資源類型為Job-YAML。
單擊運行一次,在Kubernetes叢集中可以看到Job和Pod啟動成功。
在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。
CronJob-YAML
通過SchedulerX也可以運行K8s原生的CronJob。您可以在任務管理頁面建立一個K8s任務,資源類型選擇CronJob-YAML。

單擊運行一次,在任務執行個體記錄頁面可以看到Pod啟動成功。

在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。

Pod-YAML
通過SchedulerX也可以運行K8s原生的Pod。您可以在任務管理頁面建立一個K8s任務,資源類型選擇Pod-YAML。
單擊運行一次,在Kubernetes叢集中可以看到Pod啟動成功。
在SchedulerX控制台任務管理頁面可以查詢歷史執行記錄,也可以看到Pod啟動並執行日誌。
通過SchedulerX運行K8s Pod時,有如下注意事項。
免運行周期較長的Pod,例如Web應用,一旦啟動永遠不會結束。
建議將重啟原則設定成Never,否則Pod會不斷重啟。