gpt4 book ai didi

Docker 服务陷入新状态(Swarm)

转载 作者:行者123 更新时间:2023-12-02 11:33:27 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com