Kubernetes在Ubuntu上的故障排查有哪些方法
导读: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-apiserver
、etcd
、kube-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)是否开放;若不通,检查节点防火墙(ufw
或iptables
)规则或网络配置。 - 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
字段中的变量是否正确)、卷挂载(volumeMounts
与volumes
配置是否匹配,持久卷是否存在)。
五、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