【问题标题】:Failed to allocate network resources分配网络资源失败
【发布时间】:2020-07-06 06:37:57
【问题描述】:

Docker-CE 19.03.8 群初始化 设置: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 天后。由于没有免费的 VIP,因此无法启动新服务。 我在日志中看到以下行:

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 时,无法部署新容器。他们被困在 NEW 状态。

有没有人用过这样的东西?或者有人可以帮助我吗? 我们认为,问题与 10.0.0.0/24(我们的入口)地址的释放有关。

【问题讨论】:

    标签: docker networking docker-swarm virtual-ip-address


    【解决方案1】:

    如果您看到您的容器卡在 NEW 状态,您可能会受到此问题的影响:https://github.com/moby/moby/issues/37338 报告的cintiadr

    Docker 堆栈无法在覆盖网络上分配 IP,并卡在新的当前状态 #37338

    复制它:

    创建一个 swarm 集群(1 个管理器,1 个工作器)。我创建了 AWS t2.large Amazon 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 完成

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

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

    如何避免这个问题?

    如果在删除节点之前排空并耐心等待所有容器终止,看来这个问题是完全避免的。

    【讨论】:

      【解决方案2】:

      您是否尝试过stop 并重新start 码头恶魔?

      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
      

      【讨论】:

      • 我试过你的例子。但同样的问题。我们现在使用带有 /16 前缀的成本入口网络。因此 docker 将在 VIP 池变空之前重新启动。但是谢谢你的回答
      猜你喜欢
      • 2014-08-15
      • 2017-09-16
      • 2020-02-17
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2016-12-28
      • 2019-11-11
      • 2010-09-06
      相关资源
      最近更新 更多