Drone.IO:如何以轮询方式在两个Agent/Worker间均匀分配任务?
解决Drone 0.8.5 Agent任务分配不均衡的问题
针对你遇到的两台Drone Agent任务分配不均(机器1独占所有任务)的情况,结合Drone 0.8.x的特性,这里有几个实用的方案来实现负载均衡,不需要取消并发:
1. 调整Agent轮询间隔,抵消本地Agent抢单优势
机器1的Agent和Server同机,网络延迟极低,所以会比机器2的Agent更快抢到任务。你可以通过调整轮询间隔来平衡这个差异:
- 给机器1的Agent设置更长的轮询间隔:
# 启动机器1的Agent时添加环境变量 DRONE_AGENT_POLL=5s /bin/drone-agent - 机器2的Agent保持默认轮询间隔(1s)即可。
这样机器2的Agent会更频繁地向Server请求任务,抵消掉机器1的网络优势,让任务分配更接近轮询效果。
2. 配置Agent权重,引导任务分配比例
Drone 0.8.x支持通过DRONE_AGENT_WEIGHT环境变量设置Agent的权重,Server会根据权重比例分配任务:
- 机器1的Agent保持默认权重(1):
DRONE_AGENT_WEIGHT=1 /bin/drone-agent - 给机器2的Agent设置相同或更高的权重(比如设为1即可实现1:1的分配倾向):
DRONE_AGENT_WEIGHT=1 /bin/drone-agent
如果机器2的硬件性能更好,还可以把权重设为2,让它承担更多任务,进一步优化负载分配。
3. 使用标签(Tags)实现严格的轮询式分配
如果需要完全精准的轮询控制,你可以给两台Agent设置不同标签,然后在流水线配置中交替指定任务运行节点:
- 给机器1的Agent添加标签:
DRONE_AGENT_TAGS=agent-1 /bin/drone-agent - 给机器2的Agent添加标签:
DRONE_AGENT_TAGS=agent-2 /bin/drone-agent - 在
.drone.yml中交替指定任务的运行节点:pipeline: build-task-1: image: golang commands: - go build node: agent-1 test-task-1: image: golang commands: - go test node: agent-2 # 后续任务继续交替指定agent-1和agent-2,实现严格轮询
这个方法需要修改流水线配置,但能完全掌控任务的分配目标,适合对负载均衡有严格要求的场景。
需要注意的是,Drone 0.8.x本身没有原生的严格轮询调度模式,但通过以上方法可以实现近似或可控的均衡负载效果。
内容的提问来源于stack exchange,提问作者RushPL
相关产品推荐
相关产品推荐

