【发布时间】:2018-06-28 09:01:34
【问题描述】:
我的 Docker Swarm(由 3 名经理和 5 名工人组成的集群)遇到了一个奇怪的问题。我现在有许多正在运行的服务,当我接近 100 个服务(并且复制超过 110 个服务)时,我想要运行的新服务将无法启动。
当我列出服务时,我有这个:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
alam7whfn1xe service_name.1 some_image Running New 22 hours ago
你可以看到CURRENT STATE == New 22 hours ago。如果我尝试检查日志,它们是空的。检查服务也无济于事(无关紧要)。
如果我停止某些服务,带有New 状态标记的服务可能会在第一次重试后自行启动。无论如何,我似乎达到了极限。
我在网络上跟踪了一些文档,但对此问题没有任何明确的说明。 如果你能给我一些链接,欢迎你。
今天,在我看来,我怀疑我在 Swarm (--driver=overlay) 中创建的网络的 IP 范围不足,无法为容器提供足够的 IP。这些网络是/24 子网。有没有办法“刷新” IP 预留以便在不重新初始化 Docker 网络的情况下重新初始化网络?
经过调查,有两种类型的服务可以达到这种New 状态并且它们在2个相同的网络上。
docker network inspect的结果:
[
{
"Name": "network_name",
"Id": "okbrl5twyheq32ht3zw5l00gs",
"Created": "0001-01-01T00:00:00Z", <- this is the real date, strange isn't it?
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.16.2.0/24",
"Gateway": "172.16.2.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": null,
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4097"
},
"Labels": null
}
]
另外,docker version:
Client:
Version: 17.06.2-ce
API version: 1.30
Go version: go1.8.3
Git commit: cec0b72
Built: Tue Sep 5 20:00:06 2017
OS/Arch: linux/amd64
Server:
Version: 17.06.2-ce
API version: 1.30 (minimum version 1.12)
Go version: go1.8.3
Git commit: cec0b72
Built: Tue Sep 5 19:58:57 2017
OS/Arch: linux/amd64
Experimental: false
注意:我现在不想更新 Docker。
编辑 1:
我再次阅读了Docker documentation about networks,他们提到了 Moby 的 Github 项目 Swarm Mode at Scale #30820 上的一个未解决问题。
Overlay 网络限制
当您使用默认的基于 VIP 的端点模式创建网络时,您应该使用 /24 块(默认)创建覆盖网络,这将您限制为 256 个 IP 地址。此建议针对limitations with swarm mode。如果您需要超过 256 个 IP 地址,请不要增加 IP 块大小。您可以将 dnsrr 端点模式与外部负载平衡器一起使用,也可以使用多个较小的覆盖网络。有关不同端点模式的更多信息,请参阅Configure service discovery。
-- https://docs.docker.com/engine/reference/commandline/network_create/#overlay-network-limitations
编辑 2:
基于问题Swarm Mode at Scale #30820上的Flavio 'fcrisciani' Crisciani's comment,我将尝试在我的服务中添加选项--endpoint-mode=dnsrr。
【问题讨论】:
标签: docker networking docker-swarm