# Schedulerx正式登陆Ali-k8s应用目录

简介

分布式任务调度 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。

三者的关系就是任务只能调度到对应分组客户端,比如我们创建分组group-sample,在该分组下创建任务job-sample,同时配置所属分组为group-sample来启动客户端agent1, agent2, agent3,那么job-sample就会调度到agent1, agent2, agent3上面运行。

更多概念见名词解释。

创建分组

CRD信息

ack-schedulerx提供CRD创建分组,信息如下:

GVK信息

group,version,kind信息如下:

  • apiVersion:schedulerx.alibabacloud.com/v1alpha1
  • kind: XGroup

spec信息

参数名类型默认值是否必填说明
appNamestring必填应用名,用户自定义,用于后续管理

例子

创建xgroup.yaml文件,包含以下内容:

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表示创建成功,此时可以登录应用分组管理控制台查看分组创建情况:

注意事项

  • 分组下如果任务数不为0,或者客户端数量不为0,无法删除分组;
  • 分组一旦创建,不允许更新,如果需要更新请删除后创建;

创建/更新/删除任务

CRD信息

ack-schedulerx提供CRD创建/更新/删除任务,创建和更新都是apply自定义资源,删除就是删除该资源,CRD信息如下:

GVK信息

group,version,kind信息如下:

  • apiVersion:schedulerx.alibabacloud.com/v1alpha1
  • kind: XCronJob

spec信息

参数名类型默认值是否必填说明
groupstring该任务所属分组名
jobTypestringjava任务类型,指实现任务的编程语言,当前支持 java, python, shell, go
jobProcessorstring否(有条件)任务实现全限定类名,如果jobType == java, 该字段必填
contentstring否(有条件)任务实现代码,如果jobType != java,该 字段必填
executeModestringstandalone任务执行模式,当前支持standalone, broadcast,  parallel, grid, batch,具体意思见执行模式文档,demo程序见
descriptionstring任务描述
timeTypeint1任务调度表达式类型,当前支持cron(1),fix_rate(3), second_delay(4)
timeExpressionstring任务调度表达式,比如: cron: 0 0 2 ? 要确保频率大于分钟级; fix_rate: 30(>0) 单位是s, 每30s运行一次; second_delay: 2(1-60) 单位是s, 上次运行结束后延迟2s运行下次
parametersstring任务参数,可以在任务运行时从上下文获取
maxConcurrencyint1最大同时运行任务实例数,默认是1,超过该并发度的调度实例会被忽略
retryMaxAttemptsint0失败重试次数,默认为0,不重置
retryIntervalint30失败重试间隔,单位s,默认30s

例子

创建xcronjob.yaml文件,包含以下内容:

apiVersion: schedulerx.alibabacloud.com/v1alpha1
kind: XCronJob
metadata:name: xcronjob-sample
spec:group: xgroup-samplejobType: javajobProcessor: processor.SimpleJobProcessorexecuteMode: standalonetimeExpression: 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:- 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表示创建成功,此时可以登录任务管理控制台查看任务创建情况,jobId可以方便后续在控制台进行任务和执行历史的搜索:

创建/更新/删除客户端

CRD信息

ack-schedulerx提供CRD创建/更新/删除客户端,创建和更新都是apply自定义资源,删除就是删除该资源,CRD信息如下:

GVK信息

group,version,kind信息如下:

  • apiVersion:schedulerx.alibabacloud.com/v1alpha1
  • kind: XAgentPool

spec信息

参数名类型默认值是否必填说明
groupstring该任务所属分组名
replicasint执行器个数
templatePodSpec任务执行器Pod模板

客户端开发

程序开发

