Kubernetes节点问题
外观
Kubernetes节点问题[编辑 | 编辑源代码]
Kubernetes节点问题是指在Kubernetes集群中,工作节点(Node)因硬件故障、资源不足、配置错误或其他原因导致无法正常调度或运行Pod的情况。节点是Kubernetes集群的基本工作单元,负责运行容器化应用。节点故障会影响集群的稳定性和可用性,因此排查和解决节点问题是运维和开发人员的核心技能之一。
常见节点问题类型[编辑 | 编辑源代码]
以下是Kubernetes节点可能遇到的典型问题:
1. 节点不可用(NotReady)[编辑 | 编辑源代码]
当节点因网络中断、kubelet服务崩溃或资源耗尽而无法与控制平面通信时,其状态会变为NotReady
。
# 查看节点状态
kubectl get nodes
输出示例:
NAME STATUS ROLES AGE VERSION node-01 NotReady <none> 5d v1.24.3
2. 资源不足[编辑 | 编辑源代码]
节点可能因CPU、内存或存储资源不足而无法调度新Pod:
# 查看节点资源使用情况
kubectl describe node node-01
关键输出片段:
Conditions: MemoryPressure True DiskPressure False PIDPressure False
3. 网络问题[编辑 | 编辑源代码]
节点间网络不通或DNS解析失败会导致Pod无法通信。
4. 存储问题[编辑 | 编辑源代码]
持久卷(PV)挂载失败或存储空间不足。
诊断工具与方法[编辑 | 编辑源代码]
基础检查[编辑 | 编辑源代码]
使用以下命令获取节点基本信息:
kubectl get nodes -o wide
kubectl describe node <node-name>
日志分析[编辑 | 编辑源代码]
检查kubelet日志:
journalctl -u kubelet -n 50 --no-pager
资源监控[编辑 | 编辑源代码]
使用top
或htop
查看实时资源使用:
htop
实际案例[编辑 | 编辑源代码]
案例1:节点因内存压力变为NotReady[编辑 | 编辑源代码]
现象:节点状态显示NotReady
,Pod调度失败。
排查步骤: 1. 检查节点事件:
kubectl describe node node-01 | grep -A 10 Events
发现MemoryPressure
警告。
2. 登录节点检查内存:
free -h
确认可用内存不足1%。
解决:清理不需要的进程或扩容节点内存。
案例2:节点间网络不通[编辑 | 编辑源代码]
现象:跨节点Pod无法互相ping通。
排查步骤: 1. 检查Calico(或其他CNI插件)日志:
kubectl logs -n kube-system calico-node-abcde
发现防火墙阻止了BGP端口。
解决:调整防火墙规则允许节点间通信。
高级诊断[编辑 | 编辑源代码]
使用mermaid绘制节点状态图[编辑 | 编辑源代码]
资源计算公式[编辑 | 编辑源代码]
判断节点是否可调度新Pod需计算剩余资源:
预防措施[编辑 | 编辑源代码]
- 设置合理的Pod资源请求(requests/limits)
- 定期监控节点健康状态
- 实现节点自动修复(如AWS EC2 Auto Healing)
参见[编辑 | 编辑源代码]
- Kubernetes官方文档-节点故障排查(注:实际使用时替换为真实链接)
- 系统资源监控工具