K8s节点Not Ready故障排查
Kubernetes生产实战:节点Not Ready故障排查指南(附全流程图)
在Kubernetes集群中,节点失联是典型的紧急故障场景。本文将结合百节点集群运维经验,手把手教你快速定位问题,并提供生产级修复方案。
一、快速定位三板斧(5分钟定位问题)
1. 基础状态检查
# 查看节点基础状态
kubectl get node <节点名> -o wide
# 获取详细事件(重点关注Conditions段)
kubectl describe node <节点名> | grep -A 15 Conditions
# 查看节点资源水位
kubectl top node <节点名>
2. 核心组件检查
# 检查kubelet状态(节点侧)
ssh <节点IP> "systemctl status kubelet -l"
# 查看容器运行时状态
ssh <节点IP> "crictl ps -a | grep -v Running"
# 检查网络插件健康度
kubectl -n kube-system get pods -l app.kubernetes.io/name=calico-node
3. 关键日志速查
# Kubelet日志(最近10分钟)
journalctl -u kubelet --since "10 minutes ago" | grep -i error
# 容器运行时日志
tail -100 /var/log/containers/kubelet*.log
# 内核日志(重点关注OOM)
dmesg -T | grep -E 'oom|kill'
二、六大典型故障场景与解决方案
场景1:磁盘压力(最常见)
特征:
kubectl describe node
显示DiskPressure=True- 节点存在Evicted Pod
修复步骤:
# 快速清理空间
ssh <节点IP> "df -h /var/lib/docker && docker system prune -af"
# 调整kubelet垃圾回收参数
KUBELET_EXTRA_ARGS="--image-gc-high-threshold=90 --image-gc-low-threshold=85"
systemctl restart kubelet
场景2:内核死锁(突发性故障)
排查工具:
# 检查内核软锁
grep 'soft lockup' /var/log/messages
# 查看进程状态
ssh <节点IP> "ps auxf | grep D"
应急方案:
# 临时重启节点
kubectl cordon <节点名> && kubectl drain <节点名> --ignore-daemonsets
ssh <节点IP> "reboot"
场景3:CNI插件异常(网络故障)
诊断命令:
# Calico检查
calicoctl node status
# Flannel检查
ip route show | grep flannel
# 网络连通性测试
kubectl run netcheck --image=nicolaka/netshoot --rm -it -- curl <API-Server-IP>:6443
场景4:证书过期(证书管理不善)
检测方法:
# 检查kubelet证书有效期
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates
# 强制证书轮换
systemctl stop kubelet
rm -f /var/lib/kubelet/pki/kubelet-*
systemctl start kubelet
场景5:硬件故障(隐蔽型问题)
排查工具:
# 内存检测
memtester 1G
# 磁盘健康度
smartctl -a /dev/sda
# CPU压力测试
stress -c 4 -t 300
场景6:资源耗尽(突发流量)
应急方案:
# 临时扩容节点
kubectl scale deployment/nginx --replicas=0
# 快速迁移Pod
kubectl drain <故障节点> --grace-period=300 --delete-emptydir-data
三、预防性配置清单
1. 节点健康检查配置
apiVersion: machineconfiguration.openshift.io/v1
kind: KubeletConfig
metadata:
name: node-health-check
spec:
machineConfigPoolSelector:
matchLabels:
pools.operator.machineconfiguration.openshift.io/master: ""
kubeletConfig:
healthzBindAddress: 0.0.0.0
healthzPort: 10248
eventRecordQPS: 50
2. 自动化监控告警
Prometheus关键告警规则:
- alert: NodeNotReady
expr: kube_node_status_condition{condition="Ready",status="false"} == 1
for: 5m
labels:
severity: critical
annotations:
summary: "节点 {{ $labels.node }} 已失联超过5分钟"
3. 自愈系统配置(示例)
# 自动隔离异常节点
def handle_node_not_ready(event):
if event['reason'] == 'NodeNotReady':
node_name = event['involvedObject']['name']
cordon_node(node_name)
drain_pods(node_name)
reboot_node(node_name)
四、排查全流程图
黄金口诀:一查SSH二看组件,三验资源四查网络,证书内核别忘记,硬件故障终级案。
通过系统化的排查流程,90%的节点故障可在15分钟内定位。建议配置每周自动节点巡检,提前发现潜在风险。对于生产关键集群,建议部署备用节点池以快速替换故障节点。
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)