开发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 {@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"]

为方便大家快速体验,我们已经将例子中的镜像上传供大家使用:

registry.cn-shanghai.aliyuncs.com/schedulerx/demo:latest

例子

创建xagentpool.yaml文件,包含以下内容:

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是刚刚创建的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: 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表示创建成功,实际上,每个agentPool的创建都会在相同命名空间下创建名为[agentPoolName]-deployment的Deployment,可以自行查看,除此之外可以登录应用分组管理控制台查看执行器启动情况,是否正常连接到schedulerx客户端,可以看到已经正常启动两个客户端:

卸载SchedulerX任务调度组件

容器服务控制台左侧导航栏中“应用 > 发布”菜单,选择Helm标签页,找到发布名称是ack-schedulerx的数据,点击对应的删除即可,有两点注意一下:

  • 注意在删除之前请确保集群内的所有XGroup,XCronJob,XAgentPool类型资源都已经删除完毕,否则无法删除CRDs,导致下次安装出现问题。
  • XGroup删除之后,对应的schedulerx应用分组不会自动删除,需要用户到应用分组管理控制台手动删除。

更多

Schedulerx还支持报警,工作流调度,运行实例查看,更多功能请查看Schedulerx控制台使用文档,登录Schedulerx控制台进行配置。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刚刚,阿里巴巴小程序生态联盟重磅启动

9月27日下午&#xff0c;阿里巴巴小程序繁星计划峰会作为杭州云栖大会的压轴好戏&#xff0c;在云栖小镇国际会展中心迎来千余位商家、合作伙伴、个人开发者和行业专家。峰会以“小程序、大生态”为题&#xff0c;发布了阿里巴巴小程序繁星计划补贴的更多细节方案&#xff0c;并…

因为一个跨域请求,我差点丢了饭碗

来源 | 编程技术宇宙责编 | 王晓曼封图 | CSDN下载自视觉中国浏览器基本原理我叫小风&#xff0c;是Windows帝国一个普通的上班族。今天&#xff0c;我入职了一家浏览器公司&#xff0c;公司的主营业务是为人类提供Internet上网服务&#xff0c;我的岗位是负责执行JavaScript代…

MongoDB BI Connector 实战指南

MongoDB 使用 BI Connector 来支持 BI 组件直接使用 SQL 或 ODBC 数据源方式直接访问 MongoDB&#xff0c;在早期 MongoDB 直接使用 Postgresql FDW 来实现 SQL 到 MQL 的转换&#xff0c;后来实现更加轻量级的 mongosqld 来支持 BI 工具的连接。 安装 BI Connector 参考 Inst…

基于Topic消息路由的M2M设备间通信Node JS SDK 示例

概述 M2M&#xff08;即Machine-to-Machine&#xff09;是一种端对端通信技术。本章节以Node JS SDK为例&#xff0c;使用基于Topic消息路由的M2M设备间通信&#xff0c;主要介绍如何基于物联网平台构建一个M2M设备间通信架构。 实验步骤 第一部分&#xff1a;配置相关 1、产品…

8 种架构设计模式优缺点大曝光 | 原力计划

作者 | 程序员Tony责编 | 王晓曼出品 | CSDN博客什么是架构我想这个问题&#xff0c;十个人回答得有十一个答案&#xff0c;因为另外的那一个是大家妥协的结果&#xff0c;哈哈&#xff0c;我理解&#xff0c;架构就是骨架。人类的身体的支撑是主要由骨架来承担的&#xff0c;然…

企业实战_06_MyCat 常用的分片算法

接上一篇&#xff1a;企业实战_05_MyCat用户密码加密 https://gblfy.blog.csdn.net/article/details/100056536 下一篇&#xff1a;企业实战_07_MyCat 搭建Mysql 一主一从复制环境 https://gblfy.blog.csdn.net/article/details/118640210

数据库OceanBase创始人阳振坤:通关TPC-C到底有多难?

自从蚂蚁金服自研数据库OceanBase获得TPC-C测试第一名后&#xff0c;引起了行业内外大量关注&#xff0c;我们衷心的感谢大家对OceanBase的支持与厚爱&#xff0c;也虚心听取外界的意见和建议。为了让大家更好的了解测试的技术细节&#xff0c;我们特意邀请了OceanBase的核心研…

为啥程序员下班后只关显示器从不关电脑?

你下班时是不是只将显示器一关&#xff0c;揣上手机就走了&#xff1f;曾有安保人员晚上来办公室巡查时问&#xff0c;为什么这些人不关机就下班呢&#xff1f;因为等一切工具准备就绪后&#xff0c;半个小时已经过去了。你知道程序员的时薪有多贵吗&#xff1f;效率多高吗&…

从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?

阿里妹导读&#xff1a;从十余年前的各种分布式系统研发到现在的容器云&#xff0c;从支撑原有业务到孵化各个新业务&#xff0c;企业的发展离不开统一的、与时俱进的技术架构。本篇文章从企业分布式应用架构层面介绍了云原生计算架构带来的变化&#xff0c;希望能够帮助更多企…

那些年,我们见过的 Java 服务端“问题”

导读 明代著名的心学集大成者王阳明先生在《传习录》中有云&#xff1a; 道无精粗&#xff0c;人之所见有精粗。如这一间房&#xff0c;人初进来&#xff0c;只见一个大规模如此。处久&#xff0c;便柱壁之类&#xff0c;一一看得明白。再久&#xff0c;如柱上有些文藻&#x…

中兴通讯uSmart云电脑,开启安全办公新时代

2020年春天&#xff0c;以5G、人工智能、云计算为代表的“新基建”蔚然成风&#xff0c;着眼国家数字经济体系建设&#xff0c;打造数字经济体系底座的“新基建”&#xff0c;无疑成为中国经济整体应对未来发展的核心方案。可以说&#xff0c;没有任何一个时期比现在更能够彰显…

阿里张磊:云计算生态价值点正迅速聚焦到“应用”上

导读&#xff1a;云原生不再只是基础设施的开发和运维人员的关注点&#xff0c;在应用交付领域小组成立之后&#xff0c;CNCF 基金会正在同应用开发和应用运维人员更紧密的联系在一起。 云原生的理念如今正如火如荼。它不仅仅是一种技术&#xff0c;更是社区基于对云的思考&…

SpringBoot 整合 Spring Cloud Alibaba Nacos 连通性+负载均衡

文章目录一、整合版本说明1. 毕业版本依赖关系(推荐使用)2. 组件版本关系3. 演示版本二、整合实战2.1. 聚合模块设计2.2. 创建聚合parent2.3. 依次创建子项目三、子模块配置3.1. 订单模块3.2. 产品模块3.3. 用户模块3.4. 扣库存模块3.5. 购物车模块四、测试案例4.1. 订单模块4.…

使用dubbo后尽量不用要@Service可能引起冲突

如下有几个包都含有Service dubbo最新版本2.7.8&#xff0c;已经把Service换成DubboService 示例实现类 package com.dubboprovider.service;import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Component;//zookeeper 服务注…

面试中遇到这 3 个SQL问题,最容易掉坑里!

作者 | Nathan R译者 | 天道酬勤&#xff0c;责编 | Carol封图 | CSDN下载自视觉中国在本文中&#xff0c;作者将介绍来自3个在技术面试中的真实的SQL问题&#xff0c;这些问题都是在实际公司进行技术筛选时提出的。最常见的读者问题&#xff1a;我应该如何准备SQL面试&#xf…

云原生数据库POLARDB专场“硬核”解析

POLARDB是阿里巴巴自主研发的云原生关系型数据库&#xff0c;目前兼容三种数据库引擎&#xff1a;MySQL、PostgreSQL、Oracle。POLARDB的计算能力最高可扩展至1000核以上&#xff0c;存储容量可达100TB。 POLARDB融合了商业数据库稳定、可靠、高性能的特征&#xff0c;同时具有…

K8s 从懵圈到熟练 – 集群网络详解

导读&#xff1a;阿里云 K8S 集群网络目前有两种方案&#xff1a;一种是 flannel 方案&#xff1b;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似&#xff0c;不同的地方在于 terway 支持 Pod 弹性网卡&#xff0c;以及 NetworkPolicy 功能。本…

使用dubbo后尽量不用要@Reference可能引起冲突

使用dubbo后尽量不用要Reference可能引起冲突 dubbo最新版本2.7.8&#xff0c;已经把Reference换成DubboReference

年薪高达30万,人才缺口40万,这个神仙职业今年太火了!

我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0…

不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式

出身豪门、大厂背书的 Kubernetes 项目自 2014 年 6 月开源以来&#xff0c;在众多厂商和开源爱好者的共同努力下迅速崛起&#xff0c;时至今日已成长为容器管理领域的事实标准。凭借超前的设计理念、开放的参与门槛、国内外大厂和开发者的大力支持&#xff0c;它的成功不言而喻…