首先确认集群的基础状态是否正常,这是排查故障的第一步:
kubectl get nodes命令,确保所有节点显示为Ready(若为NotReady,需进一步检查kubelet服务)。kubectl get componentstatuses检查etcd、kube-apiserver、kube-controller-manager、kube-scheduler等核心组件的健康状况(如kube-apiserver显示False,需排查API Server是否启动)。Pod是Kubernetes的核心工作单元,异常Pod是故障的常见表现:
kubectl get pods --all-namespaces,关注STATUS列(如Pending、Error、CrashLoopBackOff)。kubectl describe pod <pod-name> -n <namespace>,查看Events部分(如镜像拉取失败、资源不足、探针超时等)。kubectl logs <pod-name> -n <namespace>(若Pod有多个容器,需指定-c <container-name>);若Pod已崩溃,可添加--previous查看上一个实例的日志。组件日志是故障定位的关键线索,重点查看以下服务的日志:
journalctl -u kubelet -f(实时查看kubelet日志,常见问题是节点无法注册、容器运行时故障)。journalctl -u kube-proxy -f(网络代理问题,如Service无法访问)。journalctl -u kube-apiserver -f(集群控制平面问题,如认证失败、请求超时)。journalctl -u kube-controller-manager -f、journalctl -u kube-scheduler -f(资源调度或控制器异常)。网络问题是Kubernetes集群的高频故障,需检查以下方面:
ping <node-ip>测试节点之间的网络连通性(确保防火墙或安全组允许Kubernetes端口通信,如6443、10250等)。curl -k https://<master-ip>:6443/api/v1/namespaces/default/pods,验证是否能访问API Server(若失败,需检查kubeconfig配置或防火墙规则)。kubectl get pods --all-namespaces | grep cni查看CNI插件(如Flannel、Calico)的Pod状态(若异常,需重启插件或检查配置)。kubectl exec -it <pod-name> -n <namespace> -- /bin/sh,然后执行ping <other-pod-ip>或wget http://<service-name>.<namespace>.svc.cluster.local。资源不足会导致Pod无法调度或频繁重启:
top、htop或kubectl top nodes、kubectl top pods查看资源使用情况(若节点资源耗尽,需扩容或调整Pod的资源请求/限制)。df -h检查节点磁盘空间(尤其是/var/lib/docker、/var/lib/kubelet目录,若磁盘空间不足,需清理旧镜像或日志)。df -i检查inode使用率(若inode耗尽,即使磁盘空间充足也无法创建文件)。配置错误是导致故障的常见原因,需检查以下配置:
cat ~/.kube/config查看配置是否正确(重点检查server地址、certificate-authority-data、user的client-certificate-data和client-key-data)。kubectl apply -f <config-file>.yaml前,先执行kubectl apply --dry-run=client -f <config-file>.yaml验证配置语法(避免语法错误导致配置无法生效)。openssl x509 -in /path/to/certificate.crt -text -noout检查证书是否过期(如kube-apiserver证书、kubelet证书)。Kubernetes事件记录了集群中的重要变化和故障信息:
kubectl get events --sort-by=.metadata.creationTimestamp查看集群事件(按时间排序,重点关注Warning类型的事件,如FailedScheduling、Unhealthy、NodeNotReady)。借助工具快速定位问题:
kubectl describe node <node-name>可查看节点的容量、分配情况、条件状态)。kubectl debug -it <pod-name> -n <namespace> --image busybox --target <container-name>),用于检查容器内的文件系统、进程等。Kubernetes组件版本不兼容会导致故障:
kubectl version --short查看客户端和服务端的版本(确保客户端版本与服务端版本相差不超过1个小版本,如服务端为1.28.x,客户端可为1.27.x-1.29.x)。若故障出现在最近的操作(如升级、配置修改)后,尝试回滚:
kubeadm upgrade revert回滚Kubernetes版本(需提前备份重要数据)。kubectl apply -f <old-config-file>.yaml)。通过以上步骤,可以系统地排查CentOS下Kubernetes的常见故障。若问题仍未解决,建议查阅Kubernetes官方文档或在社区(如Stack Overflow、Kubernetes Slack)寻求帮助,同时保留好故障发生时的日志和操作记录,便于进一步分析。