docker - Docker Swarm 中的负载均衡是如何工作的?与 Kubernetes 有什么区别?

标签 docker kubernetes docker-swarm

我正在学习 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>

然后您的所有节点都将在已发布的端口上接收流量并将其转发到容器。

swarm

在上述情况下,您可以从外部负载均衡器将流量转发到端口 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/

相关文章:

docker 群 : 'build' configuration in docker compose file ignored during stack deployment

java - Docker主机之间的Java类路径排序不一致

docker - 如何在Docker上运行Thanos?

kubernetes - 通过队列动态创建带有 kubernetes 的 pod

kubernetes - 如何使用上下文为 ServiceAccount 创建角色

docker - 如何使用docker-machine用alpine而不是boot2docker创建docker主机?

node.js - Docker 不会将文件更改从主机传播到容器

docker - Docker,防火墙在哪里?

kubernetes - StatefulSet中的Pod卡在ContainerCreating状态中-FailedCreatePodSandBox

Azure DevOps - 本地部署管道