Ceph 集群日常运维与健康检查
适用环境:
- Kubernetes 1.28+
- Rook-Ceph v1.12/v1.13/v1.14/v1.15/v1.16+
- Ceph Quincy / Reef / Squid
- 生产级裸金属 GPU/K8s 集群
- 存储类型:
- RBD Block Storage
- CephFS
- RGW Object Storage
Rook 通过 Kubernetes Operator 管理 Ceph 生命周期,包括部署、扩容、升级、自愈和 CSI 存储供给
6.1 Rook-Ceph 架构总览
6.1.1 生产架构
Kubernetes Cluster
|
|
rook-ceph-operator
|
+-------------------+-------------------+
| | |
Ceph MON Ceph MGR CSI
| | |
| | |
Ceph OSD Dashboard RBD Driver
|
|
+----+----+----+
| | |
Node1 Node2 Node3
Storage Services:
RBD
|
Kubernetes PVC
CephFS
|
Shared Filesystem
RGW
|
Object Storage
6.2 日常巡检标准
生产环境建议:
| 检查项 | 周期 |
|---|---|
| Ceph健康状态 | 每5分钟 |
| OSD状态 | 每5分钟 |
| PG状态 | 每5分钟 |
| 容量使用率 | 每小时 |
| Slow Request | 每5分钟 |
| MON状态 | 每5分钟 |
| CSI状态 | 每小时 |
| PVC异常 | 实时 |
6.3 Rook-Ceph基础检查
查看Namespace
kubectl get ns | grep rook
正常:
rook-ceph
查看所有Pod
kubectl -n rook-ceph get pod -o wide
正常:
NAME READY
rook-ceph-operator 1/1
rook-ceph-mon-a 2/2
rook-ceph-mgr-a 2/2
rook-ceph-osd-0 2/2
rook-ceph-osd-1 2/2
rook-ceph-csi-rbdplugin 3/3
rook-ceph-csi-cephfsplugin 3/3
6.4 Ceph状态检查
进入 toolbox:
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
查看集群状态
ceph -s
正常:
cluster:
id: xxxx
health: HEALTH_OK
services:
mon: 3 daemons
mgr: active
osd: 12 osds
data:
pools: 5
objects: xxx
usage: 30%
pgs: active+clean
查看详细健康
ceph health detail
6.5 常见 HEALTH 状态处理
6.5.1 HEALTH_WARN
示例:
HEALTH_WARN
Degraded data redundancy
查看:
ceph health detail
可能原因:
- OSD down
- PG degraded
- 节点故障
处理:
ceph osd tree
例如:
ID CLASS WEIGHT STATUS
0 hdd 8TB up
1 hdd 8TB down
恢复OSD:
kubectl -n rook-ceph delete pod rook-ceph-osd-1
Rook会自动重建Pod
6.5.2 HEALTH_ERR
例如:
HEALTH_ERR
1 osds down
检查:
ceph osd stat
输出:
12 osds: 11 up, 12 in
说明:
OSD进程异常
检查OSD:
kubectl -n rook-ceph get pod | grep osd
日志:
kubectl -n rook-ceph logs rook-ceph-osd-1
6.6 OSD故障处理
查看OSD
ceph osd tree
示例:
root default
host k8s-node01
osd.0 up
osd.1 down
查看OSD详细
ceph osd dump
强制标记down
ceph osd down osd.1
查看磁盘
节点:
lsblk
例如:
sdb 3.8T
检查设备:
ceph-volume inventory
6.7 OSD磁盘更换流程(生产)
1. 停止故障OSD
ceph osd out osd.1
等待迁移:
ceph -s
2. 删除OSD
获取ID:
ceph osd tree
删除:
ceph osd purge 1 --yes-i-really-mean-it
3. 清理磁盘
节点执行:
wipefs -a /dev/sdb
或者:
sgdisk --zap-all /dev/sdb
4. 让Rook重新发现
查看:
kubectl -n rook-ceph get cephcluster
如果使用:
useAllDevices: true
Rook自动创建OSD
6.8 MON故障处理
查看:
ceph mon stat
例如:
3 mons at quorum a,b,c
MON Pod异常
查看:
kubectl -n rook-ceph get pod | grep mon
删除:
kubectl -n rook-ceph delete pod rook-ceph-mon-a
Rook自动恢复
6.9 MGR异常处理
查看:
ceph mgr stat
异常:
no active mgr
处理:
kubectl -n rook-ceph delete pod \
rook-ceph-mgr-a
6.10 PG异常排查
查看PG状态
ceph pg stat
正常:
active+clean
异常:
active+degraded
或者:
stale
查看:
ceph pg dump
定位:
ceph pg map <pgid>
例如:
ceph pg map 1.2a
6.11 Slow Request处理
查看:
ceph health detail
例如:
slow ops
检查:
OSD IO
ceph osd perf
示例:
osd commit_latency apply_latency
1 2000ms
节点IO
iostat -x 1
重点:
await
util
svctm
6.12 Ceph容量管理
查看:
ceph df
示例:
RAW STORAGE
TOTAL
100TB
USED
70TB
AVAIL
30TB
生产建议:
| 使用率 | 状态 |
|---|---|
| <70% | 正常 |
| 70-80% | 注意 |
| 80-85% | 扩容 |
| >85% | 风险 |
| >90% | 紧急 |
6.13 Pool管理
查看:
ceph osd pool ls
查看:
ceph osd pool stats
创建Pool:
ceph osd pool create kubernetes-rbd
设置副本:
ceph osd pool set kubernetes-rbd size 3
生产:
size=3
min_size=2
6.14 RBD PVC故障
查看PVC:
kubectl get pvc -A
查看Volume:
rbd ls -p kubernetes-rbd
检查映射:
rbd status <image>
强制解除:
rbd lock list <image>
删除锁:
rbd lock remove
6.15 CephFS故障
查看:
ceph fs status
正常:
active MDS
异常:
MDS damaged
恢复:
ceph mds fail <mds>
6.16 Ceph Dashboard
查看:
kubectl -n rook-ceph get svc
开启:
kubectl -n rook-ceph patch svc rook-ceph-mgr-dashboard \
-p '{"spec":{"type":"NodePort"}}'
获取密码:
kubectl -n rook-ceph get secret \
rook-ceph-dashboard-password \
-o jsonpath="{.data.password}" | base64 -d
6.17 Prometheus监控指标
Rook支持:
- Prometheus
- Grafana
- Alertmanager
关键指标:
OSD
ceph_osd_up
ceph_osd_in
PG
ceph_pg_active
ceph_pg_degraded
容量
ceph_cluster_total_bytes
ceph_cluster_used_bytes
6.18 生产每日巡检脚本
#!/bin/bash
echo "===== Ceph Status ====="
kubectl -n rook-ceph exec \
deploy/rook-ceph-tools \
-- ceph -s
echo "===== OSD ====="
kubectl -n rook-ceph exec \
deploy/rook-ceph-tools \
-- ceph osd tree
echo "===== PG ====="
kubectl -n rook-ceph exec \
deploy/rook-ceph-tools \
-- ceph pg stat
6.19 故障处理优先级
Ceph异常
|
+---------+---------+
|
ceph -s
|
+------+------+
| |
HEALTH_WARN HEALTH_ERR
|
检查:
1. OSD
2. MON
3. PG
4. 网络
5. 磁盘
6. 容量