错误提示

  • pod一直不能运行,一直在creating,查看日志是没有ip可以分配了
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "5d30910b137cffec48828bcd2cc282a69533f8f1f15cc501698619175370db20": plugin type="calico" failed (add): failed to allocate for range 0: no IP addresses available in range set: 10.42.2.1-10.42.2.254

-------

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "1d81d359ca4f2732ec945ba70def65853322c42a4513883f4bc9d34bff3d0652": plugin type="calico" failed (add): failed to allocate for range 0: no IP addresses available in range set: 10.42.2.1-10.42.2.254

原因

  • ip地址被分配完了, 查看/var/lib/cni/networks/k8s-pod-networ 确定没有ip了
  • 原因有2个
    1 . iptables 未安装在主机中 (我使用的主机是debian12,没有了iptables了)

    安装 iptables 或 xtables-nft 可以来解决这个问题

    2 . 默认情况下,Canal 通过在 /var/lib/cni/networks/k8s-pod-network 中为每个 IP 创建一个锁定文件来跟踪 pod IP。每个 IP 都属于一个 pod,一旦 pod 被删除,IP 就会被删除。然而,万一 containerd 无法跟踪正在运行的 pod,锁定文件可能会泄露,Canal 将无法再重用这些 IP。如果发生这种情况,你可能会遇到 IP 地址枯竭的错误

    有两种方法可以解决这个问题。你可以从该目录中手动删除未使用的 IP 或清空节点,运行 rke2-killall.sh,启动 rke2 systemd 服务并取消对节点的封锁。如果你需要执行这些操作,请通过 GitHub 报告问题,请确保说明问题是如何触发的。

解决办法

  • 安装 iptables 或 xtables-nft 可以来解决这个问题
  • 安装低版本的linux (debian11默认使用iptables)
  • 从该目录中手动删除未使用的 IP 或清空节点
cd /var/lib/cni/networks/k8s-pod-network/
sudo rm 10.*

官方说明

https://docs.rke2.io/known_issues
https://docs.rke2.io/zh/known_issues