全部产品
容器服务

服务部署约束

更新时间:2017-07-23 22:58:41   分享:   

模板版本支持

Compose V1/V2 和 Compose V3 都支持设置服务的部署约束条件,且语法相同。

功能概述

设置该服务的部署约束条件。

容器服务支持 Docker Swarm 兼容的容器部署约束条件,您可以通过 Docker Swarm Filter 控制一个容器的部署。

但是在社区版 Docker Compose 中,却并没有相关的能力来控制服务直接的部署约束。

在容器服务中,您可以在 environment 中添加相关 affinity:service,来约束服务之间的亲和度(Affinity),达到控制服务部署策略的功能。支持服务之间的 Soft affinityHard affinity

编排示例

Compose V1/V2 编排示例:

本示例中,slave 服务设置了 affinity.service!=master 的部署约束。使得 slave 服务一定会选择没有部署 master 服务的节点,这样当一个节点失效时,服务可用性不受影响。当您的集群只有一个节点的时候,由于指定的是 hard anti-affinity,该部署会失败,因为部署没有办法满足所指定的强约束条件。

  1. master:
  2. image: mysql:5.6
  3. environment:
  4. - MYSQL_USER=user
  5. - MYSQL_PASS=test
  6. - REPLICATION_MASTER=true
  7. - REPLICATION_USER=repl
  8. - REPLICATION_PASS=repl
  9. ports:
  10. - 3306
  11. slave:
  12. image: mysql:5.6
  13. environment:
  14. - MYSQL_USER=user
  15. - MYSQL_PASS=test
  16. - REPLICATION_SLAVE=true
  17. - affinity:service!=master
  18. ports:
  19. - 3306
  20. links:
  21. - master:mysql

Compose V3 编排示例:

本示例中,mysql 服务设置了 affinity.service!=web 的部署约束。使得 mysql 服务一定会选择没有部署 web 服务的节点,这样当一个节点失效时,服务可用性不受影响。当您的集群只有一个节点的时候,由于指定的是 hard anti-affinity,该部署会失败,因为部署没有办法满足所指定的强约束条件。

  1. version: '3'
  2. services:
  3. web:
  4. image: wordpress:4
  5. environment:
  6. - WORDPRESS_DB_PASSWORD=password
  7. - WORDPRESS_AUTH_KEY=changeme
  8. - WORDPRESS_SECURE_AUTH_KEY=changeme
  9. - WORDPRESS_LOGGED_IN_KEY=changeme
  10. - WORDPRESS_NONCE_KEY=changeme
  11. - WORDPRESS_AUTH_SALT=changeme
  12. - WORDPRESS_SECURE_AUTH_SALT=changeme
  13. - WORDPRESS_LOGGED_IN_SALT=changeme
  14. - WORDPRESS_NONCE_SALT=changeme
  15. - WORDPRESS_NONCE_AA=changeme
  16. ports:
  17. - 80
  18. deploy:
  19. replicas: 3
  20. restart_policy:
  21. condition: on-failure
  22. labels:
  23. aliyun.routing.port_80: wordpress
  24. mysql:
  25. image: mysql:5.7
  26. environment:
  27. - MYSQL_ROOT_PASSWORD=password
  28. - affinity:service!=web
  29. deploy:
  30. restart_policy:
  31. condition: on-failure
本文导读目录
本文导读目录
以上内容是否对您有帮助?