通过容器服务sidecar方式接入定时任务SchedulerX

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: SchedulerX是阿里巴巴自研的一站式分布式任务调度平台,通过该文章,不需要对业务和镜像进行改造,只需要在Kubernetes的deployment文件(Pod、Deployment、StatefulSet、Job等都支持)中新增一个sidecar配置,就可以将定时任务托管到SchedulerX平台,拥有白屏运维、可视化和监控报警能力。

背景信息

SchedulerX是阿里巴巴自研的一站式分布式任务调度平台(兼容开源XXL-JOB/ElasticJob),支持Cron定时、一次性任务、任务编排、分布式跑批,具有高可用、可视化、可运维、低延时等能力。自带日志服务、监控大盘、短信报警等企业级服务。


通过该文章,不需要对业务和镜像进行改造,只需要在Kubernetes的deployment文件(Pod、Deployment、StatefulSet、Job等都支持)中新增一个sidecar配置,就可以将定时任务托管到SchedulerX平台,拥有白屏运维、可视化和监控报警能力,比如:

  • 批量运维:在SchedulerX控制台编辑shell脚本,定时广播所有pod,执行shell脚本(比如清理业务日志),在控制台查看运行结果。
  • 业务幂等:在SchedulerX控制台编辑python脚本,每小时幂等调度一个pod执行脚本,清理数据库历史数据。
  • 业务安全:想要定时调度业务的http服务,不需要将业务的http服务不会暴露给公网,只需要在SchedulerX的控制台编辑http脚本(比如"curl 127.0.0.1/hello"),会自动调度某个pod内的该http服务。
  • 监控告警:在SchedulerX控制台编辑python脚本,每分钟调度一个pod执行脚本,如果执行失败,发送短信/电话/钉钉/邮件告警。


接入原理

通过sidecar接入schedulerx-agent的原理如下图

每个pod中,都会有一个schedulerx-agent的容器,和业务容器在同一个pod中。schedulerx-agent会和任务调度SchedulerX服务端进行通信。SchedulerX服务端进行定时任务的调度和路由分发,决定分给某个/某些pod中的schedulerx-agent,schedulerx-agent收到调度命令,再去业务容器中执行对应的任务。


前提条件


配置sidecar

登录你的Kubernetes集群,编辑deployment,增加schedulerx-agent的sidecar配置,比如

apiVersion: apps/v1
kind: Deployment
metadata:  name: hello-schedulerx-sidecar-demo
  labels:    app: hello-schedulerx-sidecar-demo
spec:  replicas: 1  selector:    matchLabels:      app: hello-schedulerx-sidecar-demo
  template:    metadata:      labels:        app: hello-schedulerx-sidecar-demo
    spec:      containers:# 主容器配置      - name: node-demo
        image: registry.cn-hangzhou.aliyuncs.com/armon/hellodemo:0.0.1-amd64
        resources:          limits:            cpu: 500m
            memory: 128Mi
          requests:            cpu: 500m
            memory: 128Mi
        ports:        - containerPort: 8088# schedulerx-agent sidecar配置        - name: schedulerx-agent
        image: registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:1.4.2-amd64
        imagePullPolicy: Always
        resources:          limits:            cpu: 200m
          requests:            cpu: 200m
        env:          - name: "SCHEDULERX_ENDPOINT"            value: "${SCHEDULERX_ENDPOINT}"          - name: "SCHEDULERX_NAMESPACE"            value: "${SCHEDULERX_NAMESPACE}"          - name: "SCHEDULERX_GROUPID"            value: "${SCHEDULERX_GROUPID}"          - name: "SCHEDULERX_APPKEY"            value: "${SCHEDULERX_APPKEY}"          - name: "SCHEDULERX_STARTER_MODE"            value: "sidecar"        livenessProbe:           exec:             command: ["/bin/bash","/root/health.sh"]          timeoutSeconds: 30          initialDelaySeconds: 30

注:

  • deployment.yaml和node-demo镜像,可以参考demo
  • 当前schedulerx-agent需要至少300m内存,持续优化中。


schedulerx agent image变量说明

芯片架构

区域

说明

x86_64

公网

registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:1.4.2-amd64

阿里云vpc

registry-vpc.{regionId}.aliyuncs.com/schedulerx/agent:1.4.2-amd64

arm64

公网

registry.cn-hangzhou.aliyuncs.com/schedulerx/agent:1.4.2-arm64

阿里云vpc

registry-vpc.{regionId}.aliyuncs.com/schedulerx/agent:1.4.2-arm64


schedulerx agent env 变量说明

变量

说明

${SCHEDULERX_ENDPOINT}

您部署应用的地域(Region)和对应的Endpoint。详情请参见Endpoint列表。比如addr-sh-internal.edas.aliyun.com

${SCHEDULERX_NAMESPACE}

namespace为命名空间ID,可以在控制台命名空间页面获取

${SCHEDULERX_GROUPID}

groupId为应用ID,可以在控制台应用管理页面获取

${SCHEDULERX_APPKEY}

