1.节点资源压力告警,触发 MemoryPressure
或 DiskPressure
1.1 问题点
Kubernetes 节点报告内存或磁盘资源压力,标记节点状态为 NotReady
或应用 MemoryPressure
、DiskPressure
污点,导致调度器不再将新 Pod 调度到该节点
影响范围:
- 直接影响:节点上的现有 Pod 可能因资源不足而性能下降或被系统强制终止。
- 间接影响:集群的整体资源利用率降低,新部署或扩缩容的操作受阻,可能导致服务容量不足或响应延迟
1.2 排查方法
- 查看节点状态:使用
kubectl get node
查看所有节点状态,重点关注Conditions
列中的MemoryPressure
和DiskPressure
状态。 - 检查资源使用情况:使用
kubectl top nodes
查看节点的实时资源使用率,对比节点的总资源容量,判断是否存在过度消耗。 - 分析资源消耗大户:使用
kubectl top pods --all-namespaces --sort-by=memory
或--sort-by=cpu
查找占用资源最多的 Pod,分析其资源使用合理性。 - 检查磁盘使用情况:对于
DiskPressure
,使用df -h
或du -sh /*
(在节点上执行)查看磁盘空间使用情况,定位占用空间大的目录。 - 清理资源或调整策略:根据分析结果,可能需要清理无用数据、优化 Pod 资源请求/限制、调整日志留存策略、迁移部分工作负载到其他节点等
2. Node 状态异常,如何排查?
- 使用
kubectl get nodes
命令查看集群中所有节点的状态和信息,判断是否存在故障。 - 使用
kubectl describe node [node_name]
命令查看目标节点的详细信息,包括 CPU、内存、磁盘等硬件资源的使用情况,判断是否存在性能瓶颈。 - 使用
kubectl get pods -o wide --all-namespaces
命令查看集群中所有 Pod 的状态信息,判断是否有 Pod 运行在目标节点上导致资源紧张。
3. Node 上运行的 Pod 无法访问网络,如何排查?
- 使用
kubectl describe node [node_name]
命令查看目标节点的信息,检查节点是否正常连接到网络。 - 使用
kubectl describe pod [pod_name] -n [namespace_name]
命令查看 Pod 所运行的节点信息,判断是否因为节点状态异常导致网络访问失败。 - 使用
kubectl logs [pod_name] -n [namespace_name]
命令查看 Pod 容器的日志信息,寻找可能的错误或异常信息。
4. Node 上的 Pod 无法访问存储,如何排查?
- 使用
kubectl describe pod [pod_name] -n [namespace_name]
命令检查 Pod 的volumes
配置信息,判断是否存在存储挂载失败的情况。 - 使用
kubectl exec -it [pod_name] -n [namespace_name] -- /bin/bash
命令进入 Pod 所在的容器,尝试使用ls
和cat
等命令访问挂载的文件系统,判断是否存在读写错误。 - 使用
kubectl describe persistentvolumeclaim [pvc_name] -n [namespace_name]
命令查看相关 PVC 配置和状态信息,判断是否存在故障。
6. 存储卷挂载失败,如何处理?
- 使用
kubectl describe pod [pod_name] -n [namespace_name]
命令检查 Pod 的volumes
配置信息,判断是否存在存储卷定义错误。 - 使用
kubectl describe persistentvolumeclaim [pvc_name] -n [namespace_name]
命令检查 PVC 的状态和信息,判断是否存在存储配额不足或存储资源故障等原因。 - 如果是 NFS 或 Ceph 等网络存储,需要确认网络连接是否正常,以及存储服务器的服务是否正常。
7. Node 节点加入 Kubernetes 集群后无法被调度,怎么办?
- 检查该节点的 taints 和 tolerations 是否与 Pod 的 selector 匹配
- 检查该节点的资源使用情况是否满足 Pod 的调度要求
- 确保该节点与 Kubernetes API server 的连接正常
8. Kubernetes 集群中的 PersistentVolume 挂载失败,怎么办?
- 检查 PersistentVolume 和 Pod 之间的匹配关系是否正确
- 检查 PersistentVolumeClaim 中的 storageClassName 是否与 PersistentVolume 的 storageClassName 匹配
- 检查节点存储配置和 PersistentVolume 的定义是否正确
- 自动供给层面的权限是否已经给到位