Swarm中binpack策略引起的棘手问题

本文探讨了Docker Swarm中的binpack策略,该策略可能导致容器间协调的问题。binpack策略虽能提高资源利用率,但在处理相互依赖的容器时会面临挑战。文章通过实例说明了如何在资源受限的情况下正确调度依赖于同一节点的容器,并提出了可能的解决方案,包括使用"保持"状态和"forward"限制。同时,文章建议使用无状态微服务以减少主机宕机风险,并提到了Kubernetes的pods概念作为参考。对于更多Docker知识,作者推荐了相关培训视频。
摘要由CSDN通过智能技术生成

Docker Swarm–Docker的本地化集群方案,自带两种调度策略,spread和binpack。Spread策略会尝试把每个容器平均地部署到每个节点上,而binpack策略会把容器尽量部署在主要的负载节点上。Spread的优点是如果一个节点失效了,只会有最少量的容器受影响,而binpack的优点是能提高资源使用率,保证空闲的资源得到最大化利用。

Binpack vs Spread strategy
Binpack vs Spread 策略

长远来看,我相信以后会越来越多地使用binpack这种方式,因为它可以提高主机资源使用率。而主机宕机的风险也有办法尽量降低,那就是尽量使用无状态的微服务,因为无状态的服务能够自动快速的迁移到可用的节点上,从而把宕机的危害减到最小。

但是,如果你现在正使用着binpack,你需要特别小心的是容器间的协调关系,确保某些必须运行在同一个节点上的容器总能在相同的节点上运行着。

考虑一下这个场景,假如我们有两个有空闲资源的节点,其中一个几乎占用满了,而另一个几乎是没被占用,我们可以用两个装有Docker的虚拟机来模拟这个场景:

$ docker run swarm create
7a6441b8b92448475fb3f8e166ed2170
$ docker-machine create -d virtualbox --swarm --swarm-master --swarm-strategy binpack --swarm-discovery token://7a6441b8b92448475fb3f8e166ed2170 swarm-1
...
$ docker-machine create -d virtualbox --swarm --swarm-strategy binpack --swarm-discovery token://7a6441b8b92448475fb3f8e166ed2170 swarm-2
...
$ eval $(docker-machine env --swarm swarm-1)
$ docker info
Containers: 3
Images: 8
Role: primary
Strategy: binpack
Filters: health, port, dependency, affinity, constraint
Nodes: 2
 swarm-1: 192.168.99.103:2376
  └ Containers: 2
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值