filter控制docker swarm调度

详细参照官网:https://docs.docker.com/swarm/scheduler/filter/#configure-the-available-filters

(本文涉及的docker版本:v17.12)

filter可以控制swarm对哪些节点进行container的调度。filter 一共分为两类:node filters 和 container configuration filters。分别针对节点和容器进行过滤。

具体的filters如下:

node filters

  constraint:

        docker可以参照默认的 tag 以及定制的 labels 来进行调度。默认tag(docker info 获得)包括:

        • node (参照nodeID 或者 name)

        • storagedriver

        • executiondriver

        • kernelversion

        • operatingsystem          

          定制label方式(需要重新启动docker daemon),这里添加两个label:

          docker daemon --label environment="production" --label storage="ssd"


          使用label:比如需要在定制的storage=ssd label的node上运行一个mysql容器

          $ docker tcp://<manager_ip:manager_port>  run -d -P -e constraint:storage==ssd --name db mysql

  health:

    防止容器运行在不健康的节点上,例如down的节点或者是无法“沟通”的节点

  containerslots:

       限制节点最多运行容器的数量

 $ docker daemon --label containerslots=3  

       这里本节点的容器限制数量为3,若所有节点都达到3,swarm报错。


container configuration filters:

  affinity :

    对象为容器:可以保证容器运行在同一个网络节点中,并且容器会down当被affinity的容器关闭。使用方式:

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

                          logger容器affinity frontend容器,当frontend关闭时,logger也会结束


  对象为image:容器将只会被调度到含有该image的node上

 $ docker tcp://<manager_ip:manager_port> run -d --name redis1 -e affinity:image==redis redis


  对象为label: 首先容器运行时添加label:                      

 $ docker tcp://<manager_ip:manager_port> run -d -p 80:80 --label com.example.type=frontend nginx

                        其次:

 $ docker tcp://<manager_ip:manager_port> run -d -e affinity:com.example.type==frontend logger  此时logger就affinity到了nginx容器上。


dependence:

  swarm将会把容器调度到依赖容器对应的节点上,若节点无法创建容器(节点不存在或者节点资源不够),则容器不会被创建。依赖一共是下面3种:

      • -volumes-from=dependency (shared volumes)
      • --link=dependency:alias (links)
      • --net=container:dependency (shared network stacks)

  若有多个依赖,则必须同时满足:

     --volumes-from=A  --net=container:B

  此时swarm会寻找容器A和B所在的节点,若AB不在同一个节点,或者节点资源等不满足,则不会创建。


port:

  无论是使用bridge模式还是host模式,当宿主机的某个端口在所有的node上都被占用时,容器创建失败。否则swarm选择端口未被占用的node进行调度。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值