当前位置: 首页 > 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

相关文章:

  • mybatis plus (sqlserver) 根据条件来获取id最大的,或者是新增的最新的一条记录(同条件可能会有多条出现)
  • Java—— 可变参数、集合工具类、集合嵌套、不可变集合
  • [数据结构]6. 队列-Queue
  • C++学习细节回顾(汇总二)
  • 【交互 / 差分约束】
  • AD 规则的使能及优先级的设置
  • 机密虚拟机的威胁模型
  • Java 与 Go 语言对比
  • 【 Java开发枚举值规范】
  • NACOS基于长链接的⼀致性模型
  • 从Transformer到多模态智能,剖析人工智能时代的核心引擎​​
  • 在Linux中如何使用Kill(),向进程发送发送信号
  • 编程题 03-树2 List Leaves【PAT】
  • 为什么要选择七彩喜数字康养平台?加盟后有何优势?
  • Oracle版本、补丁及升级(12)——补丁及补丁集
  • 2011-2020年各省粗离婚率数据
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- consistency is the key
  • AI时代的弯道超车之第十二章:英语和编程重要性?
  • 动态规划问题 -- 多状态模型(删除并获得点数)
  • MySQL之基础索引
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • 山东:小伙为救同学耽误考试属实,启用副题安排考试
  • 人民日报任平:从汽车产销、外贸大盘看中国经济前景
  • 第十届影像上海博览会落幕后,留给中国摄影收藏的三个问题
  • 哲学新书联合书单|远离苏格拉底
  • 2025年上海好护士揭晓,上海护士五年增近两成达12.31万人