上一节我们讨论了 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
 
host01标记为测试环境,host02标记为线上环境
 
root@host03:~# docker node update --label-add env=test host01    #    将host01标记为测试环境
host01
 
root@host03:~# docker node inspect host01 --pretty
ID:            hvt2ez9e7zvqm2hz8nix1eke7
Labels:
- env=test
Hostname:                  host01
Joined at:                 2019-05-14 03:19:30.200301075 +0000 utc
Status:
State:            Ready
Availability:             Active
Address:        10.12.31.211
 
root@host03:~# docker node update --label-add env=prod host02    #    将host02标记为线上环境
host02
root@host03:~# docker node inspect host02 --pretty
ID:            asn5ufnogzkyqigk4mizatoer
Labels:
- env=prod
Hostname:                  host02
Joined at:                 2019-05-14 03:19:34.507855133 +0000 utc
Status:
State:            Ready
Availability:             Active
Address:        10.12.31.212
 
在测试环境创建Service my_web ,副本数 3
 
root@host03:~# docker service create --name my_web --replicas 3 --constraint node.labels.env==test --publish 80:80 httpd
addp6i8pm0msmamq6a4oc94py
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged
root@host03:~# docker service ps my_web    #    确认所有的副本都在测试环境的node上
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
63mta4uzj5kh        my_web.1            httpd:latest        host01              Running             Running 11 seconds ago                       
svynuplsq5l9        my_web.2            httpd:latest        host01              Running             Running 11 seconds ago                       
y8ion2zxr2fb        my_web.3            httpd:latest        host01              Running             Running 11 seconds ago                       
root@host03:~# docker service inspect my_web --pretty
ID:        addp6i8pm0msmamq6a4oc94py
Name:        my_web
Service Mode:    Replicated
Replicas:    3
Placement:
Constraints:    [node.labels.env==test]
 
 
将 my_web 的Service 从测试环境迁移到线上环境
 
root@host03:~# docker service update --constraint-rm node.labels.env==test my_web    #    删除Service 测试环境的标签
my_web
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged
root@host03:~# docker service ps my_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
63mta4uzj5kh        my_web.1            httpd:latest        host01              Running             Running 4 minutes ago                       
svynuplsq5l9        my_web.2            httpd:latest        host01              Running             Running 4 minutes ago                       
y8ion2zxr2fb        my_web.3            httpd:latest        host01              Running             Running 4 minutes ago                       
root@host03:~# docker service update --constraint-add node.labels.env==prod my_web    #    添加Service 线上环境的标签
my_web
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged
root@host03:~# docker service ps my_web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
mj39f4gddt7g        my_web.1            httpd:latest        host02              Running             Running 17 seconds ago                        
63mta4uzj5kh         \_ my_web.1        httpd:latest        host01              Shutdown            Shutdown 18 seconds ago                       
r82s4x7t8cft        my_web.2            httpd:latest        host02              Running             Running 12 seconds ago                        
svynuplsq5l9         \_ my_web.2        httpd:latest        host01              Shutdown            Shutdown 13 seconds ago                       
nxu3gvglcn5y        my_web.3            httpd:latest        host02              Running             Running 8 seconds ago                         
y8ion2zxr2fb         \_ my_web.3        httpd:latest        host01              Shutdown            Shutdown 9 seconds ago                
 
label 与 global mode 组合,只收集线上环境的日志
 
root@host03:~# docker service create --mode global --constraint node.labels.env==prod --name monitor busybox sleep 99999
vbo0n6hgrr8qehw1kql3znk4y
overall progress: 1 out of 1 tasks
asn5ufnogzky: running   [==================================================>]
verify: Service converged
root@host03:~# docker service ps monitor
ID                  NAME                                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
bek7a8mt387i        monitor.asn5ufnogzkyqigk4mizatoer   busybox:latest      host02              Running             Running 24 seconds ago                       
 

