高效扩展:当Kubernetes遇到Celery
Posted 分布式实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高效扩展:当Kubernetes遇到Celery相关的知识,希望对你有一定的参考价值。
这是一个关于扩展性和使用痛点的软件架构故事,和其他好的技术故事一样,也是从点滴开始的。
在Panorays,我们帮助大量企业用户衡量供应商的安全地位,但是我更愿意看到集中式第三方安全管理。我们先从架构和流程开始。
开始时候,管理虚机都是通过Bash进行的,使用大量的脚本。
每个公司都有一个独特的虚机实例
每个虚机串行执行很多作业模拟黑客的业务
并行作业是通过启动更多虚机完成
采用Cron和Bash创建内部编排功能
并发在于公司层面而不是作业层面
进程不透明
服务器利用率太低
手工触发
这样的问题引发了Transport工具的兴起,Transport是一个动态工作流引擎,将工作流当做Kubernetes的作业调度。基于容器架构使得Transport灵活配置工作,又能有效扩展。根据工作流依存度,可能时提供最佳并发性,并提供完整RESTAPI实现自动管道管理。
当有新公司进入平台后,Transport的API会自动被触发,根据实现定义好的工作流情况,Transport将并行或串行将作业提交给Kubernetes执行。
Transport的作用就是用户定义工作流,Transport确保发生。但是定义工作流前又需要先定义作业。
我们的例子中,作业等同于运行Docker容器;一组作业叫做阶段,可以是串行或者并行;工作流是阶段的序列。在新环境下,我们可以在某些规则定义下,实现并行。
Transport调度一个分布式任务队列架构,架构中Transport把任务放入队列中,workers则从队列中取出任务并执行。此架构支持任务重试、设置超时、设置优先级和定时调度任务。任务开始、成功或者失败,Transport会往工作流中发送通知。
现在可以揭秘了,Transport提供服务端点来操作工作流,工作流被转译成Celery任务,我们使用celery链和组设置依赖性,Transport根据依赖性将任务转发到队列;另外celery workers则从队列中提取任务,并部署相应的Kubernetes任务。这样一个工作流根据作业依存性得以完成。
也可以添加为workers提供易用性的服务端点。同时运行worker数量设置了同时可以运行的作业数量。
新部署流程包括安全创建和将docker images推上Google Cloud Registry。
Transport将作业根据工作流转化成相关作业,而ConfigMap则定义作业版本。
Kubernetes则提供Docker容器底层运行引擎。
开始时我们用与初始作业一样的名字命名Kubernetes作业,他们有同一个唯一号。
这样我们发现了一些Kubernetes的命名限制:
第一个正则表达式用于确认名字只由字母和下划线及横杠构成,我们发现了第二个最长字符限制。
Airflow:这是一个很棒的方案,将Python文件渲染成代表工作流的DAGs。如果有一个运行前确定状态的静态工作流,推荐使用Airflow。Airflow的问题在于动态工作流,stackoverflow里有很多如何正确创建动态工作流的方法。因为改变了RESTAPI的请求方法,我们不需要生成动态工作流。
Google Pub/Sub:是谷歌pub/sub方案,因为需要在“作业端”修改大量的代码因此我们也没有采用它。
可以从更多的任务队列中找到替换项。
UI:添加UI来对正在运行和完成工作流进行监控和排错。
Generify : 如果想使Transport更加普适化,可以将其开源。
原文链接:https://hackernoon.com/https-medium-com-talperetz24-scaling-effectively-when-kubernetes-met-celery-e6abd7ce4fed
基于Kubernetes的DevOps实践培训将于2018年8月24日在北京开课,3天时间带你系统掌握Kubernetes
。本次培训包括:容器特性、镜像、网络;Kubernetes架构、核心组件、基本功能;Kubernetes设计理念、架构设计、基本功能、常用对象、设计原则;Kubernetes的数据库、运行时、网络、插件已经落地经验;微服务架构、组件、监控方案等,点击下方图片查看详情。
以上是关于高效扩展:当Kubernetes遇到Celery的主要内容,如果未能解决你的问题,请参考以下文章
OpenYurt v0.4.0 新特性发布:高效地管理边缘存储资源
Kubernetes———开篇
Kubernetes 动态作业扩展
Kubernetes应用管理器OpenKruise之CloneSet
当CNI遇上Kata-KataNative的CNI扩展
Kubernetes入门必学!!