Skip to content

1.节点资源压力告警,触发 MemoryPressure 或 DiskPressure

1.1 问题点

Kubernetes 节点报告内存或磁盘资源压力,标记节点状态为 NotReady 或应用 MemoryPressureDiskPressure 污点,导致调度器不再将新 Pod 调度到该节点

影响范围:

  • 直接影响:节点上的现有 Pod 可能因资源不足而性能下降或被系统强制终止。
  • 间接影响:集群的整体资源利用率降低,新部署或扩缩容的操作受阻,可能导致服务容量不足或响应延迟

1.2 排查方法

  1. 查看节点状态:使用 kubectl get node 查看所有节点状态,重点关注 Conditions 列中的 MemoryPressureDiskPressure 状态。
  2. 检查资源使用情况:使用 kubectl top nodes 查看节点的实时资源使用率,对比节点的总资源容量,判断是否存在过度消耗。
  3. 分析资源消耗大户:使用 kubectl top pods --all-namespaces --sort-by=memory--sort-by=cpu 查找占用资源最多的 Pod,分析其资源使用合理性。
  4. 检查磁盘使用情况:对于 DiskPressure,使用 df -hdu -sh /*(在节点上执行)查看磁盘空间使用情况,定位占用空间大的目录。
  5. 清理资源或调整策略:根据分析结果,可能需要清理无用数据、优化 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 所在的容器,尝试使用 lscat 等命令访问挂载的文件系统,判断是否存在读写错误。
  • 使用 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 的定义是否正确
  • 自动供给层面的权限是否已经给到位