本文深度解析CentOS环境搭建Kubernetes集群时kubeadm init报错、节点无法加入、镜像拉取失败等6大高频故障场景,提供带真实错误日志分析的解决方案,并附赠防火墙配置与证书修复实用脚本。
kubeadm init卡在pull镜像阶段
当执行kubeadm init时出现ImagePullBackOff错误,九成是网络配置问题。先用ctr images pull
手动拉取pause镜像测试,若失败则检查:
- 是否忘记关闭swap:
swapoff -a && sed -i '/swap/s/^//' /etc/fstab
- 防火墙是否放行API Server端口:
firewall-cmd --add-port={6443,2379-2380,10250}/tcp --permanent
案例:某用户因未配置阿里云镜像加速,手动执行kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
后成功初始化。
Worker节点加入集群报x509证书错误
节点执行kubeadm join时提示certificate signed by unknown authority,通常是时间不同步或证书配置错误:
- 所有节点执行
chronyc sources
验证时间同步 - 检查master节点
/etc/kubernetes/pki
目录权限是否为600 - 重置集群后重新生成证书:
kubeadm reset -f && rm -rf /etc/kubernetes/pki/
案例:某企业集群因跨时区部署,安装chrony服务并配置NTP服务器后问题解决。
CoreDNS Pod始终处于Pending状态
部署完成后kubectl get pods显示coredns未就绪,重点排查网络插件:
- Flannel需要开启内核转发:
sysctl -w net.ipv4.ip_forward=1
- Calico需修改CIDR匹配pod网段:
kubectl -n kube-system set env daemonset/calico-node FELIX_IPTABLESREFRESHINTERVAL=60s
案例:某开发团队因未禁用NetworkManager,执行systemctl stop NetworkManager && systemctl disable NetworkManager
后网络恢复正常。
Service无法通过NodePort访问
当kubectl expose创建的Service无法外网访问时:
- 检查selinux状态:
setenforce 0
临时关闭 - 验证IPVS模块加载:
lsmod | grep ip_vs
- 查看kube-proxy日志:
journalctl -u kube-proxy -f
案例:某用户因iptables策略限制,添加规则iptables -P FORWARD ACCEPT
后成功暴露服务。
FAQ:高频问题速查手册
Q:重置集群后为何仍有残留配置?
A:需手动清理/var/lib/etcd
和/var/lib/kubelet
目录
Q:如何查看实时集群事件?
A:执行kubectl get events --sort-by='.metadata.creationTimestamp' -w