如何在Docker Swarm集群中使用Prefect实现自定义节点任务调度
问题1:Prefect是否原生支持Docker Swarm,或是有相关的试验性适配方案?
Prefect官方目前没有原生支持Docker Swarm的集成方案,也没有公开的试验性适配版本。官方原生支持的容器编排调度器只有Kubernetes,针对Swarm的适配需求需要基于Prefect的自定义基础设施能力自行实现。
问题2:实现Prefect与Docker Swarm集成的最优方案是什么?
优先选择Prefect自定义工作池+自定义worker的适配方案,可实现最高的灵活性,完整满足带标签节点定向调度的需求,实现路径如下:
- 首先部署Prefect Server/Cloud作为控制平面,确保所有Swarm节点与控制平面网络互通
- 在Swarm管理节点部署自定义Prefect worker:基于Swarm HTTP API开发worker逻辑,接收到flow运行请求后,识别任务携带的自定义标签,调用
docker service create命令或对应API生成Swarm服务,同时注入--constraint node.labels.${自定义标签}=${对应值}的亲和性规则,即可将任务调度到匹配标签的专属Swarm节点上 - 编写flow时给需要定向调度的任务/flow添加对应标签,提交后即可自动匹配对应节点运行
如果不想做二次开发,可以选择简化方案:按标签分组部署Prefect Docker worker,每组worker运行在对应标签的Swarm节点上,给每组worker打上专属标签,编写flow时指定对应worker标签即可实现定向调度,无需额外开发成本。
问题3:是否必须在Docker Swarm上层部署Dask集群才能完成适配,还是存在其他实现路径?
Dask集群不是必须部署的依赖项。Dask仅为Prefect支持的可选分布式执行层之一,只有当你存在单flow内多任务高并发调度、任务间高频数据共享这类复杂分布式计算需求时,才需要考虑引入Dask。普通的定时调度、指定节点运行的需求,用上述自定义worker、Docker worker按标签分组的方案都可以实现,完全不需要额外部署Dask集群。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

