我正在学习Docker,并且做了一个简单的练习:
当我向两台计算机发送HTTP请求时,都会得到正确的答复。
这对我来说很奇怪。我认为只有Leader节点才能处理请求,因为Swarm中有一些负载平衡。我以为如果某个节点发生故障,Swarm应该自动将请求重定向到另一个节点,而Leader节点就是发生这种情况的地方。但是看起来Swarm的工作方式不同。
Swarm集群背后的想法是什么? Kubernetes是否不同?
答案 0 :(得分:1)
在Docker群中,领导者负责决定如何在节点中安排容器以及如何设置容器,以便将流量转发给它们。但是,流量本身并没有流向领导者,而是流向了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中的流量不会通过主服务器(除非您正在调用kube-apiserver),而是直接到节点。