背景
使用 docker stack 部署一组服务时,docker 会根据集群的每个节点的资源的情况来进行分配,作为使用者无法参与其中的分配,该怎么解决呢?
环境
- docker 1.13.0+
- compose version 3+
deploy mode
replicated
默认模式,可自定义服务的副本数,此模式不能决定服务部署到哪个节点上
1 2 3
| deploy: mode: replicated replicas: 2
|
global
定义每个节点均部署一个服务的副本
node labels
该方法是通过给节点添加标签,然后在 yaml 文件里通过配置标签来决定服务部署到哪些节点
- docker node ls 查看节点
- docker node update –label-add role=service-1 nodeId 给 nodeId 的节点添加 label role=service-1, label 的形式是 map 的键值对形式
- docker node inspect nodeId 查看节点的 labels 信息
- docker node update –label-rm role=service-1 nodeId 删除 label
service 部署
1 2 3 4
| docker service create \ --name nginx \ --constraint 'node.labels.role == service-1' \ nginx
|
stack 部署
1 2 3 4
| deploy: placement: constraints: - node.labels.role == service-2
|
constraints 填写多个时,它们之间的关系是 AND;constraints 可以匹配 node 标签和 engine 标签
例如
1 2 3
| deploy: placement: constraints: [node.role == manager]
|
1 2 3 4 5
| deploy: placement: constraints: - node.role == manager - engine.labels.operatingsystem == ubuntu 14.04
|