Docker 服务陷入新状态(Swarm)

标签 docker networking docker-swarm

我的 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

您可以看到当前状态== 22 小时前的新状态。如果我尝试检查日志,它们是空的。检查该服务也无济于事(无关)。

如果我停止某些服务,标记为“New”状态的服务可能会在第一次重试后自行启动。看来我无论如何都已经达到了极限。

我在网上跟踪了一些文档,但没有关于这个问题的明确信息。 如果您能给我一些链接,我们将不胜感激。

今天,在我看来,我怀疑我在 Swarm 中创建的网络 (--driver=overlay) 的 IP 范围不足,无法为容器提供足够的 IP。这些网络是 /24 子网。有没有什么方法可以“刷新”IP 保留,以便重新初始化网络而不重新创建 Docker 网络?

经过调查,有两种类型的服务可以达到此 New 状态,并且它们位于 2 个相同的网络上。

docker网络检查的结果:

[
    {
        "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 版本:

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 network limitations

You should create overlay networks with /24 blocks (the default), which limits you to 256 IP addresses, when you create networks using the default VIP-based endpoint-mode. This recommendation addresses limitations with swarm mode. If you need more than 256 IP addresses, do not increase the IP block size. You can either use dnsrr endpoint mode with an external load balancer, or use multiple smaller overlay networks. See Configure service discovery for more information about different endpoint modes.

-- https://docs.docker.com/engine/reference/commandline/network_create/#overlay-network-limitations

编辑2:

基于Flavio 'fcrisciani' Crisciani's comment关于这个问题Swarm Mode at Scale #30820 ,我将尝试在我的服务上添加选项 --endpoint-mode=dnsrr

最佳答案

每个服务和任务都会获取 IP 地址,因此服务连接的覆盖网络应该具有可以支持足够 IP 地址的子网。

使用以下命令创建具有更大范围支持的 IP 的 docker 网络:

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 服务陷入新状态(Swarm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51078764/

相关文章:

api - Docker 和 Kubernetes 内 API 的端点路径

php - 如何在 Docker 容器中为 PHP 安装 mod_rewrite 模块?

docker - 在Centos 7.1上升级到Docker 1.9

c# - 通过 TCP 将图像从 C# 发送到 Python 不起作用

javascript - Chrome 无法连接到 websocket 服务器(操作码 -1) "handshake was canceled"

docker - Docker群问题连接在管理上被拒绝

docker - 在Jenkins服务器中调试Docker构建

docker - Nginx URI路径端口使用Docker重定向意外行为

networking - ixgbe : setting the number of RX/TX queues

docker - 如何使用 Docker 1.12 swarm mode 部署 consul