Docker服务停留在新状态(群) [英] Docker service stuck in New state (Swarm)

查看:24
本文介绍了Docker服务停留在新状态(群)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的码头群(由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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