当前位置: 首页 > news >正文

Openshift节点Disk pressure

OpenShift 监控以下指标,并定义以下垃圾回收的驱逐阈值。请参阅产品文档以更改任何驱逐值。

nodefs.available
从 cadvisor 来看,该node.stats.fs.available指标表示节点文件系统(所在位置)上有多少可用(剩余)的文件系统空间/var/lib/kubelet。
默认驱逐阈值:<10%

nodefs.inodesFree
从 cadvisor 来看,该node.stats.fs.inodesFree指标表示节点文件系统中剩余的可用 inode 数量。该文件系统取决于节点所在位置/var/lib/kubelet,在 RHCOS 或标准 RHEL FS 布局中,这是映射到的文件系统/。
默认驱逐阈值:<5%

imagefs.available
从 cadvisor 来看,该node.stats.runtime.imagefs.available指标表示镜像存储文件系统(所在位置)上有多少可用(剩余)的文件系统空间/var/lib/containers/。
默认驱逐阈值:<15%

imagefs.inodesFree
从 cadvisor 来看,该node.stats.runtime.imagefs.inodesFree指标表示图像存储文件系统中剩余的可用 inode 数量。
默认驱逐阈值:<5%

注意:使用df -h 和df -i 在哪里是 或nodefs,imagefs应该显示由 cadvisor 提取的相同指标。
本文的读者还应参考我们的资源储备文档,以获取有关提高节点可靠性/稳定性的更多信息。

1.监控DiskPressure

使用PrometheusRule

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:name: diskpressure-rulesnamespace: openshift-monitoring
spec:groups:- name: node-diskpressure-alertsrules:- alert: nodefsAvailableLowannotations:description: '节点{{ $labels.instance}}分区/var/lib/kubelet使用率过高已经超过85%,当超过90%,会出现Disk Pressure污点'summary: '节点{{ $labels.instance}}分区/var/lib/kubelet使用率过高.'expr: |1 - node_filesystem_avail_bytes{mountpoint="/var/lib/kubelet"}/node_filesystem_size_bytes{mountpoint="/var/lib/kubelet"} > 0.85for: 1mlabels:severity: warning- alert: nodefsInodesFreeLowannotations:description: '节点{{ $labels.instance}}分区/var/lib/kubelet文件系统中使用的inode数量已经超过90%,当超过95%,会出现Disk Pressure污点'summary: '节点{{ $labels.instance}}分区/var/lib/kubelet文件系统可使用的inode数量低.'expr: |1 - node_filesystem_files_free{mountpoint="/var/lib/kubelet",fstype!~"tmpfs|overlay"}/node_filesystem_files{mountpoint="/var/lib/kubelet",fstype!~"tmpfs|overlay"}   > 0.9for: 1mlabels:severity: warning- alert: imagefsAvailableLowannotations:description: '节点{{ $labels.instance}}分区/var/lib/containers使用率过高已经超过80%,当超过85%,会出现Disk Pressure污点'summary: '节点 {{ $labels.instance }} 分区/var/lib/containers磁盘使用率过高.'expr: |1- node_filesystem_avail_bytes{mountpoint="/var/lib/containers"}/node_filesystem_size_bytes{mountpoint="/var/lib/containers"} > 0.8for: 1mlabels:severity: warning- alert: imagefsInodesFreeLowannotations:description: '节点{{ $labels.instance}}分区/var/lib/containers文件系统中使用的inode数量已经超过90%,当超过95%,会出现Disk Pressure污点'summary: '节点{{ $labels.instance}}分区/var/lib/containers文件系统可使用的inode数量低.'expr: |1 - node_filesystem_files_free{mountpoint="/var/lib/containers",fstype!~"tmpfs|overlay"}/node_filesystem_files{mountpoint="/var/lib/containers",fstype!~"tmpfs|overlay"}   > 0.9for: 1mlabels:severity: warning

2.如何调查 DiskPressure

问题

一些 OpenShift 节点获取DiskPressure、OutOfDisk和NotReady状态。
识别主机上使用大磁盘的 pod。

解决

pods硬盘资源主要消耗的是overlay目录和emptydir目录。

目录与pod的相关信息列在/var/lib/containers/storage/overlay-containers/volatile-containers.json文件中(OCP 4.11及以下版本中,这些信息列在文件中/var/lib/containers/storage/overlay-containers/containers.json)。文件pod-name中记录的containers.json由组成 k8s_<Kubernetes Pod Name>_<Kubernetes Namespace>_<Pod Id>_0

注意:如果pods已经被驱逐并转移到其他节点,则需要调查pods其他节点上的驱逐情​​况。

为了释放磁盘空间,可以按照使用 OpenShift 4 中的图像修剪器从节点中删除未使用的image中的说明配置垃圾收集器。

