设置 Ceph OSD 满容量阈值

本主题介绍如何调整 ACP 分布式存储中 Ceph OSD 的容量阈值。您可以直接在 Ceph 中更改阈值,也可以在 CephCluster 自定义资源中声明式管理它们。

Ceph 使用三个阈值来控制随着 OSD 使用率增加时集群的行为:

阈值作用
nearfull提前发出集群接近满容量的预警。
backfillfull防止 Ceph 向已经过满的 OSD 回填更多数据。
full当 OSD 达到配置的限制时,停止写入以保护集群。
WARNING

始终保持阈值按升序排列:nearfull < backfillfull < full。将值设置得过于接近 1.0 可能导致集群没有恢复空间。

前提条件

  • 您拥有 ACP 集群的 cluster-admin 权限。
  • rook-ceph 命名空间中已部署 rook-ceph-tools,或者您被允许临时启动该部署。
  • 您了解集群为何接近满容量,并且在紧急调整后有添加存储或清理数据的计划。

操作步骤

检查当前集群状态

如果 rook-ceph-tools Pod 未运行,先启动它:

kubectl -n rook-ceph scale deploy rook-ceph-tools --replicas=1

检查集群整体健康状态:

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s

查看当前阈值:

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- \
  ceph osd dump | egrep 'nearfull_ratio|backfillfull_ratio|full_ratio'

输出示例:

full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85

通过 ceph CLI 设置阈值

使用 Ceph 命令直接更改集群生效的阈值。

例如,稍微提高阈值:

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- \
  ceph osd set-nearfull-ratio 0.88

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- \
  ceph osd set-backfillfull-ratio 0.92

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- \
  ceph osd set-full-ratio 0.96

使用最小的提升幅度以恢复集群进度。更改值后,应尽快进行容量扩展或数据清理。

如果写入被阻塞且 OSD 处于卡住、挂起或无法恢复状态,先停止应用 I/O,然后仅小幅提高 full 阈值,等待重平衡完成,集群恢复稳定后再恢复阈值。

通过更新 CephCluster CR 设置阈值

如果想覆盖默认设置,可以通过更新 CephCluster CR 来设置 Ceph OSD 满容量阈值。

kubectl patch cephcluster ceph-cluster -n rook-ceph --type merge -p \
'{"spec":{"storage":{"nearFullRatio":0.88,"backfillFullRatio":0.92,"fullRatio":0.96}}}'

如果只需更改一个阈值,只补丁该字段。例如:

kubectl patch cephcluster ceph-cluster -n rook-ceph --type merge -p \
'{"spec":{"storage":{"fullRatio":0.96}}}'

验证应用的值

验证 Kubernetes 中持久化的设置:

kubectl get cephcluster ceph-cluster -n rook-ceph -o yaml

验证 Ceph 中生效的运行时值:

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- \
  ceph osd dump | egrep 'nearfull_ratio|backfillfull_ratio|full_ratio'

重新检查集群健康和重平衡状态:

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s

当这些字段在 CephCluster 中设置时,该资源即成为阈值的声明式来源。如果 ACP 或 Rook 后续对集群配置进行调和,CephCluster 中的值应被视为预期的基线。

恢复或重新基线阈值

在添加容量、删除数据或完成重平衡后,决定是否保留新阈值。如果较高的值仅作为紧急应对措施,补丁 CephCluster 资源回到标准基线,并确认运行时值也恢复到预期状态。

建议

  • 将阈值更改视为临时缓解措施,而非容量规划的替代方案。
  • 如果只有少数 OSD 明显比其他更满,检查 OSD 利用率分布。
  • 在更改前记录原始阈值,以便集群稳定后恢复。