排查Raspberry Pi集群kube-controller-manager CrashLoopBackOff故障
核心故障原因
从日志提示Failed to set statusUpdateNeeded to needed true, because nodeName="k8s-controller" does not exist可以确定:控制节点k8s-controller未被Kubernetes集群正确识别或注册,导致依赖节点状态的kube-controller-manager进程启动失败;同时flannel插件因无法获取节点网络标识,也进入崩溃循环。容器退出码2、存活探针失败均为进程反复崩溃的连锁反应。
分步解决办法
检查节点注册状态
执行命令kubectl get nodes,确认集群中是否存在k8s-controller节点。如果无此节点,说明控制节点未成功加入集群,或主机名与集群配置不匹配。校准控制节点主机名配置
- 在控制节点上设置正确主机名:
sudo hostnamectl set-hostname k8s-controller - 编辑
/etc/hosts文件,添加以下条目(替换x.x.x.x为控制节点实际IP):127.0.0.1 k8s-controller x.x.x.x k8s-controller
保存后退出,确保主机名解析无问题。
- 在控制节点上设置正确主机名:
重置并重新初始化控制节点
- 停止kubelet服务:
sudo systemctl stop kubelet - 清理Kubernetes残留组件:
kubeadm reset -f - 删除Flannel残留网络接口:
sudo ip link delete cni0; sudo ip link delete flannel.1 - 重新初始化集群,指定节点名称:
(kubeadm init --node-name k8s-controller --pod-network-cidr=10.244.0.0/16--pod-network-cidr需与Flannel插件的网段配置保持一致) - 配置kubectl权限:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 停止kubelet服务:
部署适配ARM架构的Flannel插件
Raspberry Pi 4为ARM64架构,需使用对应版本的Flannel镜像。创建本地配置文件kube-flannel.yml,将镜像地址指定为quay.io/coreos/flannel:v0.20.2-arm64,然后执行:kubectl apply -f kube-flannel.yml验证修复效果
执行kubectl get pods -n kube-system,确认kube-controller-manager和kube-flannel相关Pod状态转为Running;同时执行kubectl get nodes,确保k8s-controller节点处于Ready状态。
内容的提问来源于stack exchange,提问作者peterlandis

