上一节我们讨论了 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
- 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)
上一节我们讨论了 Service 部署的两种模式:global mode 和 replicated mode.无论采用 global mode 还是 replicated mode,副本运行在哪些节点 ...
- 用 label 控制 Pod 的位置 - 每天5分钟玩转 Docker 容器技术(128)
默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...
- centos7下kubernetes(9。kubernetes中用label控制pod得位置)
Kubernetes通过label实现将pod运行在指定得node上. 默认配置下,Schesuler将pod调度到所有可用得node,有时候我们希望将pod部署到指定得node,比如将有大量磁盘I/ ...
- 用 label 控制 Pod 的位置
默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...
- LaTeX技巧96:LaTeX 图片控制命令,位置控制
LaTeX技巧96:LaTeX 图片控制命令,位置控制 2012-04-05 17:25:44 zd0303 阅读数 28512更多 分类专栏: Latex LaTeX 控制图片的位置,就是加感叹 ...
- “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置
这个扩展属性从WP8.1就开始用了,主要是为了解决MVVM模式中无法直接控制ListView滚动位置的问题.比如在VM中刷新了数据,需要将View中的ListView滚动到顶部,ListView只有一 ...
- textfield控制光标开始位置
// UIView *paddingView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.wi ...
- Demo 示例控制输入光标位置
<!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <meta name="aut ...
- LBS(Location Based Service)(基于位置的服务)
LBS(Location Based Service)(基于位置的服务) Android 中定位方式基本可以分为两种:GPS定位,网络定位. GPS定位的工作原理是基于手机内置的GPS硬件直接和卫星进 ...
随机推荐
- TCP输入 之 tcp_rcv_established
概述 tcp_rcv_established用于处理已连接状态下的输入,处理过程根据首部预测字段分为快速路径和慢速路径: 1. 在快路中,对是有有数据负荷进行不同处理: (1) 若无数据,则处理输入a ...
- 百度地图js判断点是否在圆形区域内
/** * Created by LEGION on 2018/10/11. *//** * @fileoverview GeoUtils类提供若干几何算法,用来帮助用户判断点与矩形. * 圆形.多边 ...
- 【React自制全家桶】三、React使用ref操作DOM与setState遇到的问题
在React中同时使用ref操作DOM与setState常常会遇到 比如操作的DOM是setState更新之前的DOM内容,与想要的操作不一致.导致这样的原因是setState函数是异步函数. 就是当 ...
- java初级之数组详解
一,数组的概念: 数组是为了存储同一种数据多个元素的集合,也可以看成是一个容器,数组既可以存储基本数据类型,也可以存储引用数据类型,数组是为了存储同种数据类型的多个值. 1.1.1,一维数组重点: 数 ...
- 五十三:WTForms表单验证之常用验证器
Email:验证数据是否为邮箱EqualTo:验证此字段的数据是否和另一个字段的值相等,常用与校验密码和确认密码InputRequired:检验数据必传Length:校验数据长度NumberRange ...
- 性能测试之JMeter远程模式
性能测试之JMeter远程模式 事实上,你的JMeter客户端机器是不能表现出完美的压力请求,来模拟足够多的用户或由于网络限制去向服务施加压力,一种解决方法是通过一个JMeter去控制多个/远程JMe ...
- stringstream 类型转换
stringstream可以吞下不同的类型,然后吐出不同的类型. 这样可以实现int,string,double等类型的转换 #include<sstream> using namespa ...
- redis(2)事务的订阅与发布
一.shell终端进行事务的订阅与发布(异步) 发布 : publish channel message [root@localhost ~]# redis-cli -p -h 192.168.42. ...
- nginx主配置文件实例
1.修改配置文件 重要:修改配置文件使用虚拟机,否则怎么配置都不生效,添加如下用户 [root@host-10-1-1-161 html]# ll /etc/nginx/nginx.conf -rw- ...
- java:WebService
1.WebService就是应用之间的远程调用,可以跨语言调用,为甚么可以跨语言调用,是因为其实依赖与xml语言,xml语言依赖http协议,http协议底层也是socket.