appKey为应用key,可以在控制台应用管理页面获取


接入验证

  1. 阿里云容器服务Kubernetes中创建一个无状态deployment

创建完成后,会看到有两个镜像,其中一个是业务主容器的镜像,另一个是scheudulerx-agent的sidecar镜像。


  1. 接入成功验证

如果配置正确,在schedulerx控制台可以看到实例数


点击“查看实例”,可以看到接入方式是sidecar


  1. 如果接入失败,查看pod日志

阿里云容器服务Kubernetes,可以直接在控制台选中Container=schedulerx-agent来查看日志,比如:


非阿里云Kubernetes集群,可以通过命令行查看日志,比如:


任务测试

shell任务

  1. 在SchedulerX控制台任务管理界面,创建任务,任务类型选择“shell”,执行模式选择“广播运行”,配置每分钟定时调度:

注:广播运行表示每次广播所有pod运行任务。


shell脚本参考如下,“exit 0”表示任务执行成功,“exit 1”表示任务执行失败

echo$0echo$1exit0
  1. 可以手动运行一次,查看历史记录


  1. 在任务历史记录中,查看任务实例详情,可以看到该shell脚本广播所有pod执行脚本成功


  1. 在任务历史记录中,查看日志,也直接在控制台看到所有pod执行该shell脚本的输出结果


python任务

  1. 在SchedulerX控制台任务管理界面,创建任务,任务类型选择“python”,执行模式选择“单机运行”,配置每分钟定时调度:

注:单机运行表示每次会随机选一个pod运行任务。


python脚本如下:

importsysprint('Hello World, python!')
a=int(sys.argv[1])
b=int(sys.argv[2])
print('a='+str(a))
print('b='+str(b))
c=a+bprint('c='+str(c))
  1. 单机运行,通过查看历史记录,可以在任务实例列表,查看每次调度到哪台pod上


  1. 通过日志服务,可以查看python脚本的执行结果


http任务

  1. 前提

如果你的应用是非Java应用,可以将你的定时任务业务封装成http接口,通过schedulerx sidecar定时调度你的http接口。比如本文章中主业务容器“node-demo”暴露了一个http接口

  1. 在SchedulerX控制台任务管理界面,创建任务,任务类型选择“shell”,执行模式选择“单机运行”,配置每分钟定时调度:


shell脚本为:

curl 127.0.0.1:8088


  1. 单机运行,通过查看历史记录,可以在任务实例列表,查看每次调度到哪台pod上


  1. 通过日志服务,可以查看调用http服务的结果


相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
监控 API 容器
阿里云Kubernetes容器服务Istio实践之Sidecar自动注入
本文重点介绍在阿里云Kubernetes容器服务中如何启用或者禁用Sidecar自动注入,并分析自动注入Sidecar的原理机制。使用该自动注入能力,可以简化部署应用的逻辑。同时,阿里云Kubernetes容器服务也提供了可配置选型,让用户可以根据自己的需要配置是否启用该能力。
7830 0
|
2月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
4月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
65 4
|
4月前
|
人工智能 弹性计算 调度
阿里云容器服务 ACK 产品技术动态(202312)
容器服务 Kubernetes 版 ACK 【新功能】 Feature:支持基于机密虚拟机的 AI 模型推理保护 ACK 现已支持将基于 Intel® Trusted Domain Extension(Intel® TDX)技术的 ECS 实例加入 TDX 机密虚拟机计算节点池,使集群具备 TDX 机密计算能力,实现 AI 模型的可信推理和微调,保障模型数据的机密性与完整性。结合 PyTorch 与 Intel® AMX指令集,您可以在 32 核实例上实现秒级出图的推理能力。
421 1
|
4月前
|
人工智能 运维 Kubernetes
期待已久!阿里云容器服务 ACK AI 助手正式上线
期待已久!阿里云容器服务 ACK AI 助手正式上线
|
4月前
|
容器
阿里云容器服务 ACK 产品技术动态(202312)
阿里云容器服务 ACK 产品技术动态(202312)
|
5月前
|
存储 缓存 Kubernetes
阿里云容器服务助力万兴科技 AIGC 应用加速
阿里云容器服务助力万兴科技 AIGC 应用加速
|
5月前
|
容器
阿里云容器服务 ACK 产品技术动态(202311)
阿里云容器服务 ACK 产品技术动态(202311)
|
5月前
|
Kubernetes 容灾 Serverless
阿里云容器服务 ACK 产品技术动态(202311)
容器服务 Kubernetes 版 ACK 【新功能】 Feature:支持创建托管节点池时开启指定自动化运维功能 在创建或编辑托管节点池时,您可以选择开启节点故障自愈、kubelet 自动升级、CVE 自动修复等功能,以降低您的节点池运维管理压力。
429 0
|
28天前
|
Kubernetes Cloud Native 安全
高光回眸:阿里云容器服务如何全面助力精彩亚运
高光回眸:阿里云容器服务如何全面助力精彩亚运
65296 4

相关产品

  • 容器计算服务