首页主机资讯Kubernetes在Ubuntu上的故障排查有哪些方法

Kubernetes在Ubuntu上的故障排查有哪些方法

时间2025-10-21 18:03:03发布访客分类主机资讯浏览513
导读:Kubernetes在Ubuntu上的故障排查方法 一、基础状态检查 查看节点状态:使用kubectl get nodes -o wide查看节点状态、IP及Kubernetes版本,确认是否有节点处于NotReady状态;若节点异常,用...

Kubernetes在Ubuntu上的故障排查方法

一、基础状态检查

  • 查看节点状态:使用kubectl get nodes -o wide查看节点状态、IP及Kubernetes版本,确认是否有节点处于NotReady状态;若节点异常,用kubectl describe node < 节点名> 查看详细事件(如kubelet未注册、CNI插件未就绪)。
  • 检查Kubernetes组件状态:通过kubectl get pods -n kube-system查看系统组件Pod(如kube-apiserveretcdkube-controller-manager)是否运行正常(Running状态),若有异常,用kubectl describe pod < 组件-pod-name> -n kube-system查看组件具体故障。

二、节点级故障排查(Ubuntu特定)

  • kubelet服务状态:使用systemctl status kubelet确认kubelet服务是否运行;若未运行,用systemctl start kubelet启动;若启动失败,用journalctl -u kubelet -f查看日志,重点关注证书过期、容器运行时异常(如containerd未启动)等问题。
  • 资源使用情况:用df -h /var/lib/kubelet检查kubelet数据目录磁盘空间(建议保留至少10%空闲),free -m查看内存使用(避免OOM导致Pod被杀死),top -p $(pgrep kubelet)监控kubelet进程CPU占用;若磁盘空间不足,清理旧日志或未使用的镜像。
  • 容器运行时检查:Ubuntu常用containerd作为容器运行时,用systemctl status containerd确认其运行状态;用ctr containers list查看容器列表,ctr logs < 容器ID> 查看容器日志,排查容器运行时故障。

三、网络故障排查

  • 基础网络连通性:在节点上用ping < API-Server-IP> 测试到Kubernetes API Server的网络连通性,用nc -zv < API-Server-IP> 6443检查API Server端口(默认6443)是否开放;若不通,检查节点防火墙(ufwiptables)规则或网络配置。
  • CNI插件状态:用kubectl get pods -n kube-system -l k8s-app=calico-node(以Calico为例)查看CNI插件Pod状态,若为Error,用kubectl logs < cni-pod-name> -n kube-system查看插件日志,排查网络插件配置错误或依赖问题(如kubelet网络配置不正确)。
  • 网络策略与配置:用kubectl get networkpolicies检查是否有网络策略限制了Pod或Service之间的通信;用cat /etc/resolv.conf确认节点DNS配置正确(如指向CoreDNS的ClusterIP),避免DNS解析失败。

四、Pod故障排查(最常见场景)

  • 查看Pod状态:用kubectl get pods --all-namespaces列出所有Pod,重点关注STATUS列(如Pending表示调度失败,CrashLoopBackOff表示容器反复崩溃,Error表示容器启动失败)。
  • 查看Pod详情与事件:用kubectl describe pod < pod-name> -n < namespace> 获取Pod详细信息,包括事件列表(如“Insufficient CPU”表示节点资源不足、“Failed to pull image”表示镜像拉取失败、“Unhealthy”表示健康检查未通过),事件会明确提示故障原因。
  • 查看容器日志:若Pod中有容器运行,用kubectl logs < pod-name> -c < container-name> -n < namespace> 查看容器日志(若容器已崩溃,添加--previous查看前一次实例日志);日志中通常包含应用错误(如端口冲突、数据库连接失败)。
  • 进入容器调试:若日志无法定位问题,用kubectl exec -it < pod-name> -c < container-name> -n < namespace> -- /bin/sh(或/bin/bash)进入容器,手动执行命令(如ls查看文件、curl测试服务、env查看环境变量),排查应用层问题。
  • 检查Pod配置:确认Pod的YAML配置文件是否正确,重点检查:镜像名称与标签(用docker pull < image> 测试镜像是否存在)、资源请求与限制(resources.requests不超过节点可用资源,避免OOMKilled)、环境变量(env字段中的变量是否正确)、卷挂载(volumeMountsvolumes配置是否匹配,持久卷是否存在)。

五、Service与访问故障排查

  • 检查Service状态与配置:用kubectl describe service < service-name> 查看Service详情,确认端口配置(spec.ports.port为Service端口、targetPort为容器端口、nodePort为NodePort类型端口)是否正确,选择器(spec.selector)是否匹配目标Pod的标签(如app: web),类型(spec.type)是否符合需求(如ClusterIP用于内部访问、NodePort用于外部访问)。
  • 检查Endpoints:用kubectl get endpoints < service-name> 查看Service关联的Pod IP和端口,若Endpoints为空,说明Service未正确选择到Pod(需检查选择器与Pod标签是否一致)。
  • 测试DNS解析:若通过Service名称访问(如http://web-service.default),需测试DNS解析是否正常:创建临时Pod(kubectl run -it --rm --image=busybox:1.28.4 -- sh),在Pod中执行nslookup < service-name> .< namespace> (如nslookup web-service.default),若解析失败,需检查CoreDNS服务。
  • 检查CoreDNS服务:用kubectl get pods -n kube-system查看CoreDNS Pod状态(应为Running);若未运行,用kubectl logs < coredns-pod-name> -n kube-system查看日志(如镜像拉取失败、配置文件错误);必要时重启CoreDNS(kubectl delete pod < coredns-pod-name> -n kube-system,Kubernetes会自动重建)。
  • 检查网络策略与插件:用kubectl get networkpolicies查看是否有网络策略限制了Service访问(如kubectl describe networkpolicy < policy-name> 查看规则);检查CNI插件(如Calico、Flannel)是否正常运行(kubectl get pods -n kube-system | grep cni),若插件异常,查看插件日志定位问题。

六、证书与系统日志排查

  • 证书有效性:Kubernetes组件间通信依赖证书,用openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates检查kubelet客户端证书有效期(若证书过期,需用kubeadm certs renew kubelet-client续订);用openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates检查API Server证书有效期。
  • 内核与系统日志:用dmesg -T | grep -i "oom\|error"检查内核日志中的OOM(内存不足)或硬件错误(如磁盘坏道),这些日志能帮助定位系统级故障(如Pod因OOM被杀死)。

七、高级排查工具

  • 节点调试Pod:通过kubectl debug node/< 节点名> -it --image=busybox进入节点调试Pod,执行诊断命令(如ls /var/lib/kubelet查看kubelet数据目录、ps aux | grep kubelet查看kubelet进程状态),无需修改节点本身即可排查问题。
  • 集群验证工具:使用kubeadm check(kubeadm自带工具)验证集群配置是否正确(如证书、配置文件、组件状态);或使用第三方工具(如sonobuoy)运行端到端测试,全面检查集群功能。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Kubernetes在Ubuntu上的故障排查有哪些方法
本文地址: https://pptw.com/jishu/731372.html
Ubuntu上Kubernetes的资源如何分配 ubuntu下如何部署js应用

游客 回复需填写必要信息