运行所有Docker Swarm节点作为管理者的优缺点?

17

我正在考虑创建一个Docker Swarm集群。为了保持简单和相对容错性,我考虑仅运行3个节点作为管理节点。

如果不使用任何专用的工作节点,会有哪些折衷方案?有什么需要注意的事项可能并不明显?

我找到了这个Github问题,它提出了类似的问题,但答案对我来说有点模糊。它提到性能可能会更差。它还提到,达成共识需要更长的时间。实际上,哪些功能会变慢?“需要更长时间才能达成共识”会对什么产生影响?


1
这可能不是你提问的正确论坛,但由于我已经做过这个,我可以告诉你我的经验是,如果负载轻,那么它是可以的——管理角色只是使用更多资源,如果还有很多任务,其中一个或两个都会受到影响。因此,除非你的负载非常轻,否则我不会计划长期这样做,但如果你正在监视你的主机,那么开始应该没问题。随着我们扩展服务,我们最终添加了一些工作人员。 - ldg
2个回答

25

TL;DR Swarm中所有管理器作为工作节点的优缺点:

优点:

  • 只需3或5个服务器即可实现生产质量的高可用性
  • 设计/管理简单
  • 默认情况下仍然安全(密钥在磁盘上加密,控制平面上的互相TLS身份验证和网络加密)
  • 任何节点都可以管理Swarm

缺点:

  • 需要更紧密地管理资源以防止管理器饥饿
  • 较低的安全姿态,密钥/密码存储在应用程序服务器上
  • 受损节点意味着整个Swarm可能很容易被攻击
  • 限于奇数个服务器,通常为3或5个

回答你的问题:

如果不使用任何专用工作节点,有哪些权衡?有没有什么我应该注意但可能不明显的事情?

使用仅工作节点没有硬性要求。如果您部署的解决方案知道所需的资源,并且服务/任务的数量通常相同,则使用仅三个管理器执行所有工作的Swarm没有问题,只要您考虑了以下三个受影响的区域:

  • 安全。在理想情况下,您的管理节点不应该通过互联网访问,而应该只在后端子网上执行管理工作。管理节点拥有Swarm的所有权限,保存所有加密秘钥、加密Raft日志,并且(默认情况下)将加密密钥存储在磁盘上。Worker仅存储它们需要的秘密(并仅存储在内存中),并且没有权力执行Swarm中除领导者指示的工作之外的任何工作。如果Worker受到攻击,您不一定会“失去Swarm”。这种权力分离并非硬性要求,许多环境接受此风险,只需将管理节点设置为将服务发布到公共网络的主服务器即可。这只是安全/复杂度与成本的问题。
  • 节点数量。备份所需的最少管理节点数为3个,大多数情况下我建议使用3或5个。更多的管理节点并不意味着更大的容量,因为任何时候只有一个管理节点是领导者,也是唯一执行管理工作的节点。领导者的资源容量决定了它能同时执行多少工作。如果您的管理节点还执行应用程序工作,并且需要更多的资源容量,以便处理3个节点无法处理的工作量,那么我建议第4个节点及更高级别节点仅充当Worker。
  • 性能/扩展性。理想情况下,您的管理节点拥有执行诸如领导者选举、任务调度、运行和响应健康检查等任务所需的所有资源。它们的资源利用率将随着总节点数、总服务数以及必须执行的新工作速率(服务/网络创建、任务更改、节点更改、健康检查等)的增加而增长。如果您只有少量服务器和少量服务/副本,则可以让管理节点充当Worker,只要您小心谨慎(在服务上使用资源限制),以防止您的应用程序(特别是数据库)耗尽docker守护程序的资源,以至于Swarm无法执行其工作。当您开始出现领导者更改或错误/故障时,您会将“检查管理节点是否有可用资源”列入您的短期故障排除步骤清单中。
  • 其他问题:

    实际上,哪些功能会变慢?“需要更长时间达成共识”会对什么产生影响?

    更多的管理者=当一个管理者出现问题时,需要更长的时间才能选出新的领导人。在没有领导人的情况下,Swarm处于只读状态,无法启动新的副本任务或进行服务更新。任何失败的容器都不会自动恢复,因为Swarm管理者无法工作。您运行的应用程序、入口路由网格等所有功能仍然可以正常使用。管理者健康和领导者选举的大部分性能与所有管理者节点之间的网络延迟紧密相关,而不仅仅是管理者数量。这就是为什么Docker通常建议单个Swarm管理者全部位于同一区域,以便它们之间进行低延迟往返。这里没有硬性规定。如果您测试了管理者之间的200ms延迟并测试了故障,并且对领导者选举的结果和速度感到满意,那就很好。

    背景信息:


    2
    这完全取决于构建集群的目的。对于开发目的,您可以使用工作节点作为管理器。真正的问题在于扩展,如果您觉得微服务基础架构将不断增长,请考虑分离工作节点和管理器节点以便轻松扩展。
    您设置的优点是:
    - 管理容易 - 设置高度可用性 - 3个节点意味着容错率为1
    缺点是:
    - 不适合扩展,容器计算需求意味着需要添加更多的工作节点。 - 添加额外的管理节点会降低写入性能,因为更多的节点必须确认更新Swarm状态的提议。这意味着更多的网络往返流量,会导致您的服务性能问题。如果您的Docker应用程序与主机系统混淆,这将影响管理器服务。Swarm任务将继续运行,但无法添加、更新或删除Swarm节点,并且无法启动、停止、移动或更新新的或现有任务。管理器和工作节点的隔离更安全。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接