首页主机资讯Ubuntu上Kubernetes故障如何排查

Ubuntu上Kubernetes故障如何排查

时间2025-10-10 10:15:03发布访客分类主机资讯浏览1407
导读:Ubuntu上Kubernetes故障排查指南 一、基础状态检查 1. 节点状态核查 使用kubectl get nodes -o wide查看节点状态(是否为Ready)、IP地址及Kubernetes版本;通过kubectl descr...

Ubuntu上Kubernetes故障排查指南

一、基础状态检查

1. 节点状态核查
使用kubectl get nodes -o wide查看节点状态(是否为Ready)、IP地址及Kubernetes版本;通过kubectl describe node < 节点名> 检查节点Conditions(如ReadyDiskPressureMemoryPressure等),若节点为NotReady,需重点关注kubelet服务状态、网络连通性及资源使用情况。

2. Kubernetes组件状态检查
运行kubectl get pods -n kube-system查看系统组件Pod(如kube-apiserveretcdkube-controller-managerkube-schedulerkube-proxyCoreDNS等)是否处于Running状态;若有Pod状态异常(如PendingErrorCrashLoopBackOff),需进一步排查对应组件的日志。

二、节点级故障排查

1. kubelet服务状态
使用systemctl status kubelet检查kubelet服务是否运行;若未运行,用systemctl start kubelet启动;通过journalctl -u kubelet -f实时查看kubelet日志,关注证书过期、容器运行时异常(如containerd无法启动)、磁盘空间不足等问题。

2. 资源使用情况
运行df -h /var/lib/kubelet检查kubelet数据目录磁盘空间(建议保留至少10%空闲);使用free -m查看内存使用情况(避免OOM导致Pod被终止);通过top -p $(pgrep kubelet)监控kubelet进程CPU占用(若过高可能影响节点性能)。

3. 容器运行时检查
使用systemctl status containerd(或docker,取决于容器运行时)确认容器运行时服务正常;通过ctr containers list(containerd)或docker ps -a查看容器列表,确认kubelet依赖的容器(如pause容器)是否运行正常。

三、网络故障排查

1. 基础网络连通性
在节点上使用ping < API-Server-IP> 测试到kube-apiserver的网络连通性;通过nc -zv < API-Server-IP> 6443检查API Server端口(默认6443)是否开放;若无法连通,需排查节点防火墙(如ufw)、安全组或网络配置。

2. CNI插件状态
使用kubectl get pods -n kube-system -l k8s-app=< CNI插件名> (如calico-nodeflannel)查看CNI插件Pod状态;通过kubectl logs < CNI-Pod-Name> -n kube-system查看插件日志,确认网络插件是否正常运行(如Calico的BGP路由是否同步、Flannel的vxlan隧道是否建立)。

3. 网络策略与配置
使用kubectl get networkpolicies查看集群网络策略,确认是否有策略限制了Pod或Service的通信;检查/etc/resolv.conf文件,确认DNS配置正确(如nameserver指向CoreDNS的ClusterIP,默认10.96.0.10search包含命名空间后缀)。

四、集群级故障排查

1. 证书有效性
使用openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates检查kubelet客户端证书有效期(若过期需重新生成);通过kubeadm certs check-expiration查看集群证书过期时间,及时更换即将过期的证书。

2. 内核与系统日志
使用dmesg -T | grep -i "oom\|error"检查内核日志,关注OOM(内存不足)或硬件错误(如磁盘坏道);通过journalctl -xe查看系统日志,排查系统级故障(如systemd服务崩溃)。

五、Pod与容器故障排查

1. Pod状态检查
使用kubectl get pods --all-namespaces查看所有Pod状态;通过kubectl describe pod < Pod-Name> -n < Namespace> 获取Pod详细信息(包括Events,如镜像拉取失败、资源不足、调度错误等),这是定位Pod问题的关键步骤。

2. 容器日志分析
使用kubectl logs < Pod-Name> -c < Container-Name> -n < Namespace> 查看容器日志(若Pod有多个容器,需指定-c参数);若容器已崩溃,添加--previous参数查看前一个容器的日志(如kubectl logs < Pod-Name> -c < Container-Name> --previous)。

3. 常见Pod问题处理

  • 镜像拉取失败(ImagePullBackOff/ErrImagePull):检查镜像名称、标签是否正确(如nginx:latest是否存在);确认私有仓库认证信息(如imagePullSecrets)是否配置正确;用docker pull < Image-Name> 测试镜像是否能正常拉取。
  • 容器崩溃(CrashLoopBackOff):查看容器日志,定位崩溃原因(如应用代码bug、配置文件错误、依赖服务不可用);调整容器commandargs(如修改启动脚本),确保应用能正常启动。
  • Pending状态:通过kubectl describe pod < Pod-Name> 查看Events,常见原因包括资源不足(如节点CPU/内存不够)、节点亲和性/反亲和性不匹配、镜像拉取慢;通过kubectl top nodes查看节点资源使用情况,调整Pod的resources.requests/limits或增加节点。

六、Service与网络访问故障排查

1. Service状态检查
使用kubectl get svc -n < Namespace> 查看Service状态,确认CLUSTER-IPPORT(S)配置正确;通过kubectl describe svc < Service-Name> -n < Namespace> 查看Service详情,确认Selector是否匹配目标Pod的标签(如app: web)。

2. Endpoints验证
使用kubectl get endpoints < Service-Name> -n < Namespace> 查看Service关联的Pod IP和端口;若Endpoints为空,说明Service未正确关联到Pod,需检查Selector是否正确、Pod标签是否匹配。

3. CoreDNS检查
使用kubectl get pods -n kube-system -l k8s-app=kube-dns查看CoreDNS Pod状态;通过kubectl logs < CoreDNS-Pod-Name> -n kube-system查看CoreDNS日志,确认DNS服务是否正常(如是否有查询错误);若CoreDNS异常,尝试重启Pod(kubectl delete pod < CoreDNS-Pod-Name> -n kube-system)。

4. 网络连通性测试
在集群内部创建临时Pod(kubectl run -it --rm --image=alpine test-pod -- sh),使用nslookup < Service-Name> 测试DNS解析是否正常;使用curl -I < Service-IP> :< Port> wget < Service-IP> :< Port> 测试到Service的连通性;若无法连通,检查kube-proxy服务(kubectl get pods -n kube-system -l k8s-app=kube-proxy)是否运行正常,查看kube-proxy日志(kubectl logs < kube-proxy-Pod-Name> -n kube-system)。

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


若转载请注明出处: Ubuntu上Kubernetes故障如何排查
本文地址: https://pptw.com/jishu/722227.html
Debian上Node.js如何进行代码审查 Kubernetes在Ubuntu上性能怎样

游客 回复需填写必要信息