# Schedulerx正式登陆Ali-k8s应用目录
簡介
分布式任務調(diào)度 SchedulerX 是阿里巴巴基于 Akka 架構自研的的分布式任務調(diào)度平臺,今天正式登陸阿里云容器服務Kubernetes應用目錄,支持用戶以云原生的方式獲取定時、工作流任務編排、分布式批量調(diào)度等功能,同時具有高可靠、海量任務、秒級調(diào)度能力,Schedulerx詳細信息請查看產(chǎn)品文檔了解更多。
本文將帶您快速了解如何在阿里云容器服務Kubernetes上使用Schedulerx,讓您在5min內(nèi)以云原生的方式獲得強大的任務調(diào)度能力。
前提條件
- 創(chuàng)建Kubernetes集群
- 開通EDAS(免費)
- EDAS組件中心開通Schedulerx組件(免費)
安裝SchedulerX任務調(diào)度組件
- 登錄容器服務Kubernetes 版控制臺;
- 在左側導航欄選擇市場 > 應用目錄,在右側選中 ack-schedulerx;
-
進入ack-schedulerx安裝頁面,點擊參數(shù)標簽頁填寫以下參數(shù):
- controller.cluster_id(Kubernetes集群id)
-
controller.region_id(region id),目前支持的region如下:
- cn-shanghai
- cn-beijing
- cn-hangzhou
- cn-shenzhen
-
檢查安裝結果:
-
CRDs安裝正確:運行命令“kubectl get crd | grep schedulerx”,應該打印出3個CRD,分別是:
- xgroups.schedulerx.alibabacloud.com
- xcronjobs.schedulerx.alibabacloud.com
- xagentpools.schedulerx.alibabacloud.com
- Controller安裝正確:運行命令“kubectl get pods -n ?schedulerx-system”,應該有一個運行狀態(tài)為Running的pod:
-
核心概念
用戶使用Schedulerx需要理解3個概念:
分組
具有兩個功能:
- 客戶端的組織單位
- 任務的組織單位
任務
調(diào)度單位,用戶需要創(chuàng)建任務,配置所屬分組;
客戶端
任務執(zhí)行節(jié)點,用戶需要引入Schedulerx客戶端,實現(xiàn)對應Java任務處理接口,配置所屬分組啟動名為SchedulerxWorker的Agent。
三者的關系就是任務只能調(diào)度到對應分組的客戶端,比如我們創(chuàng)建分組group-sample,在該分組下創(chuàng)建任務job-sample,同時配置所屬分組為group-sample來啟動客戶端agent1, agent2, agent3,那么job-sample就會調(diào)度到agent1, agent2, agent3上面運行。
更多概念見名詞解釋。
創(chuàng)建分組
CRD信息
ack-schedulerx提供CRD創(chuàng)建分組,信息如下:
GVK信息
group,version,kind信息如下:
- apiVersion:schedulerx.alibabacloud.com/v1alpha1
- kind: XGroup
spec信息
| appName | string | 無 | 必填 | 應用名,用戶自定義,用于后續(xù)管理 |
例子
創(chuàng)建xgroup.yaml文件,包含以下內(nèi)容:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XGroup metadata:name: xgroup-sample spec:appName: ackApp在Kubernetes中運行以下命令:
kubectl apply -f xgroup.yaml查看xgroup資源:
kctl get xgroup xgroup-sample -o yaml打印結果如下:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XGroup metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: |{"apiVersion":"schedulerx.alibabacloud.com/v1alpha1","kind":"XGroup","metadata":{"annotations":{},"name":"xgroup-sample","namespace":"default"},"spec":{"appName":"ackApp"}}creationTimestamp: "2019-09-19T04:21:12Z"finalizers:- GroupCleanupgeneration: 1name: xgroup-samplenamespace: defaultresourceVersion: "143176160"selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xgroups/xgroup-sampleuid: e9a1fb81-da94-11e9-a156-be9f1a43fbb7 spec:appName: ackApp status:appGroupId: 283conditions:- lastTransitionTime: "2019-09-19T04:21:12Z"lastUpdateTime: "2019-09-19T04:21:12Z"reason: CreateGroupSuccessstatus: "True"type: Ready看到status中conditions中Ready為true表示創(chuàng)建成功,此時可以登錄應用分組管理控制臺查看分組創(chuàng)建情況:
注意事項
- 分組下如果任務數(shù)不為0,或者客戶端數(shù)量不為0,無法刪除分組;
- 分組一旦創(chuàng)建,不允許更新,如果需要更新請刪除后創(chuàng)建;
創(chuàng)建/更新/刪除任務
CRD信息
ack-schedulerx提供CRD創(chuàng)建/更新/刪除任務,創(chuàng)建和更新都是apply自定義資源,刪除就是刪除該資源,CRD信息如下:
GVK信息
group,version,kind信息如下:
- apiVersion:schedulerx.alibabacloud.com/v1alpha1
- kind: XCronJob
spec信息
| group | string | 無 | 是 | 該任務所屬分組名 |
| jobType | string | java | 否 | 任務類型,指實現(xiàn)任務的編程語言,當前支持 java, python, shell, go |
| jobProcessor | string | 無 | 否(有條件) | 任務實現(xiàn)全限定類名,如果jobType == java, 該字段必填 |
| content | string | 無 | 否(有條件) | 任務實現(xiàn)代碼,如果jobType != java,該 字段必填 |
| executeMode | string | standalone | 否 | 任務執(zhí)行模式,當前支持standalone, broadcast, ?parallel, grid, batch,具體意思見執(zhí)行模式文檔,demo程序見 |
| description | string | 無 | 否 | 任務描述 |
| timeType | int | 1 | 否 | 任務調(diào)度表達式類型,當前支持cron(1),fix_rate(3), second_delay(4) |
| timeExpression | string | 無 | 是 | 任務調(diào)度表達式,比如: cron: 0 0 2?? 要確保頻率大于分鐘級; fix_rate: 30(>0) 單位是s, 每30s運行一次; second_delay: 2(1-60) 單位是s, 上次運行結束后延遲2s運行下次 |
| parameters | string | 無 | 否 | 任務參數(shù),可以在任務運行時從上下文獲取 |
| maxConcurrency | int | 1 | 否 | 最大同時運行任務實例數(shù),默認是1,超過該并發(fā)度的調(diào)度實例會被忽略 |
| retryMaxAttempts | int | 0 | 否 | 失敗重試次數(shù),默認為0,不重置 |
| retryInterval | int | 30 | 否 | 失敗重試間隔,單位s,默認30s |
例子
創(chuàng)建xcronjob.yaml文件,包含以下內(nèi)容:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XCronJob metadata:name: xcronjob-sample spec:group: xgroup-samplejobType: javajobProcessor: processor.SimpleJobProcessorexecuteMode: standalonetimeExpression: 0 0 2 * * ?可以看到指定的group是剛剛創(chuàng)建的group,默認使用cron調(diào)度表達式,java任務類型,處理的接口類名是processor.SimpleJobProcessor,在Kubernetes中運行以下命令:
kubectl apply -f xcronjob.yaml查看xcronjob資源:
kctl get xcronjob xcronjob-sample -o yaml打印結果如下:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XCronJob metadata:creationTimestamp: "2019-09-19T06:33:13Z"finalizers:- JobCleanupgeneration: 1name: xcronjob-samplenamespace: defaultownerReferences:- apiVersion: schedulerx.alibabacloud.com/v1alpha1blockOwnerDeletion: truecontroller: truekind: XGroupname: xgroup-sampleuid: e9a1fb81-da94-11e9-a156-be9f1a43fbb7resourceVersion: "143570391"selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xcronjobs/xcronjob-sampleuid: 5b5e6e94-daa7-11e9-a76d-4af3350b44d3 spec:executeMode: standalonegroup: xgroup-samplejobProcessor: processor.SimpleJobProcessorjobType: javatimeExpression: 0 0 2 * * ? status:conditions:- lastTransitionTime: "2019-09-19T06:33:13Z"lastUpdateTime: "2019-09-19T06:33:14Z"reason: JobUpdateSuccessstatus: "True"type: ReadyjobId: 1304看到status中conditions中Ready為true表示創(chuàng)建成功,此時可以登錄任務管理控制臺查看任務創(chuàng)建情況,jobId可以方便后續(xù)在控制臺進行任務和執(zhí)行歷史的搜索:
創(chuàng)建/更新/刪除客戶端
CRD信息
ack-schedulerx提供CRD創(chuàng)建/更新/刪除客戶端,創(chuàng)建和更新都是apply自定義資源,刪除就是刪除該資源,CRD信息如下:
GVK信息
group,version,kind信息如下:
- apiVersion:schedulerx.alibabacloud.com/v1alpha1
- kind: XAgentPool
spec信息
| group | string | 無 | 是 | 該任務所屬分組名 |
| replicas | int | 無 | 是 | 執(zhí)行器個數(shù) |
| template | PodSpec | 無 | 是 | 任務執(zhí)行器Pod模板 |
客戶端開發(fā)
程序開發(fā)
開發(fā)Schedulerx客戶端主要做2件事:
- 初始化 SchedulerxWorker
- 新建實現(xiàn)任務調(diào)度的類
初始化SchedulerxWorker
針對不同應用,在初始化 SchedulerxWorker 的時候會有所區(qū)別,下面分別說明:
1、獨立Java和Spring應用
(1)在應用程序的pom.xml文件中添加 SchedulerxWorker 依賴
<dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-worker</artifactId> <version>${schedulerx2.version}</version> </dependency>其中${schedulerx2.version}版本見版本說明,使用ack-schedulerx需要至少使用1.0.9版本。
(2)初始化SchedulerxWorker或者作為一個bean注入
private static void initSchedulerxWorker() throws Exception {SchedulerxWorker schedulerxWorker = new SchedulerxWorker();schedulerxWorker.init();}2、Springboot應用
(1)在應用程序的pom.xml文件中添加 SchedulerxWorker 依賴
<dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx2-spring-boot-starter</artifactId> <version>${schedulerx2.version}</version> </dependency>其中${schedulerx2.version}版本見版本說明,使用ack-schedulerx需要至少使用1.0.9版本。
(2)初始化 SchedulerxWorker
新建實現(xiàn)任務調(diào)度的類
package processor;import com.alibaba.schedulerx.worker.domain.JobContext; import com.alibaba.schedulerx.worker.processor.JavaProcessor; import com.alibaba.schedulerx.worker.processor.ProcessResult;/*** @author yanxun on 2019/9/2.*/ public class SimpleJobProcessor extends JavaProcessor {@Overridepublic ProcessResult process(JobContext context) throws Exception {System.out.println("hello schedulerx2.0");return new ProcessResult(true);} }更多類型見Demo示例。
鏡像制作
打包上面程序,啟動Schedulerx即可,下面是一個Dockerfile例子:
FROM openjdk:8-jdk-alpine COPY ./target/schedulerx-k8s-demo-1.0-SNAPSHOT-spring-boot.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]為方便大家快速體驗,我們已經(jīng)將例子中的鏡像上傳供大家使用:
registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest例子
創(chuàng)建xagentpool.yaml文件,包含以下內(nèi)容:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XAgentPool metadata:name: xagentpool-sample spec:group: xgroup-samplereplicas: 2template:containers:- name: standaloneimage: registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest可以看到指定的group是剛剛創(chuàng)建的group,運行兩個執(zhí)行器,執(zhí)行器鏡像為image,該image即客戶端鏡像。
在Kubernetes中運行以下命令:
kubectl apply -f xagentpool.yaml查看xagentpool資源:
kctl get xagentpool xagentpool-sample -o yaml打印結果如下:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XAgentPool metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: |{"apiVersion":"schedulerx.alibabacloud.com/v1alpha1","kind":"XAgentPool","metadata":{"annotations":{},"name":"xagentpool-sample","namespace":"default"},"spec":{"group":"xgroup-sample","replicas":2,"template":{"containers":[{"image":"registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest","name":"standalone"}]}}}creationTimestamp: "2019-09-25T10:11:39Z"generation: 1name: xagentpool-samplenamespace: defaultownerReferences:- apiVersion: schedulerx.alibabacloud.com/v1alpha1blockOwnerDeletion: truecontroller: truekind: XGroupname: xgroup-sampleuid: c920a50b-df7c-11e9-a76d-4af3350b44d3resourceVersion: "170986882"selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xagentpools/xagentpool-sampleuid: dd83910f-df7c-11e9-a156-be9f1a43fbb7 spec:group: xgroup-samplereplicas: 2template:containers:- image: registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latestname: standaloneresources: {} status:conditions:- lastTransitionTime: "2019-09-25T10:11:40Z"lastUpdateTime: "2019-09-25T10:11:40Z"reason: update deployment sucessstatus: "True"type: Ready看到status中conditions中Ready為true表示創(chuàng)建成功,實際上,每個agentPool的創(chuàng)建都會在相同命名空間下創(chuàng)建名為[agentPoolName]-deployment的Deployment,可以自行查看,除此之外可以登錄應用分組管理控制臺查看執(zhí)行器啟動情況,是否正常連接到schedulerx客戶端,可以看到已經(jīng)正常啟動兩個客戶端:
卸載SchedulerX任務調(diào)度組件
容器服務控制臺左側導航欄中“應用 > 發(fā)布”菜單,選擇Helm標簽頁,找到發(fā)布名稱是ack-schedulerx的數(shù)據(jù),點擊對應的刪除即可,有兩點注意一下:
- 注意在刪除之前請確保集群內(nèi)的所有XGroup,XCronJob,XAgentPool類型資源都已經(jīng)刪除完畢,否則無法刪除CRDs,導致下次安裝出現(xiàn)問題。
- XGroup刪除之后,對應的schedulerx應用分組不會自動刪除,需要用戶到應用分組管理控制臺手動刪除。
更多
Schedulerx還支持報警,工作流調(diào)度,運行實例查看,更多功能請查看Schedulerx控制臺使用文檔,登錄Schedulerx控制臺進行配置。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結
以上是生活随笔為你收集整理的# Schedulerx正式登陆Ali-k8s应用目录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 业务系统 Over 阿里云性能压测的最佳
- 下一篇: 如何解决90%的问题?10位阿里大牛公布