max_replicas_per_node是否会限制update_config的parallelism参数?
结论
你的猜测完全正确。max_replicas_per_node是Swarm调度器的硬限制,绝对不允许单个节点上同服务的运行副本数超过该阈值。你采用start-first更新策略+parallelism: 2的配置时,Swarm需要先启动2个新版本副本,再销毁旧版本副本,但当前集群只有1个可用节点,旧版本副本已经占用了该节点的配额,新副本无节点可调度,因此一直处于Pending状态。
方案说明
首先明确客观限制:当集群可用节点数 < 服务当前实际运行副本数时,start-first策略和max_replicas_per_node限制天然冲突,无法同时满足——因为新副本没有可用节点配额,必须先销毁旧副本释放资源才能启动新副本。
给出适配你全部需求的配置方案:
services: nodejs: deploy: replicas: 2 restart_policy: condition: any placement: max_replicas_per_node: 1 update_config: parallelism: 1 order: stop-first delay: 10s failure_action: rollback monitor: 20s
配置适配逻辑
- 满足单节点配额限制:
max_replicas_per_node: 1始终生效,不会出现单节点跑多个副本的情况,符合硬件成本要求。 - 满足自动扩容调度:
replicas: 2配置保留,Swarm调度器会持续检测集群节点资源,新节点加入后会自动将Pending的第二个副本调度到新节点运行,无需人工操作。 - 满足节点充足后的无中断更新:当集群扩容到2个及以上节点后,将
update_config调整为如下配置即可实现需求:
此时更新服务会先在两个节点分别启动新版本副本,健康检查通过后再销毁旧版本副本,全程无服务中断。update_config: parallelism: 2 order: start-first delay: 10s
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

