我有两台笔记本电脑,Ubuntu-14和Mac(Big Sur),它们都安装了docker(支持集群)。
- 我使用Ubuntu作为我的Swarm管理器(和)Mac作为我的工作节点
- Ubuntu的私有IP是192.168.0.14(和)Mac的私有IP为192.168.0.11[私有IP可以在公共场合共享而没有任何问题,因为每个C类网络都有相同的IP:P]
- "docker swarm init——广告地址";是我用来让我的Ubuntu主机、管理器的命令,我在Mac中输入了join命令,使Mac节点作为工人加入Swarm
因此,在更高的级别上,我使用了docker-compose.yml(它只有1个python Web服务)。使用compose文件,我启动了一个";docker stack";然后复制";python网络服务";实例设置为5。所有这些操作都是在Manager节点中执行的。
-
Ubuntu管理器节点(也有2个容器实例,并且表现为工作者)(并且)Mac节点有3个";python web服务";。我已经建立了";端口";成为";80:1234";这意味着如果我击中主机的端口80;python应用程序Web服务端口";其是1234在容器内运行。
-
当我点击Manager IP(192.168.0.14:80)大约50次,并且当我检查Mac和Ubuntu中所有5个容器的日志时,我在Ubuntu中找到了所有的2个容器,每个容器都有25次点击(以循环方式),但是,我在Mac机器中找不到任何容器的日志。
这是预期的行为吗?
- 只有当我直接点击Mac机器(工作者)的IP地址(192.168.0.11:80)时,我才能获得Mac机器中存在的容器的日志/请求点击
因此,这里有两种类型的负载平衡,
-
当我点击(工作/管理器的)IP:端口时,只有该工作/管理者机器中存在的容器才会被负载平衡,并以循环方式提供服务(我可以看到这是使用的算法)。让我们将这种负载平衡类型命名为";集装箱级负载平衡器";
-
但是,当我达到192.168.0.14(Manager IP)时,我预计负载将在部署在2个节点上的所有5个容器中平衡。不知怎么的,这没用。让我们称之为";节点级负载均衡器";
我试着在谷歌上搜索了很多,但一无所获。大多数网站都使用外部技术,如Nginx、HaProxy负载均衡器来解决";节点级负载均衡器";。
docker自己不是有开箱即用的支持吗?
编辑1-根据Metin在评论部分的要求添加docker-compose.yml
docker compose.yml
version: '3'
services:
webservice:
image: python_ws_test
ports:
- '80:1234'
command: ["python", "app.py"]
主要问题是,我试图加入Linux节点和Mac节点,因为Mac的docker(我认为只有SWARM)有点坏了,如上所述,
- 在此评论中https://dev.to/aguedeney/comment/172d6(和)
- 随后线程(https://dev.to/natterstefan/docker-tip-how-to-get-host-s-ip-address-inside-a-docker-container-5anh)
Mac专用IP为192.168.0.11,但不知何故,192.168.65.3是Mac工作节点的IP。
我是怎么发现的?
点1
=>我用";swarm init";命令而没有任何";广告地址";或";lister addr";或等等;docker群加入";我得到的命令的IP地址为192.168.65.3。我不知道为什么,因为我的Mac主机IP是192.168.0.11。这不是预期的行为。
=>我在Ubuntu中也做了同样的事情,用";swarm init";原始命令和";docker群加入";我得到的命令的IP地址为192.168.0.14,这与ubuntu主机的IP地址相同,这是预期的行为。
点2
一旦部署了堆栈,我就尝试使用";docker网络检查$networkName";。Linux管理器节点具有作为"对等"节点的对等端;"本身";和192.168.65.3,因为我的Mac节点的IP是192.168.0.11,所以无法访问。但不知何故,当我使用";比例尺;在Manager节点(Ubuntu)中,docker Manager能够在Mac和Ubuntu中缩放容器。这很奇怪。
默认覆盖网络-行为
此外;docker堆栈部署";默认情况下,无论您在docker-compose.yml还是deploy命令中提到,都会创建一个覆盖入口网络。Docker管理器和节点在这个网络的顶部进行通信。
问题中提到的问题的答案
Docker提供开箱即用的支持;节点级负载平衡";?对我对Mac中的这种奇怪行为感到非常沮丧,我在Mac中安装了Ubuntu 20.04 VM,并尝试使用";Ubuntu 14.04";(独立的Laptop/Base OS)作为管理器,Ubuntu 20.04(虚拟机OS)作为工作节点。现在,我能够在两个节点之间实现负载平衡(我在工作节点中得到了命中),尽管我一直只命中管理器的IP。
如果我有更多的见解,我会在这里更新Mac崩溃的原因。任何已经知道这方面知识的人,请分享。