Docker 放置偏好与 Docker 放置约束

Mad*_*dhu 2 docker docker-compose docker-swarm

我正在学习 Docker。作为我学习的一部分,有一个主题我没有理解。与 Docker 中的约束相比,Docker 放置首选项的使用。

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

Fra*_*ers 5

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

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

想象一下,您在 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
Run Code Online (Sandbox Code Playgroud)

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

docker service create \
  --replicas 2 \
  --name webserver \
  --placement-pref 'spread=node.labels.datacenter' \
  mywebservice:production
Run Code Online (Sandbox Code Playgroud)

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

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

docker service create \
  --constraint 'node.labels.disk == ssd' \
  myreporter:latest
Run Code Online (Sandbox Code Playgroud)