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