Docker-Swarm调度之Filters

翻译 2016年05月31日 23:34:50

原文地址:https://docs.docker.com/swarm/scheduler/filter

Swarm的过滤条件用于调度过程中选择满足指定条件的主机节点,常用于在swarm集群中用Docker创建镜像或运行容器。

使用affinity过滤的示例

 # 选择存在redis镜像的主机运行redis容器(manager_ip:port是swarm-manager的主机及IP>)
 docker tcp:<manager_ip:port> run -d -e affinity:image==redis redis

过滤器分类

Filters分两类:节点过滤器容器过滤器

节点过滤器:以Docker Deamon的配置或Docker主机的特性为条件进行过滤的,它包括:
- constraint
- health

容器过滤器:以Docker容器的配置作为条件过滤,它包括:
- affinity
- dependency
- port

使用容器过滤器时,过滤条件将应用于所有容器,包括stopped状态的容器。
容器过滤器中dependency和port两种,会利用docker运行容器时的相关参数自动选择符合条件的节点,不需额外指定参数。

过滤器全局可用性设置

在使用swarm manage命令启动Swarm管理端时,默认所有的过滤器可用。
如果要指定只允许部分过滤器可用,可使用多个--filter参数指定可用的过滤器。

 swarm manage --filter=health --filter=dependency

使用constraint过滤

constraint使用Docker主机的的默认标记(tags)自定义标签(labels)作为条件。

默认标记来源于docker info信息,包括:
- 节点id或节点名称
- storagedriver
- executiondriver
- kernelversion
- operatingsystem

自定义标签是在docker deamon启动时用一个或多个--label指定的参数。

# 启动docker deamon守护进程时指定label
docker deamon --label storage="ssd"
# 将当前Docker deamon主机加入集群
swarm join --advertise=192.168.0.42:2375 token://XXXXXXXXXXXXXXXXXX

# 使用上述指定了label的主机运行容器
docker tcp://<manager_ip:manager_port>  run -d -P -e constraint:storage==ssd --name db mysql
# 指定构建镜像时选中集群中节点的条件(constraint:storage==disk)
docker build --build-arg=constraint:storage==disk -t ouruser/sinatra:v2 .

使用health过滤

当节点down机了,或无法与Cluster通信了,表示节点处于unhealth状态。
health过滤条件在集群启动时指定通过--filter=health指定,它强制集群在后续操作选择节点时使用health状态的节点。

使用affinity过滤

affinity过滤器,用于选择满足以下条件(具有相关性)的节点:
- container(容器name或id)
- images(镜像名称)
- label(容器上的自定义label)

示例1

docker tcp://<manager_ip:manager_port> run -d --name logger -e affinity:container==87c4376856a8

示例2

# 在三个主机(node-1、node-2、node-3)上下载不同的镜像
docker -H node-1:2375 pull redis
docker -H node-2:2375 pull mysql

# swarm选取存在redis镜像的节点作为容器运行的主机
docker tcp://<manager_ip:manager_port> run -d --name redis1 -e affinity:image==redis redis

使用dependency过滤

在运行容器时,可以指定以下三种依赖:
- –volumns-from=dependency
- –link=dependency:alias
- –net=container:dependency

使用swarm创建容器时,会自动根据满足这三种依赖的主机环境作为容器运行的节点。

使用端口过滤

在运行容器时,通过-p指定主机与容器的端口映射,在swarm环境中,会自动选择指定端口可用(未被占用)的主机,避免端口冲突。

Filters表达式书写规则

根据上述介绍的五种过滤器,只有constraints和affinity两种需要通过-e参数额外指定Filter表达式。

<filter-type>:<key><operator><value>

    filter-type: constraints和affinity两种
    key: container、node、节点默认tag、节点或容器自定义label
    operator:包括`==`、`!=`两种,可在后面加'~'表示软匹配,在条件无匹配时,自动忽略过滤条件
    value:字符串表达式(字符、数据、点号、下划线等组成),可以是
        全局匹配 —— abc*
        正则匹配 —— /node\d/

