当前位置: 首页 > 面试题库 >

Docker群仅在工作线程中运行任务

长孙硕
2023-03-14
问题内容

假设我们正在集群模式下工作,我们有三个节点:

  • 经理1
  • 工人1
  • 工人2

是否可以创建服务并指定任务仅在工作者(worker1和worker2)中运行,而不必在管理者(manager1)中运行

我正在运行以下命令来创建服务:

docker-machine ssh manager1 "docker service create --network dognet --name dog-db redis"

当我ps服务时:

docker-machine ssh manager1 "docker service ps dog-db"

我得到:

ID                         NAME      IMAGE  NODE      DESIRED STATE  CURRENT STATE            ERROR
3kvfpbhl6fj0qwtglc5k7sbkw  dog-db.1  redis  manager1  Running        Preparing 4 seconds ago

问题答案:

虽然您可以使用 约束 (带有--constraint node.role=worker)根据节点的角色(管理者或工作人员)消除节点的子集,但我将通过以下方式 使Manager不再像Worker那样工作

# Disables the Manager as a Worker node

docker node update --availability drain manager1

这个想法是要确保Manager不受资源过载(CPU,RAM,fds)的影响,如果部署的服务使用的资源高于Manager上可用的资源,则可能发生这种情况。它可能会触发
故障级联方案 ,并且群集可能变得高度不稳定(或不再响应任何其他请求)。

Manager的核心维护着关键组件(例如证书颁发和轮换,分布式数据存储,网络),这会导致整个集群不稳定,这是很糟糕的,因为Manager的资源不足。

相关问题:

  • 如何杀死你的经理
  • Orchestrator不处理任务扩展中的动态更新。

资料来源 :我是Docker
Swarm的维护者,并撰写了Swarm模式管理指南。



 类似资料:
  • 我是JavaFx/并发的新手,所以我在JavaFX中阅读了并发教程,但是我仍然对JavaFX Gui中后台线程的实现有点困惑。 我试图编写一个与一些串行设备(使用JSSC-2.8)接口的小图形用户界面,并根据这些设备的响应更新图形用户界面。但是,在写入消息和设备响应之间有一个延迟,在任意的时间内使用Thread.sleep()对我来说不是一个可靠的编程方式。因此,我想使用并发包中的等待()和通知(

  • 在我的项目中,我正在构建一个Java的执行框架,它接收来自客户端的工作请求。工作(大小不同)被分解为一组任务,然后排队等待处理。有单独的队列来处理每种类型的任务,每个队列都与一个ThreadPool相关联。ThreadPools的配置方式使引擎的整体性能达到最佳。 这种设计有助于我们有效地平衡请求的负载,大型请求不会占用系统资源。然而,当一些队列为空并且它们各自的线程池闲置时,该解决方案有时会变得

  • 当我执行命令查看连接器的任务列表时,我会得到以下结果 我不知道是什么。谢谢

  • 我的 Windows 机器上运行了一个 docker 容器,它是使用官方文档中提供的 docker-compose 文件的改编版本构建的。 这工作得很好,但是我想将python脚本(我的任务)从已挂载的文件夹中移动到它们自己的docker容器中。 为了测试这一点,我创建了一个简单的“Hello World!”示例-脚本: 它与以下简单的docker文件一起 我可以用< code > docker

  • 我正试图将我写的一个python工具打包到一个exe文件中,以便在Windows10上使用。据我所知,exe是正确构建的。如果我从命令行运行它,它就会加载并且一切正常。 但是,如果我试图从资源管理器运行该工具(双击图标),我会得到一个“执行脚本失败”的错误。我尝试使用--debug开关构建它,希望在cmd关闭之前可以快速捕获任何输出,但速度太快了。 我用来构建工具的代码行是: 在我开始使用repo

  • 我使用的是Activti版本6.0.0。 我想同步执行活动中的任务,但我有一个长时间运行的任务,可能需要20分钟来执行。我想在我的控制器中快速获得过程实例ID,而不考虑在bpmn中完成任务,所以我在bpmn文件中添加了一个中间计时器事件“0分钟”。 我已经开始执行一个进程,比如说processInstanceid p1。当时只有我再次启动这个进程,比如说使用processInstanceid p2