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

标签 docker docker-compose docker-swarm

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

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

最佳答案

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

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

假设您在 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

关于Docker 放置首选项与 Docker 放置约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56503975/

相关文章:

docker-compose - 从 Traefik 中的环境变量配置多个域的推荐方法是什么?

从私有(private)注册表中提取图像时,docker swarm 创建服务失败

amazon-web-services - AWS Cloudformation 随机构建失败

docker - 在kubernetes部署中将configMap作为参数传递

caching - 通过 NFS 公开/var/lib/docker 以服务于内存有限的主机的含义

pip 安装要求后 docker build 失败,退出代码为 137

docker - 在容器运行时编辑Docker容器设置

docker - 是否可以查看docker swarm内部DNS记录?

docker - cpu限制后失败docker容器

docker - 在 Kubernetes 集群上运行自动集成测试