Docker Swarm 设置服务部署到指定机器

148次阅读
没有评论

问题描述

在使用Docker Swarm时,想知道是否有办法设置哪个服务或服务副本部署到哪个工作节点上。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Docker Swarm中,可以使用placement部分的constraints属性来指定服务的部署约束条件。你可以使用节点标签来添加更多的潜在节点(如果现有节点失败)而无需重新定义绑定到节点的任何部署,但你也可以指定主机名。具体操作如下:
1. 在docker-compose.yml文件中定义需要的服务。
2. 在服务的deploy部分中,使用placement属性来指定约束条件。
以下是一个示例docker-compose.yml文件:

version: "3.9"
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - "node.hostname==dbhost"

在上面的示例中,我们定义了一个名为db的服务,并使用placement属性指定了约束条件。这将确保服务只会部署到主机名为dbhost的节点上。
请注意,constraints属性可以使用多个约束条件,以逗号分隔。你可以根据需要添加更多的约束条件。

方案2

使用脚本或工具来管理服务的部署位置可能会增加复杂性,并且需要确保节点的可用性和负载均衡。
另一种方法是编写脚本或使用工具来控制服务的部署位置。你可以使用docker service create命令手动控制服务的部署位置,或者使用一些第三方工具来管理服务的部署位置。

示例:

以下是一个简单的bash脚本示例,可以在启动服务之前检查节点的可用性,并将服务部署到指定的节点上:

#!/bin/bash
# 检查节点是否可用
if docker node ls | grep -q "dbhost"; then
  # 创建服务并指定节点
  docker service create --name my_service --constraint 'node.hostname==dbhost' your_image
else
  echo "Node dbhost is not available."
fi

在这个示例中,我们首先使用docker node ls命令检查节点是否可用。如果节点名为dbhost的节点存在,则使用docker service create命令创建一个名为my_service的服务,并使用constraint参数指定服务只能部署到节点名为dbhost的节点上。
请注意,这只是一个示例,你可以根据实际需求进行修改和扩展。

正文完