106、Label 控制 Service的位置 (Swarm13)的更多相关文章

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

    上一节我们讨论了 Service 部署的两种模式:global mode 和 replicated mode.无论采用 global mode 还是 replicated mode,副本运行在哪些节点 ...

  2. 用 label 控制 Pod 的位置 - 每天5分钟玩转 Docker 容器技术(128)

    默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...

  3. centos7下kubernetes(9。kubernetes中用label控制pod得位置)

    Kubernetes通过label实现将pod运行在指定得node上. 默认配置下,Schesuler将pod调度到所有可用得node,有时候我们希望将pod部署到指定得node,比如将有大量磁盘I/ ...

  4. 用 label 控制 Pod 的位置

    默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...

  5. LaTeX技巧96:LaTeX 图片控制命令,位置控制

    LaTeX技巧96:LaTeX 图片控制命令,位置控制 2012-04-05 17:25:44 zd0303 阅读数 28512更多 分类专栏: Latex   LaTeX 控制图片的位置,就是加感叹 ...

  6. “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置

    这个扩展属性从WP8.1就开始用了,主要是为了解决MVVM模式中无法直接控制ListView滚动位置的问题.比如在VM中刷新了数据,需要将View中的ListView滚动到顶部,ListView只有一 ...

  7. textfield控制光标开始位置

    //    UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...

  8. Demo 示例控制输入光标位置

    <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <meta name="aut ...

  9. LBS(Location Based Service)(基于位置的服务)

    LBS(Location Based Service)(基于位置的服务) Android 中定位方式基本可以分为两种:GPS定位,网络定位. GPS定位的工作原理是基于手机内置的GPS硬件直接和卫星进 ...

随机推荐

  1. LeetCode 81. 搜索旋转排序数组 II(Search in Rotated Sorted Array II)

    题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给定的目标值是否存在 ...

  2. laravel 文件上传总结

    调用 store 方法会生成唯一的 ID 来作为文件名,如果想获取原件本来的名称可以使用 $file = $request->file('file'); $file->getClientO ...

  3. PHP安装 (结合之前的nginx安装与mysql安装组合为lnmp)

    检查安装PHP所需的lib库 yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-de ...

  4. RN中webview的一些思考

    刚开始只是对接一下RN,h5部分,嵌套在RN里的webview里需要隐藏一些原生的按钮,遇到很多沟通上的问题,本来没使用RN之前,也是嵌套在webview里,也没什么问题,突然RN嵌套就有问题了,对方 ...

  5. 【React自制全家桶】二、分析React的虚拟DOM和Diff算法

    一.React如何更新DOM内容: 1.  获取state 数据 2.  获取JSX模版 3.  通过数据 +模版结合,生成真实的DOM, 来显示,以下行代码为例(简称代码1) <div id= ...

  6. 阶段3 3.SpringMVC·_05.文件上传_1 文件上传之上传原理分析和搭建环境

    分成几个部分 里面可能就包含文件上传的值 提交方式要改成post 第三个就是提供一个input file的文件选择域 新建项目 新建一个项目 当前项目没有父工程 跳过联网下载 改成02 构建 编译和目 ...

  7. Bat:Basic knowledge(同时运行多条命令,连接SqlServer执行sql,单个bat打开多个tomcat,cmd切换命令行编码,根据PID结束端口号)

    1.Windows7环境下命令行一次运行多条命令 Windows7命令行(cmd)下,如果想一次运行多条命令可能用到的连接符个人了解到的有三个:&&,||和&. aa & ...

  8. sql(存储过程,事务,索引,游标,触发器)

    1.SqlServer中like '%_%'来匹配下划线: --在sql server的like中下划线类似于通配符%,所以无法使用like '%_%'来匹配下划线 select * from cla ...

  9. 【HANA系列】SAP HANA SQL从给定日期中获取分钟

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL从给定日 ...

  10. 关于Pytorch中accuracy和loss的计算

    这几天关于accuracy和loss的计算有一些疑惑,原来是自己还没有弄清楚. 给出实例 def train(train_loader, model, criteon, optimizer, epoc ...