示例如下

  • constraint:node==node1 matches node node1.
  • constraint:node!=node1 matches all nodes, except node1.
  • constraint:region!=us* matches all nodes outside with a region tag prefixed with us.
  • constraint:node==/node[12]/ matches nodes node1 and node2.
  • constraint:node==/node\d/ matches all nodes with node + 1 digit.
  • constraint:node!=/node-[01]/ matches all nodes, except node-0 and node-1.
  • constraint:node!=/foo[bar]/ matches all nodes, except foo[bar]. You can see the use of escape characters here.
  • constraint:node==/(?i)node1/ matches node node1 case-insensitive. So NoDe1 or NODE1 also match.
  • affinity:image==~redis tries to match for nodes running container with a redis image
  • constraint:region==~us* searches for nodes in the cluster belonging to the us region
  • affinity:container!=~redis* schedule a new redis5 container to a node without a container that satisfies redis*

Docker-Swarm重调度策略

什么是重调度? 就是正在运行的节点(在启动时是经过swarm调度的)坏掉之后,指定由swarm再次调度,这就是重调度。在启动容器时指定重重调度策略。...
  • gezhonglei2007
  • gezhonglei2007
  • 2016年06月01日 01:04
  • 935

Docker-Swarm调度策略

swarm在用命令swarm manager启动swarm-master时,可用--strategy指定调度策略。 swarm提供了三种调度策略计算节点的排名,在调度(例如选择哪一个节点运行容器时)...
  • gezhonglei2007
  • gezhonglei2007
  • 2016年06月01日 00:39
  • 2444

Docker Swarm:经济高效的容器调度

本文探讨了几种容器调度策略,并以内存约束为例,讨论了如何利用Docker Swarm,通过资源约束实现容器的合理调度。其中,对容器资源的约束,包括硬约束和软约束,硬约束是指内存资源的实际限制条件,而软...
  • horsefoot
  • horsefoot
  • 2016年08月30日 20:45
  • 11200

Docker学习笔记 — Swarm搭建Docker集群

Swarm搭建Docker集群
  • wangtaoking1
  • wangtaoking1
  • 2015年07月02日 22:09
  • 77411

docker 创建overlay网络实践

参考文档:https://docs.docker.com/engine/userguide/networking/get-started-overlay/ https://docs.docker.c...
  • wenwenxiong
  • wenwenxiong
  • 2016年07月08日 21:23
  • 3256

Docker 1.12 Swarm集群实战(第五章)

补充一些遗漏的问题. 本章主要内容: 使用 constraints 指定 service 约束.service 挂载使用本地volume.ELK日志平台使用GELF日志驱动收集日志. ...
  • weiguang1017
  • weiguang1017
  • 2017年03月15日 18:44
  • 895

docker swarm 学习命令整理

Docker swarm初始化swarm manager并制定网卡地址docker swarm init --advertise-addr 192.168.10.117强制删除集群,如果是manage...
  • wanglei_storage
  • wanglei_storage
  • 2017年08月23日 17:19
  • 1283

Docker Swarm项目

Docker Swarm项目   Docker Swarm是Docker官方编排(项目之一,负责对Docker集群进行管理.Docker Swarm将一群Docke...
  • shanyongxu
  • shanyongxu
  • 2016年06月12日 13:59
  • 7466

Cloud Design Pattern - Scheduler Agent Supervisor (调度代理主管模式)

1.前言 上一篇我们讨论了云计算设计模式之运行时配置模式,了解了如何设计一个支持运行时修改系统配置的系统架构,从而提升系统高可用性.这一篇我们讨论下分布式任务处理系统中的任务调度,监测,异常处理等问题...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2015年11月20日 11:20
  • 732

阅读图像显著性检测论文四:Saliency Filters Contrast Based Filtering for Salient Region Detection

这是出自CVPR 2012年的一篇文章,目前谷歌学术引用次数500+,与前面提取特征或者转到频率域做的方法不同,这篇文章使用了非常直观的对比度来描述显著性,笔者认为是非常符合人类视觉系统的认知方式的,...
  • xbcReal
  • xbcReal
  • 2016年12月14日 11:11
  • 1202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Docker-Swarm调度之Filters
举报原因:
原因补充:

(最多只允许输入30个字)