默认命名空间 rook-ceph,主要修改成自己的
建议镜像上传到私有仓库或拉取后部署
部署参考: RookCeph安装
一, 检查 1 pod 状态
pod 都是Running
与Completed
状态
1 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
状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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+clean
3 统计版本 1 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 。
参考文档
v1.10 中的重大更改
删除了对 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 下载
启用 Prometheus 需要升级 rbac,点击下载
1 2 wget https://raw.githubusercontent.com/rook/rook/v1.10.3/deploy/examples/common.yaml -O common-1.10.yaml wget https://raw.githubusercontent.com/rook/rook/v1.10.3/deploy/examples/crds.yaml -O crds-1.10.yaml
1.2 修改配置 1 2 3 4 5 6 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 sed -i 's/1.9.10/1.10.3/g' operator.yaml
2 更新 1 2 kubectl apply -f common-1.10.yaml -f crds-1.10.yaml kubectl apply -f operator.yaml
3 查看
Ceph 集群,mgr,OSD,rbd 镜像,MDS 和 RGW 被终止并按顺序替换为更新的版本。
当 mons 更新时,群集可能会非常短暂地无响应
升级 MDS 时,Ceph 文件系统可能会脱机几次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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.3 rook-ceph-crashcollector-k8s-ceph-136 req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-crashcollector-k8s-ceph-142 req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-mds-ccfs-a req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-mds-ccfs-b req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-mgr-a req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-mgr-b req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-mon-a req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-mon-c req/upd/avl: 1/1/ rook-version=v1.10.3 rook-ceph-mon-d req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-nfs-cc-nfs-a req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-osd-0 req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-osd-1 req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-osd-2 req/upd/avl: 1/1/1 rook-version=v1.10.3 rook-ceph-rgw-ccs3-store-a req/upd/avl: 1/1/1 rook-version=v1.10.3
三, Ceph 升级
注意事项参考
1 修改 ceph 版本 1 2 3 4 5 vim cluster.yaml ...... image: quay.io/ceph/ceph:v17.2.4-20220930 ...... kubectl apply -f cluster.yaml
2 升级后处理
会报错Telemetry requires re-opt-in
1 2 ceph telemetry on --license sharing-1-0 ceph telemetry enable channel perf
3 检查 3.1 查看版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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-0 rook-ceph-crashcollector-k8s-ceph-136 req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-crashcollector-k8s-ceph-142 req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mds-ccfs-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mds-ccfs-b req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mgr-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mgr-b req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mon-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mon-c req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-mon-d req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-nfs-cc-nfs-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-osd-0 req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-osd-1 req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-osd-2 req/upd/avl: 1/1/1 ceph-version=17.2.4-0 rook-ceph-rgw-ccs3-store-a req/upd/avl: 1/1/1 ceph-version=17.2.4-0
3.2 查看集群状态 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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 修改配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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,因为新加的节点磁盘比较大,所以自动分配的权重比较大.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ceph osd df ID 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.19 MIN/MAX VAR: 0.25/2.53 STDDEV: 32.19 ceph osd df ID 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.46 MIN/MAX VAR: 0.78/1.46 STDDEV: 8.84
4 修改 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 查看现在配置并记录 1 2 3 4 5 6 ceph-osd -i 1 --show-config | egrep "osd_recovery_max_active|osd_recovery_op_priority|osd_max_backfills" osd_max_backfills = 1 osd_recovery_max_active = 0 osd_recovery_max_active_hdd = 3 osd_recovery_max_active_ssd = 10 osd_recovery_op_priority = 3
4.2 修改 1 ceph tell 'osd.*' injectargs --osd-recovery-max-active=1
4.3 还原配置
数据平衡后还原
1 ceph tell 'osd.*' injectargs --osd-recovery-max-active=3
五, 节点下线维护 1 暂时关闭 operator
防止故障转移
1 kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=0
2 移除故障 osd 数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ceph osd set noup ceph osd down 3 ceph osd out 3 ceph -s ...... progress: Global Recovery Event (12m) [=====================.......] (remaining: 3m) ceph osd tree ID 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.00000
3 移除故障的 osd 1 2 3 4 5 6 7 8 9 10 11 12 13 ceph osd purge 3 --yes-i-really-mean-it ceph auth del osd.3 ceph osd tree ID 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-153
4 删除节点(可选)
不建议删除节点,重新加入节点 osd 启动不起来,报 Unable to create a new OSD id
1 2 3 4 5 6 7 8 9 10 11 12 ceph osd crush remove k8s-ceph-153 removed item id -9 name 'k8s-ceph-153' from crush map ceph osd tree ID 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
4.1 删除配置文件里的节点 1 2 3 4 5 6 7 8 9 10 11 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 1 2 kubectl delete deploy -n rook-ceph rook-ceph-osd-3 kubectl delete job -n rook-ceph rook-ceph-osd-prepare-k8s-ceph-153
4.4 查看 1 2 3 4 kubectl get pod -n rook-ceph |grep osd rook-ceph-osd-0-bf44ccb8-qhlwx 1/1 Running 1 (78m ago) 22h rook-ceph-osd-1-568fbf7fbd-x7wbv 1/1 Running 1 (5h26m ago) 4d18h rook-ceph-osd-2-6d5d5b7f8-gvtqj 1/1 Running 0 23h
5 恢复集群 1 2 ceph osd unset noup kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=1
六, 遇到的问题 1 daemons have recently crashed
重启后产生的
1 2 3 4 5 6 7 8 9 10 11 # 查看状态 ceph status # 查看系统中所有的崩溃 ceph crash ls # 查看新的崩溃 ceph crash ls-new ID ENTITY NEW 2022-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-c2e70cf0565f
2 pgs not scrubbed in time
PG 没有 deep-scrubbed 造成,手动对异常 PG 进行 deep-scrubb 清理就可以了,应该是 OSDs 掉线后,CEPH 自动进行数据恢复。再将相应的 OSDs 重新加入后,则需要将恢复的数据再擦除掉。于是提示相应的警告信息,正在进行删除相关的操作,且其 pgs 的数量会不断变少。等待一段时间后,则恢复正常,此时 ceph 文件系统性能很差。
1 2 3 4 5 6 7 cluster: id : b5b9953a-5f24-498e-8d51-ab377e0e3376 health: HEALTH_WARN 23 pgs not scrubbed in time
3 active+clean+remapped
出现这种情况,一般是做了 osd 的 reweight
操作引起的,这是因为一般在做 reweight
的操作的时候,根据算法,这个上面的 pg 是会尽量分布在这个主机上的,而 crush reweight
不变的情况下,去修改 osd 的 reweight
的时候,可能算法上会出现无法映射的问题。
osd2 的 REWEIGHT 为 0.x, 需要手动调整到 1.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ...... 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 ID 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 reweighted osd.2 to 1 (10000) ID 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