前提条件
- 创建Kubernetes专有版集群
- 开通SchedulerX(免费)
- 了解Kubernetes基本概念和操作,例如kubeconfig
背景信息
- 分组
- 客户端的组织单位
- 任务的组织单位
- 任务:调度单位,需要创建任务,配置所属分组。
- 客户端:任务执行节点,需要添加SchedulerX客户端,实现对应Java任务处理接口,配置所属分组启动名为SchedulerxWorker的Agent。
三者的关系为:任务只能调度到对应分组的客户端。例如创建了分组group-sample,在该分组下创建任务job-sample,同时配置所属分组为group-sample来启动客户端agent1、agent2和agent3,则调度任务job-sample就会被调度到客户端agent1、agent2和agent3上面运行。
关于SchedulerX的更多信息,请参见分布式任务调度 SchedulerX。
在容器服务Kubernetes版中安装SchedulerX组件
- 登录容器服务控制台。
- 在左侧导航栏选择市场 > 应用目录。
- 在应用目录页面搜索并单击ack-schedulerx。
- 在ack-schedulerx页面右侧集群列表中选择集群,然后单击创建。
- 如果是在ACK购买的K8s集群,选择集群后,直接创建。
- 如果是自建纳管到ACK的K8s集群,单击参数页签,设置参数controller.aliyun_acccessKey_secret_name。
说明 命名空间为schedulerx-system,不可修改。安装SchedulerX组件大约需要2分钟,请耐心等待。
创建成功后,会自动跳转到Helm 发布列表 - ack-schedulerx页面,检查安装结果。
- 如果是在ACK购买的K8s集群,选择集群后,直接创建。
创建分组
- 创建xgroup.yaml,设置相关参数。
xgroup.yaml示例如下:
apiVersion: schedulerx.alibabacloud.com/v1alpha1 kind: XGroup metadata: name: xgroup-sample spec: appName: ackApp
xgroup.yaml配置参数说明:
- GVK(Group、Version 和 Kind)信息
- apiVersion:格式为
<group>/<version>
,例如schedulerx.alibabacloud.com/v1alpha1
。 - kind: XGroup
- apiVersion:格式为
- spec信息
参数名 类型 默认值 是否必填 说明 appName string 无 必填 应用名,用户自定义,用于后续管理。
- GVK(Group、Version 和 Kind)信息
- 执行
kubectl apply -f xgroup.yaml
命令,创建任务分组。说明- 分组创建后,不允许更新。如果需要更新,请删除分组后重新创建。
- 分组创建后,如果新建了任务或添加了客户端,即该分组下包含任务或客户端,则无法删除分组,需要先移除任务和客户端。
- 执行
kctl get xgroup xgroup-sample -o yaml
命令,查看xgroup资源。打印结果如下:
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: - GroupCleanup generation: 1 name: xgroup-sample namespace: default resourceVersion: "143176160" selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xgroups/xgroup-sample uid: e9a1xxxx-xxxx-11e9-xxxx-be9f1a43xxxx spec: appName: ackApp status: appGroupId: 283 conditions: - lastTransitionTime: "2019-09-19T04:21:12Z" lastUpdateTime: "2019-09-19T04:21:12Z" reason: CreateGroupSuccess status: "True" type: Ready
status的conditions下status为True,且type为Ready ,则表示分组创建成功。
也可以登录分布式任务调度平台,查看分组创建情况。
创建任务
- 创建xcronjob.yaml,设置相关参数。
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 * * ?
xcronjob.yaml配置参数说明:
- GVK(Group、Version 和 Kind)信息
- apiVersion:格式为
<group>/<version>
,例如schedulerx.alibabacloud.com/v1alpha1
。 - kind: XCronJob
- apiVersion:格式为
- spec信息
参数名 类型 默认值 是否必填 说明 group string 无 是 该任务所属分组名。 jobType string java 否 任务类型,指实现任务的编程语言,当前支持Java、Python、Shell和Go。详情请参见调度。 jobProcessor string 无 否(有条件) 任务实现全限定类名,如果 jobType == java
, 该字段必填。content string 无 否(有条件) 任务实现代码,如果 jobType == java
,该字段必填。executeMode string standalone 否 任务执行模式,当前支持单击运行、广播运行、并行计算、内存网格、网格计算和分片运行。详情请参见产品功能。 description string 无 否 任务描述 timeType int 1 否 任务调度表达式类型,当前支持cron(1)、fix_rate(3)、second_delay(4)。详情请参见Cron、Fixed rate和Second delay。 timeExpression string 无 是 任务调度表达式,例如: - cron:
0 0 2 * * ?
要确保频率大于分钟级。 - fixed_rate:
30(>0)
,单位是s,每30s运行一次。 - second_delay:
2(1-60)
,单位是s, 上次运行结束后延迟2s再运行一次。
parameters string 无 否 任务参数,可以在任务运行时从上下文获取。 maxConcurrency int 1 否 最大同时运行任务实例数,默认为1。超过该并发度的调度实例会被忽略。 retryMaxAttempts int 0 否 失败重试次数,默认为0,不重置。 retryInterval int 30 否 失败重试间隔,单位s,默认为30s。 通过示例可以看到指定的group是刚刚创建的xgroup-sample,默认使用Cron调度表达式,Java任务类型,处理的接口类名为processor.SimpleJobProcessor。
- cron:
- GVK(Group、Version 和 Kind)信息
- 执行
kubectl apply -f xcronjob.yaml
命令,创建任务。 - 执行
kctl get xcronjob xcronjob-sample -o yaml
命令,查看xcronjob资源。打印结果如下:
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: e9a1xxxx-xxxx-11e9-xxxx-be9f1a43xxxx resourceVersion: "143570391" selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xcronjobs/xcronjob-sample uid: 5b5exxxx-daa7-xxxx-a76d-4af3xxxx44xx 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下status为True,且type为Ready ,则表示任务创建成功。
也可以登录分布式任务调度平台,查看任务创建情况。
创建客户端
- 客户端接入SchedulerX。
根据应用类型不同,客户端的接入方式也不同。
- Java应用:客户端接入详情请参见Java应用接入SchedulerX。
- Spring应用:客户端接入详情请参见Spring应用接入SchedulerX。
- Spring Boot应用:客户端接入详情请参见Spring Boot应用接入SchedulerX。
- 将客户端打包,并通过Dockerfile创建镜像,并上传到镜像仓库。
Dockfile示例如下:
FROM openjdk:8-jdk-alpine COPY ./target/schedulerx-k8s-demo-1.0-SNAPSHOT-spring-boot.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
SchedulerX提供了已经上传到镜像仓库的镜像Demo(
registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest
),方便您体验、试用。 - 创建xagentpool.yaml,设置相关参数。
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
xagentpool.yaml配置参数说明:
- GVK(Group、Version 和 Kind)信息
- apiVersion:格式为
<group>/<version>
,例如schedulerx.alibabacloud.com/v1alpha1
。 - kind: XGroup
- apiVersion:格式为
- spec信息
参数名 类型 默认值 是否必填 说明 group string 无 是 该任务所属分组名。 replicas int 无 是 执行器个数。 workloadType string Deployment 否 执行器工作负载,默认是Deployment,可选值还有DaemonSet。 template PodSpec 无 是 任务执行器Pod模板。 通过示例可以看到指定的group是刚刚创建的xgroup-sample,运行两个执行器,执行器镜像为image,该image即客户端镜像。
- GVK(Group、Version 和 Kind)信息
- 执行
kubectl apply -f xagentpool.yaml
命令,创建客户端。 - 执行
kctl get xagentpool xagentpool-sample -o yaml
命令,查看xagentpool资源。打印结果如下:
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: c920xxxx-df7c-xxxx-a76d-xxxx350bxxxx resourceVersion: "170986882" selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xagentpools/xagentpool-sample uid: dd83xxxx-df7c-xxxx-a156-xxxx1a43xxxx 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下status为True,且type为Ready ,则表示任务创建成功。
实际上,每个agentPool的创建都会在相同命名空间下创建名为
[agentPoolName]-deployment
的Deployment或者[agentPoolName]-daemonset
的DeamonSet,可以自行查看也可以登录分布式任务调度平台,查看客户端创建情况。
单击查看实例,可以查看客户端实例的详细信息。
删除SchedulerX组件
当不再需要SchedulerX组件时,可以删除chedulerX组件。
- 在删除SchedulerX组件之前,请确保集群内的所有XGroup、XCronJob和XAgentPool类型资源都已经删除完毕,否则无法删除CRDs,并且会导致下次安装出现异常。
- XGroup删除之后,对应的SchedulerX应用分组不会自动删除,需要登录分布式任务调度平台,手动删除。
- 登录容器服务控制台。
- 在左侧导航栏选择应用 > 发布。
- 在发布页面ack-schedulerx的操作列单击删除。
- 在删除应用对话框中单击确定。
在文档使用中是否遇到以下问题
更多建议
匿名提交