Docker放置偏好与Docker放置约束

时间:2019-06-08 06:12:26

标签: docker docker-compose docker-swarm

我正在学习Docker。在学习过程中,有一个我不了解的主题。与Docker中的约束相比,Docker放置首选项的用法。

我一直在互联网上搜索,并问许多人,每个人都知道限制而不是偏好。我在互联网上找不到任何好的参考资料。 Docker中放置首选项的用途是什么?我什么时候应该使用它们?有示例吗?

2 个答案:

答案 0 :(得分:0)

放置首选项使您可以使用某些标签在节点之间“扩展”副本,并选择将副本尽可能“分散”。

约束会将副本限制(限制)到与约束匹配的那些节点上。

映像您在2个数据中心(东,西)中有4台服务器,其中一些服务器具有SSD驱动器,而其他服务器则没有。

如果将以下标签应用于节点:

node-1: datacenter=us-east, disk=ssd
node-2: datacenter=us-east, disk=ssd
node-3: datacenter=us-west, disk=sas
node-4: datacenter=us-west, disk=nl-sas

如果您要部署具有2个副本的服务,并且要提供地理冗余,则可以按以下方式启动该服务:

docker service create \
  --replicas 2 \
  --name webserver \
  --placement-pref 'spread=node.labels.datacenter' \
  mywebservice:production

然后,Docker Swarm会尝试在两个数据中心之间“传播”两个副本,因此您最终将在node-1或node-2上获得1个副本,而在node-3或node-4上获得另一个副本

如果您有一项服务(例如,报告作业)执行很多IOPS,则可能要使用配备SSD的服务器,因此会对服务施加约束:

docker service create \
  --constraint 'node.labels.disk == ssd' \
  myreporter:latest

答案 1 :(得分:0)

请参阅https://docs.docker.com/engine/swarm/services/中的“控制服务放置”部分

简而言之 放置约束 限制任务可以在何处运行 (除非满足约束,否则任务不会在节点上运行,它将保持待处理状态)

尽管放置限制限制了可以在其上运行服务的节点,但是放置首选项 尝试以算法方式将任务放置在适当的节点上 (当前,仅均匀分布)。放置首选项可帮助您基于约束在节点上分配任务。

例如 node.region = east的放置约束将使任务仅在标记为“ east”的节点上运行 而, node.region = east的放置首选项将帮助您在基于node.region的节点之间平均分配任务。如果任何节点没有此标签,它仍将获得任务。