【问题标题】:Docker placement preference vs Docker placement constraintsDocker 放置偏好与 Docker 放置约束
【发布时间】:2019-06-08 06:12:26
【问题描述】:

我正在学习 Docker。作为我学习的一部分,有一个我不明白的话题。与 Docker 中的约束相比,Docker 放置首选项的使用情况。

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

【问题讨论】:

标签: docker docker-compose docker-swarm


【解决方案1】:

放置首选项允许您将副本“传播”到具有特定标签的节点上,选择尽可能多地“多样化”放置副本。

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

您在 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 会尝试将 2 个副本“传播”到两个数据中心,因此您最终会在 node-1 或 node-2 上获得 1 个副本,在 node-3 或 node-4 上获得另一个副本.

如果您的服务(例如报告作业)执行大量 IOPS,您可能希望使用配备 SSD 的服务器,因此您将对服务施加限制:

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

【讨论】:

    【解决方案2】:

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

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

    虽然放置约束限制了服务可以在其上运行的节点,但放置偏好尝试以算法方式将任务放置在适当的节点上(目前,仅均匀分布)。放置首选项可帮助您根据节点间的约束分配任务。

    例如 node.region=east 的放置约束将让任务仅在标记为“east”的节点上运行 然而, node.region=east 的放置首选项将帮助您将任务均匀地分布在基于 node.region 的节点上。如果任何节点没有这个标签,它仍然会得到任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2017-03-26
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多