RookCeph管理
默认命名空间 rook-ceph,主要修改成自己的
建议镜像上传到私有仓库或拉取后部署
部署参考: [[RookCeph安装]]
一, 检查
1 pod 状态
pod 都是
Running与Completed状态
kubectl get pod -n rook-ceph |grep -v 'Running\|Completed'2 集群状态
请注意以下状态,表明群集处于正常状态:
- 群集运行状况:群集整体状态为
HEALTH_OK,并且没有显示警告或错误状态消息。- Monitors(mon):所有监视器都包含在
quorum列表中。- Manager(mgr):Ceph mgr 处于
active状态。- OSDs(osd):所有 osd 都是
up与in状态。- Placement groups(pgs):所有 PG 都处于
active+clean状态。- Ceph 文件系统元数据服务器(mds):所有 MDS 都处于
up状态- Ceph 对象存储 RADOS 网关 (rgw):所有 rgw 都是
active状态
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph status cluster: id: b5b9953a-5f24-498e-8d51-ab377e0e3376 health: HEALTH_OK
services: mon: 3 daemons, quorum a,c,d (age 4h) mgr: b(active, since 3d), standbys: a mds: 1/1 daemons up, 1 hot standby osd: 3 osds: 3 up (since 4h), 3 in (since 4h) rgw: 1 daemon active (1 hosts, 1 zones)
data: volumes: 1/1 healthy pools: 12 pools, 305 pgs objects: 58.63k objects, 223 GiB usage: 449 GiB used, 151 GiB / 600 GiB avail pgs: 305 active+clean3 统计版本
kubectl -n rook-ceph get pod -o jsonpath='{range .items[*]}{"\t\t"}{.spec.containers[0].image}{"\t"}{.spec.initContainers[0].image}{"\n"}{end}' |sort -u二, Rook 升级
本指南适用于从rook v1.9.x 升级到 rook v1.10.x。
删除了对 ceph(15.2.x)的支持。如果您运行的是 v15,则必须先升级到 Ceph 到 v16 或 v17,然后再升级 Rook v1.10
Ceph-CSI 支持的最低版本是 v3.6.0。在将 Rook 操作员映像更新到 v1.10 之前或同时,您必须至少更新到此版本的 Ceph-CSI
在升级到 K8s 1.25 之前,请确保您至少运行的是 Rook v1.10.3 或 v1.10.x。如果在升级到 v1.10.3 或更高版本之前升级到 K8s 1.25,则可能会阻止 Helm 图表升级到较新版本的 Rook。请参阅 #10826 了解可能的解决方法。
1 准备文件
1.1 下载
wget https://raw.githubusercontent.com/rook/rook/v1.10.3/deploy/examples/common.yaml -O common-1.10.yamlwget https://raw.githubusercontent.com/rook/rook/v1.10.3/deploy/examples/crds.yaml -O crds-1.10.yaml1.2 修改配置
sed -i.bak \ -e "s/\(.*\):.*# namespace:operator/\1: rook-ceph # namespace:operator/g" \ -e "s/\(.*\):.*# namespace:cluster/\1: rook-ceph # namespace:cluster/g" \ common-1.10.yaml# 注意版本,我这里是1.10.3sed -i 's/1.9.10/1.10.3/g' operator.yaml2 更新
kubectl apply -f common-1.10.yaml -f crds-1.10.yamlkubectl apply -f operator.yaml3 查看
Ceph 集群,mgr,OSD,rbd 镜像,MDS 和 RGW 被终止并按顺序替换为更新的版本。
当 mons 更新时,群集可能会非常短暂地无响应
升级 MDS 时,Ceph 文件系统可能会脱机几次
kubectl -n rook-ceph get deployments -l rook_cluster=rook-ceph -o jsonpath='{range .items[*]}{.metadata.name}{" \treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" \trook-version="}{.metadata.labels.rook-version}{"\n"}{end}'rook-ceph-crashcollector-k8s-ceph-100 req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-crashcollector-k8s-ceph-136 req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-crashcollector-k8s-ceph-142 req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-mds-ccfs-a req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-mds-ccfs-b req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-mgr-a req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-mgr-b req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-mon-a req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-mon-c req/upd/avl: 1/1/ rook-version=v1.10.3rook-ceph-mon-d req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-nfs-cc-nfs-a req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-osd-0 req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-osd-1 req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-osd-2 req/upd/avl: 1/1/1 rook-version=v1.10.3rook-ceph-rgw-ccs3-store-a req/upd/avl: 1/1/1 rook-version=v1.10.3三, Ceph 升级
1 修改 ceph 版本
vim cluster.yaml...... image: quay.io/ceph/ceph:v17.2.4-20220930......kubectl apply -f cluster.yaml2 升级后处理
会报错
Telemetry requires re-opt-in
ceph telemetry on --license sharing-1-0ceph telemetry enable channel perf3 检查
3.1 查看版本
kubectl -n rook-ceph get deployments -l rook_cluster=rook-ceph -o jsonpath='{range .items[*]}{.metadata.name}{" \treq/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{" \tceph-version="}{.metadata.labels.ceph-version}{"\n"}{end}'
rook-ceph-crashcollector-k8s-ceph-100 req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-crashcollector-k8s-ceph-136 req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-crashcollector-k8s-ceph-142 req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mds-ccfs-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mds-ccfs-b req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mgr-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mgr-b req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mon-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mon-c req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-mon-d req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-nfs-cc-nfs-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-osd-0 req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-osd-1 req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-osd-2 req/upd/avl: 1/1/1 ceph-version=17.2.4-0rook-ceph-rgw-ccs3-store-a req/upd/avl: 1/1/1 ceph-version=17.2.4-03.2 查看集群状态
cluster: id: b5b9953a-5f24-498e-8d51-ab377e0e3376 health: HEALTH_OK
services: mon: 3 daemons, quorum a,c,d (age 11m) mgr: a(active, since 9m), standbys: b mds: 1/1 daemons up, 1 hot standby osd: 3 osds: 3 up (since 10m), 3 in (since 6h) rgw: 1 daemon active (1 hosts, 1 zones)
data: volumes: 1/1 healthy pools: 12 pools, 305 pgs objects: 54.36k objects, 207 GiB usage: 415 GiB used, 185 GiB / 600 GiB avail pgs: 305 active+clean四, 添加 ceph 节点
先把节点加入 k8s 集群
1 修改配置文件
vim cluster.yaml nodes: - name: "10.1.1.1" devices: - name: "sdb" - name: "10.1.1.2" devices: - name: "sdb" - name: "10.1.1.3" devices: - name: "sdb" - name: "10.1.1.4" devices: - name: "sdb"2 更新配置
kubectl apply -f cluster.yaml
3 查看节点是否正常
新加的节点 1T,数据一点一点平衡过来,期间读写性能很差,建议在业务低峰期添加节点,或者参考下面修改 recovery 策略
并且因为前面咱们开启了 pg_autoscaler,因为新加的节点磁盘比较大,所以自动分配的权重比较大.
ceph osd dfID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS 0 hdd 0.19530 1.00000 200 GiB 115 GiB 115 GiB 980 KiB 681 MiB 85 GiB 57.65 2.12 162 up 1 hdd 0.19530 1.00000 200 GiB 120 GiB 119 GiB 954 KiB 995 MiB 80 GiB 60.03 2.21 161 up 2 hdd 0.19530 1.00000 200 GiB 137 GiB 137 GiB 1.1 MiB 664 MiB 63 GiB 68.67 2.53 162 up 3 hdd 1.00000 1.00000 1 TiB 69 GiB 69 GiB 0 B 268 MiB 955 GiB 6.72 0.25 172 up TOTAL 1.6 TiB 442 GiB 439 GiB 3.0 MiB 2.5 GiB 1.2 TiB 27.19MIN/MAX VAR: 0.25/2.53 STDDEV: 32.19ceph osd dfID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS 0 hdd 0.19530 1.00000 200 GiB 67 GiB 66 GiB 980 KiB 814 MiB 133 GiB 33.48 1.31 120 up 1 hdd 0.19530 1.00000 200 GiB 74 GiB 73 GiB 954 KiB 1.1 GiB 126 GiB 37.10 1.46 132 up 2 hdd 0.19530 1.00000 200 GiB 69 GiB 68 GiB 1.1 MiB 819 MiB 131 GiB 34.48 1.35 116 up 3 hdd 1.00000 1.00000 1 TiB 203 GiB 203 GiB 0 B 731 MiB 821 GiB 19.86 0.78 289 up TOTAL 1.6 TiB 413 GiB 410 GiB 3.0 MiB 3.4 GiB 1.2 TiB 25.46MIN/MAX VAR: 0.78/1.46 STDDEV: 8.844 修改 recovery 策略
可以操作以下参数实现速度控制,但是要留意,速度越快对集群性能的影响越大;可以动态的调整参数值,观察 recovery 对集群性能影响情况,找到合适自己的值,即不会对 client 请求造成过大影响的同时保障最优的 recovery 速度。
| 参数名称 | 解释 |
|---|---|
| osd_recovery_max_single_start | 同时启动多少线程实现 recovery |
| osd_backfill_retry_interval | osd 在重试回填请求之前等待的秒数(默认 30 秒) |
| osd_recovery_sleep_hdd | hd 磁盘在恢复过程中的休眠时间 |
| osd_recovery_sleep_ssd | ssd 磁盘在恢复过程中的休眠时间 |
| osd_max_backfills | 允许进出 OSD 的最大回填操作数。数字越大,恢复越快。 |
| osd_recovery_max_active | OSD 恢复请求的数量。数字越大,恢复越快。 |
| osd_recovery_op_priority | 恢复操作优先级,取值 1-63,值越高占用资源越高,恢复越快。 |
| osd_recovery_priority | 同上,恢复操作的优先级,如过不希望影响业务,设置优先级低一些,数字越小,性能影响越小。 |
4.1 查看现在配置并记录
ceph-osd -i 1 --show-config | egrep "osd_recovery_max_active|osd_recovery_op_priority|osd_max_backfills"osd_max_backfills = 1osd_recovery_max_active = 0osd_recovery_max_active_hdd = 3osd_recovery_max_active_ssd = 10osd_recovery_op_priority = 34.2 修改
ceph tell 'osd.*' injectargs --osd-recovery-max-active=14.3 还原配置
数据平衡后还原
ceph tell 'osd.*' injectargs --osd-recovery-max-active=3五, 节点下线维护
1 暂时关闭 operator
防止故障转移
kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=02 移除故障 osd 数据
ceph osd set noupceph osd down 3ceph osd out 3# 等待数据均衡完成ceph -s...... progress: Global Recovery Event (12m) [=====================.......] (remaining: 3m)# 查看osd状态ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 1.58589 root default-5 0.19530 host k8s-ceph-100 0 hdd 0.19530 osd.0 up 1.00000 1.00000-3 0.19530 host k8s-ceph-136 1 hdd 0.19530 osd.1 up 1.00000 1.00000-7 0.19530 host k8s-ceph-142 2 hdd 0.19530 osd.2 up 1.00000 1.00000-9 1.00000 host k8s-ceph-153 3 hdd 1.00000 osd.3 down 0 1.000003 移除故障的 osd
ceph osd purge 3 --yes-i-really-mean-itceph auth del osd.3# 查看osd状态ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.58589 root default-5 0.19530 host k8s-ceph-100 0 hdd 0.19530 osd.0 up 1.00000 1.00000-3 0.19530 host k8s-ceph-136 1 hdd 0.19530 osd.1 up 1.00000 1.00000-7 0.19530 host k8s-ceph-142 2 hdd 0.19530 osd.2 up 1.00000 1.00000-9 0 host k8s-ceph-1534 删除节点(可选)
不建议删除节点,重新加入节点 osd 启动不起来,报 Unable to create a new OSD id
ceph osd crush remove k8s-ceph-153removed item id -9 name 'k8s-ceph-153' from crush map# 查看osd状态ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.58589 root default-5 0.19530 host k8s-ceph-100 0 hdd 0.19530 osd.0 up 1.00000 1.00000-3 0.19530 host k8s-ceph-136 1 hdd 0.19530 osd.1 up 1.00000 1.00000-7 0.19530 host k8s-ceph-142 2 hdd 0.19530 osd.2 up 1.00000 1.000004.1 删除配置文件里的节点
vim cluster.yaml nodes: - name: "10.1.1.1" devices: - name: "sdb" - name: "10.1.1.2" devices: - name: "sdb" - name: "10.1.1.3" devices: - name: "sdb"4.2 更新配置
kubectl apply -f cluster.yaml
4.3 移除 pod 和对应的 job
kubectl delete deploy -n rook-ceph rook-ceph-osd-3kubectl delete job -n rook-ceph rook-ceph-osd-prepare-k8s-ceph-1534.4 查看
kubectl get pod -n rook-ceph |grep osdrook-ceph-osd-0-bf44ccb8-qhlwx 1/1 Running 1 (78m ago) 22hrook-ceph-osd-1-568fbf7fbd-x7wbv 1/1 Running 1 (5h26m ago) 4d18hrook-ceph-osd-2-6d5d5b7f8-gvtqj 1/1 Running 0 23h5 恢复集群
ceph osd unset noupkubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=1六, 遇到的问题
1 daemons have recently crashed
重启后产生的
# 查看状态ceph status# 查看系统中所有的崩溃ceph crash ls# 查看新的崩溃ceph crash ls-newID ENTITY NEW2022-09-23T08:03:43.783384Z_4fce84ae-9947-4c5c-8623-c2e70cf0565f osd.2 *2022-09-23T08:19:42.357142Z_3417133f-ba77-40cb-9203-b76b2bdca374 osd.2 *# 所有id都要进行操作ceph crash archive 2022-09-23T08:03:43.783384Z_4fce84ae-9947-4c5c-8623-c2e70cf0565f2 pgs not scrubbed in time
PG 没有 deep-scrubbed 造成,手动对异常 PG 进行 deep-scrubb 清理就可以了,应该是 OSDs 掉线后,CEPH 自动进行数据恢复。再将相应的 OSDs 重新加入后,则需要将恢复的数据再擦除掉。于是提示相应的警告信息,正在进行删除相关的操作,且其 pgs 的数量会不断变少。等待一段时间后,则恢复正常,此时 ceph 文件系统性能很差。
# ceph -s cluster: id: b5b9953a-5f24-498e-8d51-ab377e0e3376 health: HEALTH_WARN 23 pgs not scrubbed in time# ceph health detail# ceph health detail |grep 'since'|awk '{print "ceph pg deep-scrub "$2}'|bash3 active+clean+remapped
出现这种情况,一般是做了 osd 的
reweight操作引起的,这是因为一般在做reweight的操作的时候,根据算法,这个上面的 pg 是会尽量分布在这个主机上的,而crush reweight不变的情况下,去修改 osd 的reweight的时候,可能算法上会出现无法映射的问题。osd2 的 REWEIGHT 为 0.x, 需要手动调整到 1.0
# ceph -s...... data: volumes: 1/1 healthy pools: 12 pools, 209 pgs objects: 18.66k objects, 69 GiB usage: 138 GiB used, 462 GiB / 600 GiB avail pgs: 49/37714 objects misplaced (0.130%) 203 active+clean # 正常 6 active+clean+remapped # 非正常# ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.58589 root default-5 0.19530 host k8s-ceph-100 0 hdd 0.19530 osd.0 up 1.00000 1.00000-3 0.19530 host k8s-ceph-136 1 hdd 0.19530 osd.1 up 1.00000 1.00000-7 0.19530 host k8s-ceph-142 2 hdd 0.19530 osd.2 up 0.95001 1.00000# ceph osd reweight 2 1.0reweighted osd.2 to 1 (10000)# ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.58589 root default-5 0.19530 host k8s-ceph-100 0 hdd 0.19530 osd.0 up 1.00000 1.00000-3 0.19530 host k8s-ceph-136 1 hdd 0.19530 osd.1 up 1.00000 1.00000-7 0.19530 host k8s-ceph-142 2 hdd 0.19530 osd.2 up 1.00000 1.00000文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!