我以前做过一点 Docker Swarm,它相当简单 - 在一个节点上创建一个 Swarm Manager,在另外两个节点上创建 Swarm Workers,坚持使用单个 Manager。我想了解有关 Swarm 的更多信息,所以我正在关注 Nigel Poulton 在 Pluralsight 上制作的视频系列“Docker Swarm:原生 Docker 集群”。
但是,这些视频比我两年前的 Swarm 体验要复杂得多,可能是因为它们运行在旧版(“独立”)Swarm 上。我想问一个澄清问题,看看我现在学习的材料是否太过时而没有价值。(我将在下面描述视频课程的内容,这样人们就不需要熟悉它就可以回答这个问题)。
该系列视频迄今已有四年历史,展示了如何:
- 安装高可用性发现服务(支持 Consul、Etcd 和 ZooKeeper,本文选择 Consul)。它使用程序/领事截至今天,该图像已有五年未更新
- 在 Consul 服务器上设置三个 Swarm Manager 节点
- 设置三个 Swarm Worker 节点,并在这些节点上安装 Consul 客户端
作者承认这一切都相当复杂,并暗示,在拍摄视频时,核心 Docker 可能会在未来简化这些内容。他说(构建 Swarm 集群 -> 安装 HA 发现服务 -> 5:39):
我甚至敢大胆猜测,在某个时候,Swarm 甚至可能不需要我们手动进行任何发现后端工作。只是因为这有点麻烦,而且如果我对 Docker 的员工有一点了解的话,那就是他们都一心想为我们提供这种顺畅、轻松的 Docker 体验,而这部分目前还没有实现。
如果我没看错的话,这个特征看起来就是实际发生的情况。来自手册:
您正在查看旧版独立 Swarm 的文档。这些主题描述了独立 Docker Swarm。在 Docker 1.12 及更高版本中,Swarm 模式与 Docker Engine 集成。大多数用户应该使用集成 Swarm 模式。
不可否认,我之前使用 Swarm 的经验是只使用一个管理器,但据我所知,只需使用 就可以将管理器添加到现有的木筏中docker swarm join-token
。
那么,对于我的问题是:Docker Swarm 的这一功能演变让我怀疑 Consul 是否对管理 Swarm 本身有任何价值。我能做到吗?我应该吗?它是否比集成的 Raft 共识系统提供了更多功能?这种学习材料现在有害吗?
(补充:我看过这位作者的几个视频,它们非常棒——如果这个视频过时了,那就超出了他的控制范围。如果材料需要重新拍摄,则课程/平台所有者需要安排)。
答案1
Docker Swarm 有两种变体。Classic/Legacy 版本可以使用外部键/值存储,如 Consul。该版本不太可能在未来收到任何更新,并且该仓库最近已重命名为“classicswarm”,以帮助减少一些混淆。
集成版本是 Swarm Mode,基于 swarmkit 项目。它不需要任何外部键/值存储,当您启用 Swarm Mode 时,尝试在 docker 引擎中为覆盖网络配置一个键/值存储将会失败,因为它使用自己的基于 raft 的解决方案在内部控制键/值数据库。
因此没有必要使用 Consul,并且任何未以此开头的指南docker swarm init
都应被视为过时的指南而被忽略。
答案2
我真的很抱歉造成了这样的混乱......我会考虑让这个旧视频退役或者更新。
对于 Swarm,您应该查看以下相关部分:
- Docker 入门
- Docker 深度探索
由于这两种方法都使用较新的群体模式它已集成到 Docker 引擎中,并且不需要任何旧的 consul 疯狂功能。
如有任何疑问,请随时联系我@nigelpoulton。