根本原因

pods硬盘资源主要消耗的是overlay目录和emptydir目录。

诊断步骤

首先,调查节点中的磁盘使用情况:

$ oc debug node/<node name>
$ chroot /host 
# df -h
# du -h --max-depth=1 /var | sort -hr
# du -h --max-depth=1 /var/log | sort -hr
# du -h --max-depth=1 /var/lib | sort -hr

如果/var/lib目录过大,需要pods按照如下步骤排查哪个目录占用了较大的磁盘:

识别覆盖层中使用大磁盘的覆盖层 ID。以下示例中为f47d8f457d3ef1b119f238807202d6590d07b548c961f036197ae4e70668f1dc

# du -h --max-depth=1 /var/lib/containers/storage/overlay | sort -hr
SIZE        OVERLAY PATH
...............................
2.4G  /var/lib/containers/storage/overlay/f47d8f457d3ef1b119f238807202d6590d07b548c961f036197ae4e70668f1dc

然后,通过覆盖 ID 识别 Pod 名称

# cat /var/lib/containers/storage/overlay-containers/volatile-containers.json | jq -c '.[] | select( .layer | contains("<overlay id>")) | .metadata' | jq -r | jq '."pod-name"'
k8s_downloads-665d985cd5-5268z_openshift-console_d4a527d0-42a3-4ff8-8651-64508dbb74b6_0

用同样的方法,在 emptydir 中识别使用大磁盘的 pod id。在下面的例子中,它是59f09a5d-05ab-45a6-bb73-e46b8fa2b28b

# du -h --max-depth=1 /var/lib/kubelet/pods | sort -hr
SIZE  POD ID
...............................
3.0M  /var/lib/kubelet/pods/59f09a5d-05ab-45a6-bb73-e46b8fa2b28b

然后通过 pod id 识别 pod 名称

# cat /var/lib/containers/storage/overlay-containers/volatile-containers.json | jq -r '[.[] | select( .names[] | contains("<pod id>")) | .metadata][0]' | jq -r '."pod-name"'
k8s_grafana-989b557fb-6vn2k_openshift-monitoring_59f09a5d-05ab-45a6-bb73-e46b8fa2b28b_0

3.快速解决办法:给磁盘扩容

假如/dev/sdb1是挂在/var/lib/containers上,当/var/lib/containers容量不足85%,会引发disk pressure

先从虚拟机的层面扩容sdb

echo '1' > /sys/block/sdb/device/rescan
growpart /dev/sdb 1
xfs_growfs /dev/sdb1

参考:
https://access.redhat.com/articles/4766521

https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/node-pressure-eviction/

https://docs.redhat.com/zh-cn/documentation/openshift_container_platform/4.14/html/nodes/nodes-nodes-garbage-collection#nodes-nodes-garbage-collection-configuring_nodes-nodes-configuring

https://access.redhat.com/solutions/5341801

http://www.xdnf.cn/news/448399.html

相关文章:

  • 03_朴素贝叶斯分类
  • Python常见问题
  • Python+大模型 day01
  • Java大师成长计划之第22天:Spring Cloud微服务架构
  • 采用均线策略来跟踪和投资基金
  • 通用软件项目技术报告
  • MySQL知识点总结(持续更新)
  • 【计算机网络】TLS中的对称加密和非对称加密的应用,应对第三方抓包的双向https认证
  • PLM系统如何实现跨部门数据共享?七项核心功能打通信息孤岛
  • Java项目拷打(外卖+点评)
  • lesson01-PyTorch初见(理论+代码实战)
  • AI数字人实现原理
  • std::ratio<1,1000> 是什么意思?
  • PYTHON训练营DAY25
  • WMS仓储管理系统可以跟哪些系统集成
  • ChatPromptTemplate创建方式比较
  • 2025 uniapp的请求封装工具类以及使用【拿来就用】
  • 虚拟机安装CentOS7网络问题
  • Java 日期解析与格式化:从标准格式到自然语言解析
  • 【Bootstrap V4系列】学习入门教程之 组件-分页(Pagination)
  • 如何利用 Java 爬虫获得京东(JD)商品详情:实战指南
  • windows10 安装 QT
  • 国产之光--腾讯云推出AI编程智能助手CodeBuddy
  • HPE ProLiant DL360 Gen11 服务器,配置 RAID 5 教程!
  • Linux篇 第2章Linux基础指令
  • 【FFmpeg】介绍+安装+VisualStudio配置FFMpeg库
  • 序列化和反序列化:从理论到实践的全方位指南
  • c++STL——哈希表封装:实现高效unordered_map与unordered_set
  • teneo自动机器人部署教程
  • 固定步长和变步长的LMS自适应滤波器算法