繁体   English   中英

如何在工作节点中存在的 docker 群中部署撰写文件

[英]How to deploy a compose file in docker swarm which is present in Worker node

在system1(即Master节点的主机名)中,docker开始使用

docker 群初始化

稍后系统 1 (*.yml) 中可用的 Compose 文件使用

docker 堆栈部署 --compose-file file_1.yml system1

docker 堆栈部署 --compose-file file_2.yml system1

docker 堆栈部署 --compose-file file_3.yml system1

接下来在system2(即Worker节点的主机名),

将使用 join --token 命令加入管理器节点 (system1)。并使用下面提到的命令,稍后复制该命令的 output 并加入管理器节点。

docker swarm join-token worker

并在system2中运行了一次上述命令output,成功加入了manager节点。

还通过使用交叉验证,

docker 节点 ls

我可以在 Ready 和 active state 中看到管理器节点和工作器。

在我的例子中,我使用工作节点(system2)进行故障转移。

现在我在 system2 中有类似的撰写文件(*.yml 文件)。

我如何将它部署在 docker 群中?

由于 system2 是工作节点,我无法在 system2 中部署。

起初我不确定你是什么意思

在我的例子中,我使用工作节点(system2)进行故障转移。

我们在生产环境中运行 Docker Swarm,您可以通过管理器实现故障转移的唯一方法是使用更多管理器。 请注意,因为 Docker Swarm 使用 etcd 并且使用 quorum,go 的规则为 1,3,5...

对于非管理节点的部署,在 Docker Swarm 中不可能这样做,除非您使用具有 docker 套接字代理的管理服务并且它可以通过服务与它一起工作(服务将在管理器上运行并且因为它都存在于 Docker Swarm 中,然后您可以调用 worker 的调用。)

但是无法从工作节点直接部署或管理 swarm。

一些事情:

第一的:

Docker 上下文用于与 swarm 管理器进行远程通信,以便您在执行 docker 命令时不必在管理器上。

即远程部署到你可以创建的群然后使用这样的上下文:

docker context create swarm1 --docker "host=ssh://user@node1"
docker --context swarm1 stack deploy --compose-file stack.yml stack1

第二:设置 swarm 后,您始终与管理器节点通信,并协调将服务部署到可用的工作节点。 如果在部署服务后添加工作节点,docker 不会将任务移动到工作节点,直到执行新部署,因为它不希望中断正在运行的任务。 目标是最终的平衡。 如果你想强制一个 docker 重新平衡以立即考虑新的工作节点,那么只需重新部署堆栈即可,或者

docker service update --force some-service

第三:要控制哪些工作节点服务在其上运行任务,您可以使用放置约束和节点标签。

docker service create --constraint node.role==worker...只会部署到具有工作者角色(不是管理者)的节点上

docker service update --constraint-add "node.labels.is-nvidia-enabled==1" some-service只会将任务部署到您已使用相应的 label 和值明确标记该节点的节点。

例如docker node update label-add is-nvidia-enabled=1 node1 node3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM