我正在学习 Docker,我做了一个简单的练习:
- 准备2台机器
- 在其上设置 Leader 和 Worker
- 使用 stack 命令部署了 2 个简单 Web 应用程序实例
当我向两台机器发送 HTTP 请求时,我得到了正确的回复。
这对我来说很奇怪。我认为只有 Leader 节点应该处理请求,因为 Swarm 中有一些负载平衡。我认为如果某个节点发生故障,Swarm 应该自动将请求重定向到另一个节点,而 Leader 节点就是发生这种情况的地方。但看起来 Swarm 的工作方式不同。
Swarm 集群背后的想法是什么? Kubernetes 有何不同?
最佳答案
在 Docker swarm 中,领导者负责处理如何调度节点中的容器以及如何设置它们以便将流量转发给它们的决策。但是,流量本身并不流向领导者,而是流向 Docker swarm ingress/network mesh
您可以通过命令行执行此操作:
$ docker service create \
--name <SERVICE-NAME> \
--publish published=8080,target=80 \
<IMAGE>
然后您的所有节点都将在已发布的端口上接收流量并将其转发到容器。
在上述情况下,您可以从外部负载均衡器将流量转发到端口 80
(容器公开端口)或端口 8080
(已发布)
Kubernetes 非常相似,但又不完全相同。 Services通过 LoadBalancer 暴露在外部或NodePort 。但是,您无法从外部直接访问 pod IP 地址,因为这些地址在外部看不到,这与上面 Docker swarm 示例中的 192.168.99.100:80
不同。此外,Kubernetes 中的流量不会通过 master(除非您调用 kube-apiserver),而是直接到达节点。
关于docker - Docker Swarm 中的负载均衡是如何工作的?与 Kubernetes 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53821472/