背景
使用 docker stack 部署一组服务时,docker 会根据集群的每个节点的资源的情况来进行分配,作为使用者无法参与其中的分配,该怎么解决呢?
环境
- docker 1.13.0+
- compose version 3+
deploy mode
replicated
默认模式,可自定义服务的副本数,此模式不能决定服务部署到哪个节点上
deploy:
mode: replicated
replicas: 2
global
定义每个节点均部署一个服务的副本
deploy:
mode: 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 部署
docker service create \
--name nginx \
--constraint 'node.labels.role == service-1' \
nginx
stack 部署
deploy:
placement:
constraints:
- node.labels.role == service-2
constraints 填写多个时,它们之间的关系是 AND;constraints 可以匹配 node 标签和 engine 标签
例如
deploy:
placement:
constraints: [node.role == manager]
deploy:
placement:
constraints:
- node.role == manager
- engine.labels.operatingsystem == ubuntu 14.04
留言