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

简介:

上一节我们讨论了 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

544.png

对应的,将 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

545.png

--constraint node.labels.env==test 限制将 service 部署到 label=test 的 node,即 swarm-worker1。从部署结果看,三个副本全部都运行在 swarm-worker1 上。

可以通过 docker service inspect 查看 --constraint 的设置:

546.png

更新 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

547.png

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。

548.png

Label 就讨论到这里,下一节我们学习 Health Check。

书籍:

1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html



本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2050895

相关文章
|
缓存 开发者 CDN
CDN 刷新功能| 学习笔记
快速学习 CDN 刷新功能。
|
SQL 自然语言处理 监控
PostgreSQL插件汇总
一专多长的数据库——PostgreSQL
3414 0
|
12月前
|
存储 SQL 运维
《告别日志混乱!巧用rsyslog与journald优化系统日志管理》
系统日志是服务器运行状况的“黑匣子”,对运维至关重要。rsyslog与journald作为两大日志管理工具,各具特色:rsyslog功能强大,支持本地及远程日志处理与转发;journald采用二进制存储,支持结构化数据和元数据,提升查询效率。两者协作可实现日志的高效收集、分类与分析,优化系统监控与故障排查。掌握它们的配置与使用,能显著提升服务器运维效率,保障系统稳定运行。
435 19
|
7月前
|
人工智能 安全 架构师
开放、协同,2025 云栖大会“操作系统开源与 AI 进化分论坛”精彩回顾
唯有通过生态开放与技术共享,才能加速 AI 技术的普惠与产业化落地。
|
人工智能 算法 搜索推荐
从调研到交付,双钻设计模型如何贯穿整个设计流程?
2分钟带你了解双钻设计模型及其实操
800 2
从调研到交付,双钻设计模型如何贯穿整个设计流程?
|
流计算
电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)
电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)
927 0
|
JSON 运维 Kubernetes
|
机器学习/深度学习 人工智能 Rust
如何在AI中使用Rust
【9月更文挑战第4天】Rust 以其高性能、安全性和并发性在人工智能领域崭露头角。尽管 Python 和 R 仍为主流,Rust 的库生态系统及其独特特性使其成为需要高性能和内存安全的 AI 项目的理想选择。本文探讨 Rust 在 AI 中的应用,包括关键库(如 Candle、Linfa)和用例,并提供了一个简单的文档聚类项目示例。Rust 能够构建高效且安全的 AI 应用,是追求高性能和可靠性的开发者们的有力工具。
1066 12
|
存储 安全 Linux
在Linux中,日志文件通常存储在哪些目录?
在Linux中,日志文件通常存储在哪些目录?