ali开源项目,Schedulerx正式登陆Ali-k8s应用目录
ali开源项目,Schedulerx正式登陆Ali-k8s应用目录具有两个功能:分组安装SchedulerX任务调度组件核心概念用户使用Schedulerx需要理解3个概念:
简介
分布式任务调度 SchedulerX 是阿里巴巴基于 Akka 架构自研的的分布式任务调度平台,今天正式登陆阿里云容器服务Kubernetes应用目录,支持用户以云原生的方式获取定时、工作流任务编排、分布式批量调度等功能,同时具有高可靠、海量任务、秒级调度能力,Schedulerx详细信息请查看产品文档了解更多。
本文将带您快速了解如何在阿里云容器服务Kubernetes上使用Schedulerx,让您在5min内以云原生的方式获得强大的任务调度能力。
前提条件
- 创建Kubernetes集群
- 开通EDAS(免费)
- EDAS组件中心开通Schedulerx组件(免费)
安装SchedulerX任务调度组件
- 登录容器服务Kubernetes 版控制台;
- 在左侧导航栏选择市场 > 应用目录,在右侧选中 ack-schedulerx;
- 进入ack-schedulerx安装页面,点击参数标签页填写以下参数:
- 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”,应该有一个运行状态为Running的pod:
核心概念
用户使用Schedulerx需要理解3个概念:
分组
具有两个功能:
- 客户端的组织单位
- 任务的组织单位
任务
调度单位,用户需要创建任务,配置所属分组;
客户端
任务执行节点,用户需要引入Schedulerx客户端,实现对应Java任务处理接口,配置所属分组启动名为SchedulerxWorker的Agent。
注意事项
- 分组下如果任务数不为0,或者客户端数量不为0,无法删除分组;
- 分组一旦创建,不允许更新,如果需要更新请删除后创建;
创建/更新/删除任务
CRD信息
ack-schedulerx提供CRD创建/更新/删除任务,创建和更新都是apply自定义资源,删除就是删除该资源,CRD信息如下:
GVK信息
group,version,kind信息如下:
- apiVersion:schedulerx.alibabacloud.com/v1alpha1
- kind: XCronJob
spec信息
例子
创建xcronjob.yaml文件,包含以下内容:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XCronJob metadata: name: xcronjob-sample spec: group: xgroup-sample jobType: java jobProcessor: processor.SimpleJobProcessor executeMode: standalone timeExpression: 0 0 2 * * ?
可以看到指定的group是刚刚创建的group,默认使用cron调度表达式,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: - JobCleanup generation: 1 name: xcronjob-sample namespace: default ownerReferences: - apiVersion: schedulerx.alibabacloud.com/v1alpha1 blockOwnerDeletion: true controller: true kind: XGroup name: xgroup-sample uid: e9a1fb81-da94-11e9-a156-be9f1a43fbb7 resourceVersion: "143570391" selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xcronjobs/xcronjob-sample uid: 5b5e6e94-daa7-11e9-a76d-4af3350b44d3 spec: executeMode: standalone group: xgroup-sample jobProcessor: processor.SimpleJobProcessor jobType: java timeExpression: 0 0 2 * * ? status: conditions: - lastTransitionTime: "2019-09-19T06:33:13Z" lastUpdateTime: "2019-09-19T06:33:14Z" reason: JobUpdateSuccess status: "True" type: Ready jobId: 1304
看到status中conditions中Ready为true表示创建成功,此时可以登录任务管理控制台查看任务创建情况,jobId可以方便后续在控制台进行任务和执行历史的搜索:
创建/更新/删除客户端
CRD信息
ack-schedulerx提供CRD创建/更新/删除客户端,创建和更新都是apply自定义资源,删除就是删除该资源,CRD信息如下:
GVK信息
group,version,kind信息如下:
- apiVersion:schedulerx.alibabacloud.com/v1alpha1
- kind: XAgentPool
spec信息
客户端开发
程序开发
开发Schedulerx客户端主要做2件事:
- 初始化 SchedulerxWorker
- 新建实现任务调度的类
初始化SchedulerxWorker
针对不同应用,在初始化 SchedulerxWorker 的时候会有所区别,下面分别说明:
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
新建实现任务调度的类
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 { @Override public 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"]
为方便大家快速体验,我们已经将例子中的镜像上传供大家使用:
registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest
例子
创建xagentpool.yaml文件,包含以下内容:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XAgentPool metadata: name: xagentpool-sample spec: group: xgroup-sample replicas: 2 template: containers: - name: standalone image: registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest
可以看到指定的group是刚刚创建的group,运行两个执行器,执行器镜像为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: 1 name: xagentpool-sample namespace: default ownerReferences: - apiVersion: schedulerx.alibabacloud.com/v1alpha1 blockOwnerDeletion: true controller: true kind: XGroup name: xgroup-sample uid: c920a50b-df7c-11e9-a76d-4af3350b44d3 resourceVersion: "170986882" selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xagentpools/xagentpool-sample uid: dd83910f-df7c-11e9-a156-be9f1a43fbb7 spec: group: xgroup-sample replicas: 2 template: containers: - image: registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest name: standalone resources: {} status: conditions: - lastTransitionTime: "2019-09-25T10:11:40Z" lastUpdateTime: "2019-09-25T10:11:40Z" reason: update deployment sucess status: "True" type: Ready
看到status中conditions中Ready为true表示创建成功,实际上,每个agentPool的创建都会在相同命名空间下创建名为[agentPoolName]-deployment的Deployment,可以自行查看,除此之外可以登录应用分组管理控制台查看执行器启动情况,是否正常连接到schedulerx客户端,可以看到已经正常启动两个客户端:
卸载SchedulerX任务调度组件
容器服务控制台左侧导航栏中“应用 > 发布”菜单,选择Helm标签页,找到发布名称是ack-schedulerx的数据,点击对应的删除即可,有两点注意一下:
- 注意在删除之前请确保集群内的所有XGroup,XCronJob,XAgentPool类型资源都已经删除完毕,否则无法删除CRDs,导致下次安装出现问题。
- XGroup删除之后,对应的schedulerx应用分组不会自动删除,需要用户到应用分组管理控制台手动删除。
更多
Schedulerx还支持报警,工作流调度,运行实例查看,更多功能请查看Schedulerx控制台使用文档,登录Schedulerx控制台进行配置。
作者:黄晓萌