背景

因为某个osd是ssd类型存储,现在其他盘都是hdd,所以把这个ssd的存储下线,于是开始整个流程。

要下线的盘是osd.0。

操作流程

进入到ceph的tool工具pod进行操作

kubectl exec -it -n rook-ceph rook-ceph-tools-xxx -- sh

把要下线的osd设置 noup 标志(防止 OSD 自动上线)

ceph osd add-noup 0

把要下线的osd权重设置为0

ceph osd crush reweight osd.0 0

执行 ceph -w 实时监控,直到该 OSD 的 PGs 变为 0 且集群状态稳定(HEALTH_OK 或 HEALTH_WARN 但无数据不一致告警)

ceph -w

查看osd.0的具体pg

ceph pg ls-by-osd osd.0 | grep -v ^PG | sed -e '/^$/d' -e '/^\*$/d' | awk '{print $1}' | grep '^[0-9]\+\.[0-9a-fA-F]\+$' | sort -u 

查看osd的pg数量

ceph pg ls-by-osd osd.0 | grep -v ^PG | sed -e '/^$/d' -e '/^\*$/d' | awk '{print $1}' | grep '^[0-9]\+\.[0-9a-fA-F]\+$' | sort -u | wc -l

在这里插入图片描述
数据迁移完成后在ui界面上查看数量也是0,并且没有正在迁移的pg
在这里插入图片描述
把要下线的osd标记 为 down

ceph osd down 0

把要下线的OSD标记为 out,其实设置权重为0就会自动触发迁移,等数据迁移执行完成后再标记为out的流程最符合规范,当然直接执行也可。

ceph osd out 0

在ceph的k8s cluster配置文件中更改配置取消osd对应盘配置

kubectl get cephcluster rook-ceph -n rook-ceph -o yaml > cephcluster.yaml

将其中osd对应的node盘删除,圈内的格式全部删除,哪个下线就删除哪个配置
在这里插入图片描述
重新加载配置

 kubectl apply -f cephcluster.yaml 

加载完最好等个五分钟再操作让配置生效。

接下来,在ceph集群中永久删除 OSD(操作不可逆)

ceph osd purge 0 --yes-i-really-mean-it

删除 OSD 认证密钥

ceph auth del osd.0

ceph上的操作基本完成,接下来操作k8s中现有的资源

kubectl  get deploy -n rook-ceph

删除osd.0的deployment资源

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

在tool中查看osd数量

ceph -s

在这里插入图片描述
在web界面上查看结果
在这里插入图片描述

过程中遇见的问题

按这个流程操作下来,最后在ceph -s查看的时候查看还是原来的osd数量并没有减少
在这里插入图片描述
这个时候会觉得操作文档有问题,实际过程中我也遇见了这问题
在这里插入图片描述
ceph osd purge 0 --yes-i-really-mean-it的命令重新执行后就查询不到osd了,但在之前的流程中这个命令已经执行过了。

因为ceph的配置文件更改加载需要时间,如果配置没生效前执行这个流程,还会重新拉起那个下线的osd,然后osd的可用数量又变成原本数量。

这就是在过程中再重载配置等几分钟的原因,在出现这个问题后我也并没有执行什么其他操作只是再次删除了osd0。

ceph osd purge 0 --yes-i-really-mean-it

如果等待后还是会自动上线可以检查集群配置文件,以及osd对应ID号的配置是否删除。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