1. 节点状态检查
使用kubectl get nodes -o wide
查看所有节点的状态(是否为Ready
)、IP地址及Kubernetes版本;通过kubectl describe node <节点名>
获取节点详细信息,重点关注Conditions
字段(如Ready
、DiskPressure
、MemoryPressure
等),若节点状态为NotReady
,需进一步排查节点问题。
2. Kubernetes组件状态检查
运行kubectl get pods -n kube-system
查看系统组件(如kube-apiserver
、etcd
、kube-controller-manager
、kube-scheduler
、kube-proxy
等)的Pod状态,确保所有组件均为Running
且RestartCount
为0。若组件状态异常,需检查对应Pod的日志(kubectl logs <pod-name> -n kube-system
)。
1. kubelet服务状态
kubelet是Ubuntu节点上管理Pod的核心服务,通过systemctl status kubelet
检查其运行状态(是否为active (running)
);若服务未运行,使用systemctl start kubelet
启动;通过journalctl -u kubelet -f
实时查看kubelet日志,重点关注证书过期、容器运行时异常(如containerd
问题)、节点资源不足等错误。
2. 资源使用情况
使用df -h /var/lib/kubelet
检查kubelet数据目录的磁盘空间(建议保留至少10%空闲空间);free -m
查看内存使用情况(避免OOM导致节点崩溃);top -p $(pgrep kubelet)
监控kubelet进程的CPU占用。若磁盘空间不足,清理旧日志(/var/log/
)、未使用的镜像(docker image prune
)或扩展节点磁盘。
3. 容器运行时检查
Ubuntu节点上通常使用containerd
作为容器运行时,通过systemctl status containerd
检查其状态;ctr containers list
查看容器列表(确认Kubernetes管理的容器是否正常运行)。若containerd
异常,需重启服务(systemctl restart containerd
)并查看其日志(journalctl -u containerd
)。
1. 基础网络连通性
使用ping <API-Server-IP>
测试节点到Kubernetes API Server的网络连通性;nc -zv <API-Server-IP> 6443
检查API Server端口(默认6443)是否开放。若无法连通,需检查节点网络配置(如防火墙、路由)或API Server的安全组规则。
2. CNI插件状态
CNI插件(如Calico、Flannel)负责节点间网络通信,通过kubectl get pods -n kube-system -l k8s-app=<CNI插件名>
(如calico-node
、flannel
)查看插件Pod状态;kubectl logs <cni-pod-name> -n kube-system
查看插件日志,重点关注网络配置错误、节点间路由失败等问题。
3. 网络策略与DNS配置
使用kubectl get networkpolicies
检查是否有网络策略限制了Pod或Service的通信(如禁止跨命名空间访问);cat /etc/resolv.conf
查看节点的DNS配置(确保nameserver
指向CoreDNS的ClusterIP,默认10.96.0.10
);通过nslookup <service-name>.<namespace>.svc.cluster.local
测试DNS解析是否正常。
1. 证书有效性
Kubernetes集群的证书(如kubelet客户端证书、API Server证书)过期会导致节点或组件不可用。使用openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates
检查kubelet客户端证书的有效期(需在过期前更新);若证书过期,可通过kubeadm certs renew
命令续订。
2. 内核与系统日志
使用dmesg -T | grep -i "oom\|error"
检查内核日志,重点关注OOM(内存不足)、硬件错误(如磁盘坏道)等问题;/var/log/syslog
或journalctl -xe
查看系统日志,排查与Kubernetes相关的系统级错误。
1. Pod无法启动
kubectl get pods
(若状态为Pending
,可能是资源不足或调度问题;若为CrashLoopBackOff
,则是容器崩溃);kubectl describe pod <pod-name>
(查看Events
字段,如镜像拉取失败、资源限制、健康检查失败等);kubectl logs <pod-name>
(若容器多次崩溃,使用--previous
查看前一次实例日志);ErrImagePull
)、资源限制过低(OOMKilled
)、健康检查失败(Liveness Probe
)。2. Service无法访问
kubectl describe service <service-name>
(确认selector
是否匹配Pod标签、ports
配置是否正确);kubectl get endpoints <service-name>
(确保Endpoints列表包含正确的Pod IP和端口);kubectl run -it --rm --image=alpine test-pod
),使用curl <service-name>:<port>
或nslookup <service-name>
测试连通性和DNS解析;kubectl get pods -n kube-system -l k8s-app=kube-proxy
(确保kube-proxy运行正常);查看kube-proxy日志(kubectl logs <kube-proxy-pod-name> -n kube-system
),排查网络规则同步问题。3. 节点NotReady
systemctl status kubelet
(若未运行,启动服务并查看日志);kubectl get pods -n kube-system -l k8s-app=<CNI插件名>
(确保插件Pod运行正常);df -h
(磁盘空间)、free -m
(内存)、top
(CPU),清理不必要的资源;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates
(确保证书未过期)。