Docker服务停留在新状态(群) [英] Docker service stuck in New state (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
状态的服务可能会在第一次重试后自行启动。不管怎么说,我似乎已经达到了极限。
我在网上查阅了一些文档,但没有任何关于这个问题的明确信息。如果您能给我指出一些链接,我们将非常欢迎。
今天,在我看来,我在群(--driver=overlay
)中创建的网络可能是IP范围不足,无法为容器分配足够的IP。这些网络是/24
个子网。有没有办法"刷新"IP预留,以便在不重新创建Docker网络的情况下重新初始化网络?
经过调查,有两种类型的服务可以达到此New
状态,并且它们位于两个相同的网络上。
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。
覆盖网络限制
当您使用默认的基于VIP的端点模式创建网络时,您应该使用/24块(默认设置)创建覆盖网络,这会将您的IP地址限制为256个。本建议针对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
。
推荐答案
每个服务和任务都获取IP地址,因此这些服务所连接的覆盖网络应该具有能够支持足够多IP地址的子网。
使用以下命令创建支持IP范围更大的扩展底座网络:
docker network create --driver=overlay --subnet=10.10.0.0/16 <network_name>
参考资料:
https://github.com/docker/for-aws/issues/104#issuecomment-331563445
https://docs.docker.com/engine/reference/commandline/network_create/
这篇关于Docker服务停留在新状态(群)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!