专栏名称: CloudMan
云计算深度实践者;定期发布《每天5分钟玩转OpenStack》教程;让 OpenStack 不再难学!
目录
相关文章推荐
纪念币预约信息  ·  年后暴涨!这枚币实在太夸张了!! ·  3 小时前  
纪念币预约信息  ·  又火了!蛇年纪念币钞节后开涨!还有一次预约机会! ·  2 天前  
纪念币预约信息  ·  开始预约!文武财神双色铜章!超高浮雕! ·  3 天前  
纪念币预约信息  ·  每人20枚!蛇年纪念币钞,即将二次预约! ·  3 天前  
51好读  ›  专栏  ›  CloudMan

Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)

CloudMan  · 公众号  ·  · 2017-12-15 06:18

正文

第106篇

Label 控制 Service 的位置

上一节我们讨论了 Service 部署的两种模式 :global mode 和 replicated mode。无论采用 global mode 还是 replicated mode,副本运行在哪些节点都是由 Swarm 决定的,作为用户我们有没有可能精细控制 Service 的运行位置呢?

答案是:能,使用 label。

逻辑分两步:

  1. 为每个 node 定义 label。

  2. 设置 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 模式配合起来使用,比如只收集生产环境中容器的日志。







请到「今天看啥」查看全文