无法分配网络资源


Docker CE 19.03.8Swarm初始化设置:1个管理器节点,仅此而已。

我们每天部署许多新堆栈,有时我会看到以下行:

evel=error msg="Failed to allocate network resources for node sdlk0t6pyfb7lxa2ie3w7fdzr" error="could not find network allocator state for network qnkxurc5etd2xrkb53ry0fu59" module=node node.id=yp0u6n9c31yh3xyekondzr4jc

2至3天后。由于没有免费贵宾,无法启动任何新服务。我在日志中看到以下行:

level=error msg="Could not parse VIP address  while releasing"                                                                                                                                       
level=error msg="error deallocating vip" error="invalid CIDR address: " vip.addr= vip.network=oqcsj99taftdu3b0t3nrgbgy1                                                                              
level=error msg="Event api.EventUpdateTask: Failed to get service idid0u7vjuxf2itpv8n31da57 for task 6vnc8jdkgxwxqbs3ixly2i6u4 state NEW: could not find service idid0u7vjuxf2itpv8n31da57" module=node ...
level=error msg="Event api.EventUpdateTask: Failed to get service sbjb7nk0wk31c2ayg8x898fhr for task noo21whnbwkyijnqavseirfg0 state NEW: could not find service sbjb7nk0wk31c2ayg8x898fhr" module=node ...
level=error msg="Failed to find network y73pnq85mjpn1pon38pdbtaw2 on node sdlk0t6pyfb7lxa2ie3w7fdzr" module=node node.id=yp0u6n9c31yh3xyekondzr4jc 

我们尝试使用调试模式对此进行调查。以下是一些让我印象深刻的线路:

level=debug msg="Remove interface veth84e7185 failed: Link not found"
level=debug msg="Remove interface veth64c3a65 failed: Link not found"
level=debug msg="Remove interface vethf1703f1 failed: Link not found"
level=debug msg="Remove interface vethe069254 failed: Link not found"
level=debug msg="Remove interface veth2b81763 failed: Link not found"
level=debug msg="Remove interface veth0bf3390 failed: Link not found"
level=debug msg="Remove interface veth2ed04cc failed: Link not found"
level=debug msg="Remove interface veth0bc27ef failed: Link not found"
level=debug msg="Remove interface veth444343f failed: Link not found"
level=debug msg="Remove interface veth036acf9 failed: Link not found"
level=debug msg="Remove interface veth62d7977 failed: Link not found"

level=debug msg="Request address PoolID:10.0.0.0/24 App: ipam/default/data, ID: GlobalDefault/10.0.0.0/24, DBIndex: 0x0, Bits: 256, Unselected: 60, Sequence: (0xf7dfeeee, 1)->(0xedddddb7, 1)->(0x77777777, 3)->(0x77777775, 1)->(0x77ffffff, 1)->(0xffd55555, 1)->end Curr:233 Serial:true PrefAddress:<

当UNSELECTED部分变为0时,无法部署新容器。他们被困在新的状态。

有人说过这样的话吗?或者有人能帮我吗?我们认为,这个问题与10.0.0.0/24(我们的入口(地址的发布有关。

你有没有尝试过stop和重新start这个docker恶魔?

sudo service docker stop
sudo service docker start

此外,您可能会发现在https://dockerswarm.rocks/

我通常使用此序列来更新服务

export DOMAIN=xxxx.xxxxx.xxx
docker stack rm $service_name
export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}')
# export environment vars if needed
# update data if needed
docker node update --label-add $service_name.$service_name-data=true $NODE_ID
docker stack deploy -c $service_name.yml $service_name

如果您看到您的容器卡在NEW状态,那么您可能会受到此问题的影响:https://github.com/moby/moby/issues/37338据信蒂亚德报道:

Docker堆栈无法在覆盖网络上分配IP,并被困在NEW当前状态#3738

复制:

创建一个集群(1个管理者,1个工作者(。我创建了AWS t2.大型亚马逊linux实例,使用他们的文档安装了docker,版本18.06.1-ce.

# Deploy a new overlay network from a stack (docker-network.yml)
$ ./deploy-network.sh

Deploy 60 identical services attaching to that network - 3 replicas each - from stacks (docker-network.yml)
$ ./deploy-services.sh

您可以验证所有服务是否都在愉快地运行。

现在让我们把工人带下来。

运行:

docker node update --availability drain <node id> && docker node rm --force <node id>

注意:drain是一个异步操作(我不知道(,所以要重现这个用例,你不应该等待drain完成

创建一个新的工作者(全新的节点/机器(,并加入集群。您将看到,实际上很少有服务能够启动。由于没有可用的IP,所有其他的都将持续被拒绝。

在过去的版本中(我相信是17(,容器不会被拒绝(而是被卡在新的版本中(。

如何避免这个问题

如果在删除节点之前耗尽并耐心等待所有容器终止,则似乎可以完全避免此问题。

最新更新