简介
K8s Job 是 Kubernetes 中的一种资源,用来处理短周期的 Pod,相当于一次性任务,跑完就会把 Pod 销毁,不会一直占用资源,可以节省成本,提高资源利用率。
阿里任务调度 SchedulerX 和云原生结合,重磅推出可视化 K8s 任务,针对脚本使用者,屏蔽了容器服务的细节,不用构建镜像就可以让不熟悉容器的同学(比如运维和运营同学)玩转K8s Job,受益容器服务带来的降本增效福利。针对容器使用者,SchedulerX 不但完全兼容原生的 K8s Job,还能支持历史执行记录、日志服务、重跑任务、报警监控、可视化任务编排等能力,为企业级应用保驾护航。架构图如下:
特性一:快速开发 K8s 可视化脚本任务
Kubernetes 的 Job,常见用来做离线数据处理和运维工作(比如每天凌晨 2 点把 mysql 数据同步到大数据平台,每隔 1 小时更新一次 redis 缓存等),一般以脚本实现居多。这里以一个简单的场景举例子,来对比两种方案的差异。
Kubernetes 原生解决方案
K8s 调度的最小单位是 Pod,想跑脚本任务,需要提前把脚本打包到镜像里,然后在 YAML 文件中配置脚本命令,下面以通过 python 脚本查询数据库为例子:
- 编写 python 脚本 demo.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > %s" % (1000)
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income )
except:
print "Error: unable to fetch data"
# 关闭数据库连接
db.close()
- 编写 Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY demo.py /root/demo.py
CMD [ "python", "/root/demo.py" ]