docker引擎swarm模式需要服务发现

2024-02-07

我对 docker swarm 感到困惑。据我所知,在 docker 引擎为 swarm 模式提供本机支持之前,运行 swarm 的旧方法是在容器中运行管理器和工作人员。旧的容器化 Swarm 的文档解释了如何使用 consul、etcd 或 Zookeeper 设置服务发现。服务发现是必要的,因为服务在随机端口上运行以避免冲突,对吧?

docker 引擎群模式的文档没有解释如何设置服务发现。现在我很困惑,该机制是否包含在群体模式中,或者文档是否不完整。

在哪里可以找到关于集群模式的清晰、最新的解释,以及它与服务发现等概念的关系?


虽然 @MagicMicky 给出的答案是正确的,但我将尝试添加更多关于 Swarm Legacy 和 Swarm Mode 之间关于服务发现的差异的上下文:

Note:我将 Swarm 的第一个版本称为群体遗产新版本为 Swarmmode.

使用 Swarm Legacy 进行服务发现

Using 虫群遗产,你必须部署自己的动物园管理员, Consul or Etcd管理集群拓扑,这意味着节点被分配为集群中的代理。这些分布式键/值存储用于健康监控和分布式锁定目的。 Swarm 不使用它们来管理服务发现,而只是集群节点发现和监控.

如果您希望通过 Swarm 部署容器的服务发现,则必须设置外部 Consul/Registrator/DNS,并在这些解决方案上注册您的服务。我想到的一个专门为 Swarm 构建的系统的例子是Wagl https://github.com/ahmetalpbalkan/wagl.

使用更高版本的 docker 引擎(1.11),在创建覆盖网络并将容器分配到覆盖网络时,您还可以访问内置 DNS。前1.11,服务发现的(有争议的)机制是通过附加服务条目/etc/hosts.

无论如何,覆盖网络并未直接包含在 Swarm 中,这是一个需要自己设置的独立组件。它更像是一个“附加组件”。

一般来说,Swarm 第一个版本背后的“哲学”是提供一些简单而可靠的东西来管理跨主机的容器,如果您需要添加更多功能,例如服务发现或负载平衡,您必须推出自己的功能。


使用 Docker Swarm 模式进行服务发现

从 Docker 开始1.12服务发现直接包含在docker中通过群体模式嵌入式 DNS 和负载均衡器。这意味着不再需要外部组件来管理服务发现和负载平衡。

当您创建服务并将其分配给覆盖层时,会注册其 DNS 名称,并且覆盖层的其他服务部分可以通过其服务名称访问它。使用内置负载均衡器可以对为服务运行的任务进行正确的负载平衡。

对于 Swarm 模式,“理念”更多的是包括开箱即用的所有内容(证书管理和轮换、服务发现、负载平衡、通过内置数据存储的集群元数据、网络、调度),以确保您拥有最完整的系统从第一天起就成为可能。如果需要,您仍然可以交换和更换某些组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker引擎swarm模式需要服务发现 的相关文章

随机推荐