Virtualbox中Kubernetes Worker节点处于NotReady状态排查求助
我之前在VirtualBox里搭双节点K8s集群时,也碰到过一模一样的问题——Master节点正常Ready,但Worker节点一直卡在NotReady状态,查kubelet日志发现是install-cni容器的错误,这基本都是Flannel网络插件部署出了问题,给你分享下我当时的排查和解决步骤:
第一步:定位Flannel Pod的状态
首先确认Worker节点上的Flannel DaemonSet Pod状态,因为install-cni是Flannel Pod里的一个初始化容器,它负责把CNI网络配置文件部署到节点上:
kubectl get pods -n kube-system -o wide | grep node
你会看到类似kube-flannel-ds-zjlvn的Pod,重点看它的STATUS列,如果是CrashLoopBackOff、Error或者Init:Error,那就是问题所在。
第二步:查看出错容器的日志
针对你提到的install-cni容器,直接查看它的日志就能找到具体错误:
kubectl logs kube-flannel-ds-zjlvn -n kube-system -c install-cni
同时也可以看看Flannel主容器的日志,确认后续网络初始化是否正常:
kubectl logs kube-flannel-ds-zjlvn -n kube-system -c kube-flannel
常见问题及解决方法
1. 镜像拉取失败(ImagePullBackOff)
这是国内环境最常见的问题,Flannel默认镜像在quay.io,网络不好拉取不到。手动替换成国内镜像仓库的镜像即可:
# 拉取阿里云镜像(对应你的K8s v1.10.2,选v0.11.0版本适配) docker pull registry.aliyuncs.com/google_containers/flannel:v0.11.0-amd64 # 打标签成官方镜像名,避免Pod拉取失败 docker tag registry.aliyuncs.com/google_containers/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64 # 删除异常的Flannel Pod,让DaemonSet重新创建 kubectl delete pod kube-flannel-ds-zjlvn -n kube-system
2. CNI配置文件缺失
如果install-cni容器因为某种原因没把配置写到/etc/cni/net.d目录,手动创建配置文件即可:
在Worker节点上执行:
cat <<EOF > /etc/cni/net.d/10-flannel.conf { "name": "cbr0", "type": "flannel", "delegate": { "isDefaultGateway": true } } EOF # 重启kubelet让配置生效 systemctl restart kubelet
3. 节点间网络端口未开放
Flannel使用VXLAN协议时需要开放UDP 8472端口,确保Master和Worker节点之间这个端口能正常通信:
# 测试环境可以直接关闭防火墙(生产环境建议按需开放端口) systemctl stop firewalld systemctl disable firewalld # 或者单独开放端口 firewall-cmd --add-port=8472/udp --permanent firewall-cmd --reload
另外还要确保两个节点能互相ping通,iptables没有拦截跨节点的流量。
最后验证
等几分钟后执行kubectl get nodes,如果Worker节点的STATUS变成Ready,就说明问题解决了。同时可以检查Flannel Pod的状态:
kubectl get pods -n kube-system
确保所有kube-flannel-ds开头的Pod都处于Running状态。
内容的提问来源于stack exchange,提问作者manish sehgal

