如何使用Docker Swarm/Compose配置特定服务的部署策略
完全可以实现,通过Docker Swarm原生的调度规则就能满足该粒度的部署控制,无需额外工具支持,具体配置逻辑如下:
icecc-daemon全节点部署:将服务部署模式设置为global,该模式下Swarm会自动在集群所有满足调度条件的节点上各启动1个服务实例,后续有新节点加入集群时,也会自动在新节点上拉起对应实例。icecc-scheduler单实例优先部署到manager节点:使用默认的replicated部署模式,指定副本数为1,添加调度约束匹配Swarm manager节点自带的node.role == manager标签即可。如果需要实现“优先调度到manager、manager不可用时再调度到worker”的软亲和规则,可将硬约束改为调度偏好配置,实际生产场景下核心调度服务固定运行在manager节点稳定性更高。
注意:Docker Swarm Stack部署不支持跨节点读取本地build上下文构建镜像,你需要先将两个服务的镜像构建完成后推送到集群所有节点都可访问的镜像仓库,将原配置中的
build字段替换为对应的image镜像地址,否则worker节点会因拉取不到镜像启动失败。另外Swarm模式下服务重启策略需要配置在deploy层级下,顶层的restart配置不会被Swarm识别。
调整后可直接用于Stack部署的compose配置参考:
version: "3.8" services: icecc-scheduler: image: 替换为你的icecc-scheduler镜像实际地址 network_mode: host deploy: replicas: 1 placement: constraints: - node.role == manager restart_policy: condition: unless-stopped icecc-daemon: image: 替换为你的icecc-daemon镜像实际地址 network_mode: host deploy: mode: global restart_policy: condition: unless-stopped
配置完成后在manager节点执行docker stack deploy -c <你的compose文件名>.yaml icecc即可完成部署,可通过docker stack services icecc命令查看服务调度状态,确认实例分布符合预期。
内容的提问来源于stack exchange,提问作者WilliamB
相关产品推荐
相关产品推荐

