zoukankan      html  css  js  c++  java
  • 「Bug」K8s 节点的 IP 地址泄漏,导致 IP 被耗尽

    Bug 描述

    部署 Pod 后发现 Pod 无法启动,Kubernetes 报错:

    Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "22ea7018a9a1389495e222cfg44e6fcda68c0ed91042c191074aa8566ee27e75" network for pod "xxxx-hwdtt": NetworkPlugin cni failed to set up pod "xxxx-hwdtt_192-168-1-158" network: failed to allocate for range 0: no IP addresses available in range set: 10.42.11.1-10.42.11.254
    

    根据搜索到的博客,在节点上执行如下命令:

    cd /var/lib/cni
    ls k8d-pod-network  # 使用 rke 部署的集群,IP 信息在这个文件夹里
    
    ls 10.42.11.*  | wc -l  # 统计已分配的 IP 数量
    

    上述命令输出很多的 IP 地址,使用 wc -l 统计发现 IP 数量为 253.

    查看 Node 的 PodCIDR 网段:

    kubectl get node <node-name> -o yaml | grep podCIDR
    

    得到网段为 10.42.11.0/24,IP 范围为 10.42.11.1-10.42.11.254,共 254 个。(因为要去掉广播地址 10.42.11.255 和网段标识地址 10.42.11.0

    该网段的默认网关还需要占用一个 IP,253+1=254,IP 耗尽。

    可节点上的 Pod 一共才 96 个。这说明 Pod 删除后,IP 没有被回收。

    修复方法

    临时方法:删除掉 /var/lib/cni 中所有的 IP 地址,每个 IP 都是一个文件。

    具体的原因分析

    这个应该是 CNI 网络插件自身的 Bug。具体而言我有更换过 CNI 网络插件,没多久后就 IP 溢出了。可能更换 CNI 插件后,新插件不会管以前的 Pod IP,会尝试重新进行 IP 分配?

    相关 Issue

  • 相关阅读:
    3.2.8.1 打印与否
    3.2.8 sed 的运作
    3.2.7.1 替换细节
    3.2.7 基本用法
    3.2.6 在文本文件里进行替换
    3.2.5 程序与正则表达式
    pgm2
    pgm6
    pgm7
    pgm8
  • 原文地址:https://www.cnblogs.com/kirito-c/p/12468347.html
Copyright © 2011-2022 走看看