Docker 放置首选项与 Docker 放置约束



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

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

放置首选项允许您在具有特定标记的节点之间spread副本,选择尽可能diverse放置副本。

约束

会将副本约束(限制(为与约束匹配的节点。

假设您在 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 个副本"分布"到两个数据中心,因此您最终会在节点 1 或节点 2 上得到 1 个副本,在节点 3 或节点 4 上得到另一个副本。

如果您的服务(例如报告作业(执行大量 IOPS,则可能需要使用配备 SSD 的服务器,因此您将对服务施加约束:

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

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

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

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

例如节点的放置约束 region=east 将允许任务仅在标记为"east"的节点上运行而Node.region=East 的放置首选项将帮助您将任务分布到节点之间均匀的 node.region。如果任何节点没有此标签,它仍将获取任务。

最新更新