前提条件

背景信息

使用SchedulerX需要理解以下3个概念:
  • 分组
    • 客户端的组织单位
    • 任务的组织单位
  • 任务:调度单位,需要创建任务,配置所属分组。
  • 客户端:任务执行节点,需要添加SchedulerX客户端,实现对应Java任务处理接口,配置所属分组启动名为SchedulerxWorker的Agent。

三者的关系为:任务只能调度到对应分组的客户端。例如创建了分组group-sample,在该分组下创建任务job-sample,同时配置所属分组为group-sample来启动客户端agent1、agent2和agent3,则调度任务job-sample就会被调度到客户端agent1、agent2和agent3上面运行。

关于SchedulerX的更多信息,请参见分布式任务调度 SchedulerX

在容器服务Kubernetes版中安装SchedulerX组件

  1. 登录容器服务控制台
  2. 在左侧导航栏选择市场 > 应用目录
  3. 应用目录页面搜索并单击ack-schedulerx
  4. ack-schedulerx页面右侧集群列表中选择集群,然后单击创建
    • 如果是在ACK购买的K8s集群,选择集群后,直接创建。安装 SchedulerX 组件
    • 如果是自建纳管到ACK的K8s集群,单击参数页签,设置参数controller.aliyun_acccessKey_secret_name
    说明 命名空间schedulerx-system,不可修改。

    安装SchedulerX组件大约需要2分钟,请耐心等待。

    创建成功后,会自动跳转到Helm 发布列表 - ack-schedulerx页面,检查安装结果。

    安装 SchedulerX 组件-结果验证

创建分组

  1. 创建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
    • spec信息
      参数名 类型 默认值 是否必填 说明
      appName string 必填 应用名,用户自定义,用于后续管理。
  2. 执行kubectl apply -f xgroup.yaml命令,创建任务分组。
    说明
    • 分组创建后,不允许更新。如果需要更新,请删除分组后重新创建。
    • 分组创建后,如果新建了任务或添加了客户端,即该分组下包含任务或客户端,则无法删除分组,需要先移除任务和客户端。
  3. 执行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下statusTrue,且typeReady ,则表示分组创建成功。

    也可以登录分布式任务调度平台,查看分组创建情况。

    应用管理-查看应用

创建任务

  1. 创建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
    • 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)。详情请参见CronFixed rateSecond 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。

  2. 执行kubectl apply -f xcronjob.yaml命令,创建任务。
  3. 执行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下statusTrue,且typeReady ,则表示任务创建成功。

    也可以登录分布式任务调度平台,查看任务创建情况。

    任务管理-查看任务

创建客户端

  1. 客户端接入SchedulerX。

    根据应用类型不同,客户端的接入方式也不同。

  2. 将客户端打包,并通过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 ),方便您体验、试用。

  3. 创建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
    • spec信息
      参数名 类型 默认值 是否必填 说明
      group string 该任务所属分组名。
      replicas int 执行器个数。
      workloadType string Deployment 执行器工作负载,默认是Deployment,可选值还有DaemonSet。
      template PodSpec 任务执行器Pod模板。

      通过示例可以看到指定的group是刚刚创建的xgroup-sample,运行两个执行器,执行器镜像为image,该image即客户端镜像。

  4. 执行kubectl apply -f xagentpool.yaml命令,创建客户端。
  5. 执行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下statusTrue,且typeReady ,则表示任务创建成功。

    实际上,每个agentPool的创建都会在相同命名空间下创建名为[agentPoolName]-deployment的Deployment或者[agentPoolName]-daemonset的DeamonSet,可以自行查看

    也可以登录分布式任务调度平台,查看客户端创建情况。

    应用管理-查看客户端数量

    单击查看实例,可以查看客户端实例的详细信息。

删除SchedulerX组件

当不再需要SchedulerX组件时,可以删除chedulerX组件。

说明
  • 在删除SchedulerX组件之前,请确保集群内的所有XGroup、XCronJob和XAgentPool类型资源都已经删除完毕,否则无法删除CRDs,并且会导致下次安装出现异常。
  • XGroup删除之后,对应的SchedulerX应用分组不会自动删除,需要登录分布式任务调度平台,手动删除。
  1. 登录容器服务控制台
  2. 在左侧导航栏选择应用 > 发布
  3. 发布页面ack-schedulerx操作列单击删除
  4. 删除应用对话框中单击确定