通过容器服务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服务的结果


相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes NoSQL Redis
将 Sidecar 容器带入新的阶段
将 Sidecar 容器带入新的阶段
|
数据采集 Kubernetes 应用服务中间件
OpenKruise x iLogtail:管理可观测数据采集Sidecar容器最佳实践
在Kubernetes集群中使用Sidecar容器采集业务容器的可观测性数据是一种常见的数据采集部署方式,然而Sidecar容器对业务部署的侵入性和生命周期管理的复杂性使得这种部署模式的管理代价不仅高昂而且容易出错。本文对Sidecar采集容器管理的难点进行分析,使用OpenKruise提供的管理能力逐一解决,并以iLogtail为例给出基于OpenKruise管理可观测数据采集Sidecar容器的最佳实践。
OpenKruise x iLogtail:管理可观测数据采集Sidecar容器最佳实践
|
监控 Cloud Native Go
部署Envoy Sidecar代理:演示如何将Envoy作为Sidecar代理注入到应用容器中
部署Envoy Sidecar代理:演示如何将Envoy作为Sidecar代理注入到应用容器中
262 0
|
Kubernetes 容器 Perl
Linkerd 2.10—使用 Debug Sidecar,注入调试容器来捕获网络数据包
Linkerd 2.10—使用 Debug Sidecar,注入调试容器来捕获网络数据包
306 0
|
Kubernetes Cloud Native 测试技术
OpenKruise v0.8.0 核心能力解读:管理 Sidecar 容器的利器
OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目。它来自阿里巴巴多年来容器化、云原生的技术沉淀,是阿里内部生产环境大规模应用的基于 Kubernetes 之上的标准扩展组件,也是紧贴上游社区标准、适应互联网规模化场景的技术理念与最佳实践。
OpenKruise v0.8.0 核心能力解读:管理 Sidecar 容器的利器
|
Cloud Native NoSQL Redis
将 Sidecar 容器带入新的阶段
本文根据徐迪和张晓宇在 KubeCon NA 2019 大会分享整理。分享将会从以下几个方面进行切入:首先会简单介绍一下什么是 Sidecar 容器;其次,会分享几个阿里巴巴经济体的通用场景,以及他们是如何解决这些挑战的。
将 Sidecar 容器带入新的阶段
|
JSON Kubernetes NoSQL
将 Sidecar 容器带入新的阶段 | KubeCon NA 2019
本文主要介绍了什么是 Sidecar 容器,蚂蚁金服和阿里巴巴集团的通用场景,以及我们是如何解决这些挑战的。
将 Sidecar 容器带入新的阶段 | KubeCon NA 2019
|
容器
在阿里云容器服务中使用定时任务
阿里云容器服务提供高可用、分布式的定时任务服务
12884 0
|
监控 API 容器
阿里云Kubernetes容器服务Istio实践之Sidecar自动注入
本文重点介绍在阿里云Kubernetes容器服务中如何启用或者禁用Sidecar自动注入,并分析自动注入Sidecar的原理机制。使用该自动注入能力,可以简化部署应用的逻辑。同时,阿里云Kubernetes容器服务也提供了可配置选型,让用户可以根据自己的需要配置是否启用该能力。
8409 0

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版