我过去做过一点 Docker Swarm,它非常简单——在一个节点上创建一个 Swarm Manager,在另外两个节点上创建 Swarm Workers,坚持使用一个 Manager。我想了解更多关于 Swarm 的信息,因此我正在关注 Pluralsight 上 Nigel Poulton 的视频系列“Docker Swarm:本地 Docker 集群”。
然而,这些视频比我两年前的 Swarm 体验要复杂得多,可能是因为它们运行在旧(“独立”)版本的 Swarm 上。我想问一个澄清的问题,看看我现在学习的材料是否过于过时而不值得。(我将在下面描述视频课程的内容,因此无需熟悉即可回答问题)。
这个视频系列,现在已经四岁了,展示了如何:
- 安装一个高可用的Discovery Service(支持Consul、Etcd和ZooKeeper,作者选择Consul)。它使用progrium/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 的经验只使用了一个 Manager,但据我了解,只需使用docker swarm join-token
.
那么对于我的问题:Docker Swarm 的这一特性演变让我想知道 Consul 是否为管理 Swarm 本身提供了任何价值。我可以做吗?我是不是该?它是否提供了比集成 raft 共识系统更多的功能?这种学习材料现在有害吗?
(旁白:我看过这个作者的几个视频,它们很棒——如果这个已经过时了,那是他无法控制的。如果材料需要重新拍摄,那就是课程/平台需要安排的业主)。
Docker Swarm 有两种变体。可以使用像 Consul 这样的外部键/值存储的 Classic/Legacy 版本。这不太可能在未来收到任何更新,并且最近将 repo 重命名为“classicswarm”以帮助减少一些混乱。
集成版本是基于 swarmkit 项目的 Swarm Mode。这不需要任何外部键/值存储,并且当您启用 Swarm 模式时,尝试在 docker 引擎中为覆盖网络配置一个将失败,因为它使用自己的基于 raft 的解决方案在内部控制键/值数据库。
因此,没有必要使用 Consul,任何没有开始的指南都
docker swarm init
应该被忽略为过时的。对于这种混乱,我真的很抱歉......我会考虑让这个较旧的视频退役或更新。
对于 Swarm,您应该观看以下相关部分:
由于这两种模式都使用集成到 Docker 引擎中的更新的Swarm 模式,并且不需要任何旧的 consul 疯狂。
如有任何问题,请随时联系我@nigelpoulton。