温馨提示×

CentOS下Kubernetes故障如何排查

小樊
63
2025-10-13 11:37:16
栏目: 智能运维

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列(如PendingErrorCrashLoopBackOff)。
  • 查看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组件日志

组件日志是故障定位的关键线索,重点查看以下服务的日志:

  • kubeletjournalctl -u kubelet -f(实时查看kubelet日志,常见问题是节点无法注册、容器运行时故障)。
  • kube-proxyjournalctl -u kube-proxy -f(网络代理问题,如Service无法访问)。
  • API Serverjournalctl -u kube-apiserver -f(集群控制平面问题,如认证失败、请求超时)。
  • Controller Manager/Schedulerjournalctl -u kube-controller-manager -fjournalctl -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/内存使用:使用tophtopkubectl top nodeskubectl top pods查看资源使用情况(若节点资源耗尽,需扩容或调整Pod的资源请求/限制)。
  • 磁盘空间:使用df -h检查节点磁盘空间(尤其是/var/lib/docker/var/lib/kubelet目录,若磁盘空间不足,需清理旧镜像或日志)。
  • inode使用:使用df -i检查inode使用率(若inode耗尽,即使磁盘空间充足也无法创建文件)。

6. 验证配置文件的正确性

配置错误是导致故障的常见原因,需检查以下配置:

  • kubeconfig文件:使用cat ~/.kube/config查看配置是否正确(重点检查server地址、certificate-authority-datauserclient-certificate-dataclient-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类型的事件,如FailedSchedulingUnhealthyNodeNotReady)。

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)寻求帮助,同时保留好故障发生时的日志和操作记录,便于进一步分析。

0