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

简介: 简介 分布式任务调度 SchedulerX 是阿里巴巴基于 Akka 架构自研的的分布式任务调度平台,今天正式登陆阿里云容器服务Kubernetes应用目录,支持用户以云原生的方式获取定时、工作流任务编排、分布式批量调度等功能,同时具有高可靠、海量任务、秒级调度能力,Schedulerx详细信息请查看产品文档了解更多。

简介

分布式任务调度 SchedulerX 是阿里巴巴基于 Akka 架构自研的的分布式任务调度平台,今天正式登陆阿里云容器服务Kubernetes应用目录,支持用户以云原生的方式获取定时、工作流任务编排、分布式批量调度等功能,同时具有高可靠、海量任务、秒级调度能力,Schedulerx详细信息请查看产品文档了解更多。
本文将带您快速了解如何在阿里云容器服务Kubernetes上使用Schedulerx,让您在5min内以云原生的方式获得强大的任务调度能力。

前提条件

安装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信息

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

例子

创建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:
  - GroupCleanup
  generation: 1
  name: xgroup-sample
  namespace: default
  resourceVersion: "143176160"
  selfLink: /apis/schedulerx.alibabacloud.com/v1alpha1/namespaces/default/xgroups/xgroup-sample
  uid: e9a1fb81-da94-11e9-a156-be9f1a43fbb7
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中Ready为true表示创建成功,此时可以登录应用分组管理控制台查看分组创建情况:

1

注意事项

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

创建/更新/删除任务

CRD信息

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

GVK信息

group,version,kind信息如下:

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

spec信息

参数名 类型 默认值 是否必填 说明
group string 该任务所属分组名
jobType string java 任务类型,指实现任务的编程语言,当前支持 java, python, shell, go
jobProcessor string 否(有条件) 任务实现全限定类名,如果jobType == java, 该字段必填
content string 否(有条件) 任务实现代码,如果jobType != java,该 字段必填
executeMode string standalone 任务执行模式,当前支持standalone, broadcast,  parallel, grid, batch,具体意思见执行模式文档demo程序见
description string 任务描述
timeType int 1 任务调度表达式类型,当前支持cron(1),fix_rate(3), second_delay(4)
timeExpression string 任务调度表达式,比如: cron: 0 0 2 ? 要确保频率大于分钟级; fix_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

例子

创建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可以方便后续在控制台进行任务和执行历史的搜索:

2

创建/更新/删除客户端

CRD信息

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

GVK信息

group,version,kind信息如下:

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

spec信息

参数名 类型 默认值 是否必填 说明
group string 该任务所属分组名
replicas int 执行器个数
template PodSpec 任务执行器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 {
    @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客户端,可以看到已经正常启动两个客户端:

3

卸载SchedulerX任务调度组件

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

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

更多

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
38 4
|
3月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
34 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
92 0
|
3天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
10 4
|
4天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
14 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
15天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
11 0
|
26天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
27天前
|
人工智能 自然语言处理 Kubernetes
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
57 0
|
2月前
|
JavaScript NoSQL Redis
深入浅出:使用 Docker 容器化部署 Node.js 应用
在当今快速发展的软件开发领域,Docker 作为一种开源的容器化技术,已经成为了提高应用部署效率、实现环境一致性和便于维护的关键工具。本文将通过一个简单的 Node.js 应用示例,引导读者从零开始学习如何使用 Docker 容器化技术来部署应用。我们不仅会介绍 Docker 的基本概念和操作,还会探讨如何构建高效的 Docker 镜像,并通过 Docker Compose 管理多容器应用。此外,文章还将涉及到一些最佳实践,帮助读者更好地理解和应用 Docker 在日常开发和部署中的强大功能。
50 0

推荐镜像

更多