本章目标:
- 建立 Rook-Ceph 生产升级标准流程
- 实现 Ceph 集群平滑扩容
- 降低升级过程中业务风险
- 支撑大规模 Kubernetes 存储平台生命周期管理
适用场景:
- Rook-Ceph 小规模集群
- GPU/K8s AI计算集群
- 企业私有云平台
- 多租户 Kubernetes 平台
11.1 Rook-Ceph 生命周期管理总览
生产环境生命周期:
初始部署
|
v
日常运维
|
+-----------+-----------+
| |
扩容 升级
| |
v v
增加节点/磁盘 Rook升级
| |
+-----------+-----------+
|
v
架构演进
|
v
灾难迁移
11.2 升级前生产检查
升级前必须确认:
Ceph状态
ceph -s
要求:
HEALTH_OK
PG active+clean
禁止升级:
HEALTH_ERR
检查OSD
ceph osd tree
要求:
all up/in
检查PG
ceph pg stat
正常:
active+clean
检查Kubernetes
kubectl get node
要求:
Ready
检查Rook
kubectl -n rook-ceph get pod
要求:
所有:
Running
11.3 Rook升级策略
Rook组件:
rook-ceph-operator
|
|
CephCluster CR
|
|
Ceph Daemon
MON/MGR/OSD
升级顺序:
1. Rook Operator
|
2. CRD
|
3. Ceph版本
|
4. CSI
|
5. 验证业务
11.4 Rook Operator升级
查看当前版本
kubectl -n rook-ceph \
get deploy rook-ceph-operator \
-o yaml | grep image
例如:
rook/ceph:v1.14.5
11.4.1 修改Operator版本
编辑:
kubectl edit deployment \
rook-ceph-operator \
-n rook-ceph
修改:
image:
rook/ceph:v1.15.0
或者:
kubectl set image deployment \
rook-ceph-operator \
rook-ceph-operator=rook/ceph:v1.15.0 \
-n rook-ceph
检查:
kubectl rollout status \
deployment/rook-ceph-operator \
-n rook-ceph
11.5 CRD升级
查看:
kubectl get crd | grep ceph
例如:
cephclusters.ceph.rook.io
升级:
kubectl apply -f crds.yaml
验证:
kubectl get crd cephclusters.ceph.rook.io
11.6 Ceph版本升级
例如:
旧:
Ceph Quincy 17.x
升级:
Ceph Reef 18.x
11.6.1 修改Ceph镜像
查看:
kubectl -n rook-ceph \
get cephcluster \
-o yaml
找到:
spec:
cephVersion:
image:
修改:
cephVersion:
image:
quay.io/ceph/ceph:v18.2.0
查看:
kubectl -n rook-ceph get pod
升级顺序:
MON
↓
MGR
↓
OSD
↓
CSI
11.7 Ceph升级监控
查看:
ceph versions
示例:
ceph version 18.2.0
查看:
ceph -s
升级期间:
允许:
HEALTH_WARN
不允许:
HEALTH_ERR
11.8 升级失败处理
场景
OSD升级失败:
CrashLoopBackOff
查看:
kubectl logs \
rook-ceph-osd-x \
-n rook-ceph
回滚:
恢复旧镜像:
cephVersion:
image:
quay.io/ceph/ceph:v17
检查:
ceph -s
11.9 Kubernetes版本升级兼容
推荐顺序:
Kubernetes
|
|
Rook
|
|
Ceph
不要:
K8s升级
+
Ceph升级
+
Rook升级
同时进行
11.10 OSD扩容
常见场景:
- 容量不足
- IOPS不足
- AI训练增长
11.10.1 新增磁盘
节点:
lsblk
例如:
新增:
/dev/sdc
8TB
11.10.2 配置CephCluster
查看:
kubectl edit cephcluster \
rook-ceph \
-n rook-ceph
添加:
storage:
nodes:
- name: node04
devices:
- name: sdc
Rook自动:
发现磁盘
↓
创建OSD
↓
加入CRUSH
11.11 新增存储节点
架构:
原:
node1 OSD
node2 OSD
node3 OSD
新增:
node4
步骤:
1. 加入K8s
kubectl get node
2. 标签
kubectl label node node4 \
storage=true
3. 修改CephCluster
添加节点:
nodes:
- name: node4
devices:
- name: sdb
检查:
ceph osd tree
11.12 MON扩容
生产:
推荐:
3 MON
大型:
5 MON
查看:
ceph mon stat
修改:
mon:
count: 5
验证:
ceph quorum_status
11.13 MGR扩容
推荐:
2 MGR
查看:
ceph mgr stat
增加:
mgr:
count: 2
11.14 Pool扩容
增加PG
查看:
ceph osd pool get rbd pg_num
修改:
ceph osd pool set rbd \
pg_num 256
注意:
生产环境:
不要一次扩大10倍
推荐:
128
↓
256
↓
512
11.15 存储容量扩容规划
容量计算:
公式:
实际容量 =
磁盘容量
×
(1/副本数)
×
利用率安全系数
例:
100TB RAW
副本3
安全80%
=
100TB /3 ×80%
≈26TB
11.16 在线替换磁盘
场景:
坏盘更换
标记out
ceph osd out osd.5
删除
ceph osd purge 5 \
--yes-i-really-mean-it
替换
插入新盘:
lsblk
Rook重新创建OSD
11.17 大规模集群扩容
推荐:
每次:
10%-20%
扩容
不要:
一次增加:
100个OSD
原因:
- PG重平衡压力
- 网络压力
- recovery影响业务
11.18 Ceph Rebalance控制
查看:
ceph -s
降低恢复压力:
ceph config set osd \
osd_max_backfills 1
提高恢复速度:
ceph config set osd \
osd_max_backfills 5
生产建议:
业务高峰:
降低恢复
业务低峰:
提高恢复
11.19 版本升级演练流程
生产推荐:
测试环境
升级Rook
↓
升级Ceph
↓
验证PVC
↓
压力测试
生产环境
步骤:
1. 备份
2. 健康检查
3. 升级Operator
4. 升级Ceph
5. 验证
6. 业务切换
7. 观察24小时
11.20 自动化运维建议
推荐:
Ansible管理:
目录:
rook-ceph-ops/
├── upgrade/
├── scale/
├── backup/
├── health-check/
└── disaster-recovery/
示例:
健康检查:
- name:
ceph health check
shell:
ceph -s
11.21 生产生命周期管理清单
| 项目 | 周期 |
|---|---|
| 健康检查 | 5分钟 |
| 容量检查 | 每天 |
| 备份验证 | 每天 |
| 恢复演练 | 季度 |
| 版本升级 | 半年 |
| 硬件评估 | 年度 |
11.22 生产升级检查表
| 项目 | 完成 |
|---|---|
| Ceph HEALTH_OK | □ |
| PG active+clean | □ |
| 备份完成 | □ |
| 升级窗口确认 | □ |
| 回滚方案 | □ |
| 监控开启 | □ |
| 业务验证 | □ |
11.23 推荐生产架构
Kubernetes
|
Rook Operator
|
+----------+----------+
| |
Ceph MON Ceph MGR
|
|
Ceph OSD
|
+--------+---------+
| |
NVMe HDD
|
|
Backup Platform
|
|
Disaster Center