本文永久链接: https://www.xtplayer.cn/kubernetes/pod-not-run/

问题现象

在早期 rancher kubernetes 版本中,在新集群创建应用后可能会出现大批量的 Pod 处于 ContainerCreating 状态。如图:

通过 kubectl describe 查看应用的事件,提示无法获取 IP 地址:

查看 kubelet 服务日志,可以看到以下的错误信息:

问题分析

根据以上信息可以确定,因为主机不支持 ipv6 或者 ipv6 功能被禁用,导致 flannel 在初始化容器网卡的时候一直无法初始化容器网卡的 IPV6 相关配置,从而导致容器无法正常获取 IP 地址。

处理方法

经过查询可以找到这是一个已知的 BUG,在不考虑更新 rancher kubernetes 版本的前提下,则需要在主机上强制启用 ipv6 功能。

centos

  1. 编辑 /etc/default/grub,如果之前配置了 ipv6.disable=1,则把它改为 ipv6.disable=0;如果之前没有添加 ipv6.disable 这个参数,则在现有的配置上添加 ipv6.disable=0

    示例如下:

  2. 然后执行以下配置更新 grub 配置

    grub2-mkconfig -o /boot/grub2/grub.cfg

  3. 最后 reboot 重启系统

Ubuntu

  1. 编辑 /etc/default/grub,如果之前配置了 ipv6.disable=1,则把它改为 ipv6.disable=0;如果之前没有添加 ipv6.disable 这个参数,则在现有的配置上添加 ipv6.disable=0

    示例如下:

  2. 然后执行以下配置更新 grub 配置

  3. 最后 reboot 重启系统

参考链接

https://github.com/containernetworking/cni/issues/569

https://github.com/rancher/flannel-cni/pull/8