重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章给大家介绍如何用Label控制Service的位置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
站在用户的角度思考问题,与客户深入沟通,找到四子王网站设计与四子王网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站制作、成都外贸网站建设、企业官网、英文网站、手机端网站、网站推广、申请域名、雅安服务器托管、企业邮箱。业务覆盖四子王地区。
无论采用 global mode 还是 replicated mode,副本运行在哪些节点都是由 Swarm 决定的,作为用户我们有没有可能精细控制 Service 的运行位置呢?
答案是:能,使用 label。
逻辑分两步:
为每个 node 定义 label。
设置 service 运行在指定 label 的 node 上。
label 可以灵活描述 node 的属性,其形式是 key=value,用户可以任意指定,例如将 swarm-worker1
作为测试环境,为其添加 label env=test
:
docker node update --label-add env=test swarm-worker1
对应的,将 swarm-worker2
作为生产环境,添加 label env=prod
:
docker node update --label-add env=prod swarm-worker2
现在部署 service 到测试环境:
docker service create \ --constraint node.labels.env==test \ --replicas 3 \ --name my_web \ --publish 8080:80 \ httpd
--constraint node.labels.env==test
限制将 service 部署到 label=test 的 node,即 swarm-worker1
。从部署结果看,三个副本全部都运行在 swarm-worker1
上。
可以通过 docker service inspect
查看 --constraint
的设置:
更新 service,将其迁移到生产环境:
docker service update --constraint-rm node.labels.env==test my_web docker service update --constraint-add node.labels.env==prod my_web
删除并添加新的 constraint,设置 node.labels.env==prod
,最终所有副本都迁移到了 swarm-worker2
。
label 还可以跟 global 模式配合起来使用,比如只收集生产环境中容器的日志。
docker service create \ --mode global \ --constraint node.labels.env==prod \ --name logspout \ --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \ gliderlabs/logspout
只有 swarm-worker2
节点上才会运行 logspout。
关于如何用Label控制Service的位置就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。