Rook Ceph 移除 OSD

我有一个环境给每个 Node 节点挂载了 2 个盘,但是这个情况会导致挂了 2 台服务器就导致业务不可用所以需要精简 OSD 将每个 Node 至挂一个盘就好了.

这边我将 ID 为 6 7 8 9 10 的 OSD 删除

开始操作

rook自动化

使用 rook/deploy/examples/osd-purge.yaml 删除 osd 将 osd-ids 配置成你需要的 id

....
        args:
        - "ceph"
        - "osd"
        - "remove"
        - "--preserve-pvc"
        - "false"
        - "--force-osd-removal"
        - "false"
        - "--osd-ids"
        - "6,7,8,9"
...

执行脚本

kubectl -f osd-purge.yaml

等待一会后就可以自动删除全部...

手动操作

使 Operator 改为0

kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=0 

移除配置

**可以使用 **kubectl edit 进行配置也可以直接在本地的 cluster.yaml 中删除

Kubectl edit

# kubectl edit cephclusters.ceph.rook.io -n rook-ceph rook-ceph 

改为

保存配置

:wq

cluster.yaml

**进入 **/rook/deploy/examples/cluster.yaml

image-20241210162048585

改为

进入 rook-ceph-tools

kubectl exec -i -t -n rook-ceph rook-ceph-tools-7b67b65bd-r7gjc -c rook-ceph-tools -- sh -c "clear; (bash || ash || sh)"

设置noup标签

ceph osd set noup #当设置此标志时,Ceph会阻止任何OSD的启动或重新上线。

不要一下子全部down一个一个来

下线OSD节点

**执行 **ceph osd down 0 将手动告知Ceph集群OSD 0处于“down”状态。这意味着尽管OSD 0可能在物理上仍在运行,Ceph逻辑上不再考虑它处于”up”状态,从而不参与数据操作。

ceph osd down 6

# marked down osd.6. 

迁移OSD数据

还是在 rook-ceph-tools 节点中

**执行 **ceph osd out 0 将OSD 0从集群数据存储和复制活动中移除。Ceph会根据CRUSH算法重新分配原本存储在该OSD上的数据块,使集群数据在其他可用OSD上进行重新平衡和复制。

ceph osd out 6
# marked out osd.6. 


# 想要恢复使用 ceph osd in 6

查看是否迁移完成

命令行查看 ceph -w
ceph -w     
  cluster:
    id:     8bcfc496-89fb-4064-bf11-fdc0aaa0ba2a
    health: HEALTH_WARN
            noup flag(s) set
 
  services:
    mon: 3 daemons, quorum a,b,c (age 80m)
    mgr: b(active, since 2h), standbys: a
    osd: 11 osds: 6 up (since 6m), 6 in (since 6m)
         flags noup
 
  data:
    pools:   2 pools, 33 pgs
    objects: 1.93k objects, 7.5 GiB
    usage:   28 GiB used, 196 GiB / 224 GiB avail
    pgs:     33 active+clean
使用Dashborad

循环以上操作

循环以上操作直到全部关闭并 33PG 没有任何问题

移除OSD 节点

**执行 **ceph osd purge 0 --yes-i-really-mean-it 命令会永久删除指定的OSD(在此例中为OSD 0),包括OSD的相关数据、日志以及在内存中的信息元数据。这是一个不可逆的操作

ceph osd purge 0 --yes-i-really-mean-it
# purged osd.6

删除OSD 密钥

ceph auth del osd.0 命令用于删除指定OSD(在此例中为OSD 0)的身份验证密钥。这是Ceph安全性管理的一部分,涉及Ceph Monitor节点上存储的身份认证信息。

ceph auth del osd.6

查看是否删除

循环以上操作

循环以上操作直到OSD 全部关闭

删除 Deployment

在ceph-tools外操作

kubectl delete deploy -n rook-ceph rook-ceph-osd-6

恢复noup标签

ceph osd unset noup 命令用于清除集群级别的 noup 标志。

ceph osd unset noup #当设置此标志时,Ceph会阻止任何OSD的启动或重新上线。
# ceph osd unset noup

启动Operator

kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=1

完成启动