rook下osd的移除与加回

本文详细介绍了在Ceph集群中遇到数据不一致问题时的排查步骤,包括通过ceph-s、cephhealthdetail命令定位问题,并通过kubernetes操作移除故障OSD的完整流程。涉及了osd的定位、磁盘状态检查、数据均衡、osd的停用、删除、清理及恢复。此外,还提供了磁盘格式化脚本和新OSD的添加方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rook移除osd

问题:

注意:以下数据来源于个人环境,图文可能不一致需根据实际修改IP等数据

1、ceph -s 查看报错有1个pg数据不一致,并且通过ceph osd status查看osd状态都是UP状态
在这里插入图片描述

2、ceph health detail 查看初步确认是pg1.25的osd 52,56以及8中有硬盘可能有坏
在这里插入图片描述

解决:
一、查找对应的osd和磁盘关系

1、ceph osd repair 定位osd,在修复pg的过程中,报错:1.25 shard 56 soid candidate had a read error
在这里插入图片描述
2、找到osd.56对应pod所在节点
在这里插入图片描述
3、kubectl get po xxxx-osd-56-xxx -n rook-ceph -o yaml |grep UUID 查询如下,ROOK_OSD_UUID,记录此处圈起来的字符串
在这里插入图片描述
4、去到osd.56对应的node(第三步有查到),执行命令lsblk |grep -C2 85d2d15c(上一步记录的字符串),找到对应的磁盘是sde
在这里插入图片描述
5、根据物理硬盘,在所在主机的dmesg的日志中查询发现osd 56对应的硬盘sde确实有报错,blk_update_request: critical medium error在百度中查询说是硬盘坏道
在这里插入图片描述

二、移除osd

现在有需求需要停⽌ 172-17-27-92 上的 sda 也就是 osd.5
在这里插入图片描述
1、先把operator设置为0

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

2、修改配置,将需要移除的盘移除:

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

在这里插入图片描述

删除对应的对应的盘,如果只有⼀块盘则直接删除主机,即上图圈起来部分;

如果是该主机下多块盘则删除对应的盘即可;

如果是修改cncp.yaml文件,cncp.yaml,不删除主机得用一下这种格式。

在这里插入图片描述

3、手动移除对应osd

kubectl exec -it -n rook-ceph rook-ceph-tools-769bdf4bdd-hdx6r bash
ceph osd set noup
ceph osd down 0
ceph osd out 0
#ceph -w查看数据均衡进度, 等待数据均衡完成

在这里插入图片描述

在这里插入图片描述

4、均衡数据完成后移除对应的osd

ceph osd purge 0 --yes-i-really-mean-it
ceph auth del osd.0

在这里插入图片描述
如果出现下面情况属正常在这里插入图片描述

5、如果该主机只有⼀块盘则对应移除该主机(如果是多块盘无需执行此步)

可以通过 ceph osd tree 确定该主机是否为⼀块盘

执行:

ceph osd crush remove 172-17-27-77

6、检查ceph状态以及osd状态

ceph -s
ceph osd tree

7、移除pod,和判断删除对应的job

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

8、恢复配置

ceph osd unset noup

9、格式化磁盘或者下架磁盘

对应机器执⾏,输⼊对应需要下架的盘

#!/bin/bash
yum -y install gdisk
read -p "input your disk [/dev/sda]:" DISK
# 磁盘去格式化
# DISK="/dev/sda"
# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be
clean)
# You will have to run this step for all disks.
sgdisk --zap-all $DISK
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
# These steps only have to be run once on each node
# If rook sets up osds using ceph-volume, teardown leaves some devices mapped that
lock the disks.
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
# ceph-volume setup can leave ceph-<UUID> directories in /dev (unnecessary clutter)
rm -rf /dev/ceph-*
lsblk -f

10、恢复rook的operator

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

11、检查对应osd的pod是否启动

kubectl get pod -n rook-ceph -o wide |grep rook-ceph-osd

在这里插入图片描述

三、移除osd

怎么删除的,怎么加入进去

  • 前提,先到对应机器格式化所需添加的磁盘
  • 再执行kubectl edit cephclusters.ceph.rook.io -n rook-ceph rook-ceph
  • 最后重启operator然后等待就可以了

格式盘脚本:

[root@172-17-27-92 ~]# cat ceph.sh
#!/bin/bash
#read -p "input your disk [/dev/sda]:" DISK
DISK="/dev/sda"
if [ ! -z $1 ];then
DISK=$1
fi
# 磁盘去格式化
# DISK="/dev/sda"
# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
# You will have to run this step for all disks.
sgdisk --zap-all $DISK
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync

# These steps only have to be run once on each node
# If rook sets up osds using ceph-volume, teardown leaves some devices mapped that lock the disks.
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
# ceph-volume setup can leave ceph-<UUID> directories in /dev (unnecessary clutter)
rm -rf /dev/ceph-*

lsblk -f
rm  -rf /var/lib/rook/*

再执行:

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

在这里插入图片描述
最后重启operator等待即可,查看ceph集群状态是否有新加入osd

重新加入就一个问题,ceph auth get osd.x,这个出来删除就可以了

<think>好的,用户现在需要清理虚拟机磁盘并重新部署Rook Ceph集群。首先,我需要理解用户的具体场景。用户可能是在测试或者生产环境中遇到了严重的问题,导致现有的Ceph集群无法正常使用,需要彻底清理然后重新部署。这可能是因为之前的部署出现了不可恢复的错误,或者用户想要重置环境进行新的配置。 接下来,我需要考虑用户的需求。用户提到的是“清理虚拟机磁盘”,这意味着他们可能是在虚拟机环境下运行Rook Ceph,可能需要确保所有相关的数据都被彻底删除,避免残留数据影响新集群的部署。重新部署Rook Ceph集群的步骤需要详细且准确,避免遗漏任何关键步骤,否则可能导致新的部署失败。 然后,我要分析可能的深层需求。用户可能不仅需要步骤,还需要确保清理过程彻底,包括Kubernetes资源、Ceph的配置和数据,以及虚拟机磁盘的残留文件。此外,用户可能在之前的部署中遇到了问题,希望通过清理和重新部署来解决问题,因此可能需要一些预防措施或最佳实践,避免同样的问题再次发生。 现在,我需要整理清理和重新部署的步骤。首先,清理现有的Rook Ceph集群,这包括删除CRD、命名空间、存储类和相关数据目录。然后,需要清理虚拟机磁盘,使用dd命令或shred工具确保数据不可恢复。接着,重新部署Rook Ceph集群需要从官方获取部署文件,进行必要的配置调整,并验证部署是否成功。 需要注意的地方包括:确保所有相关的Kubernetes资源都被删除,避免残留资源导致冲突;清理数据目录时,确认路径是否正确,尤其是如果用户自定义了数据存储位置;在重新部署时,可能需要根据虚拟机环境调整配置,例如存储设备路径或资源分配。 用户可能遇到的问题包括:清理不彻底导致新集群部署失败,或者在虚拟机环境中磁盘设备名称变化导致配置错误。因此,在步骤中需要强调检查磁盘设备名称,确认数据目录清理,以及使用正确的部署配置文件。 最后,需要提供验证步骤,确保新集群正常运行,以及预防措施,比如备份配置、资源限制和监控设置,帮助用户避免未来出现问题。同时,解释清理的重要性,比如残留数据可能导致数据不一致或启动失败,增强用户的理解。</think>以下是清理虚拟机磁盘并重新部署Rook Ceph集群的完整操作指南,分为**环境清理**和**重建部署**两大阶段: --- ### 一、环境清理阶段 #### 步骤1:销毁现有Ceph集群 ```bash # 删除CephCluster CRD(触发清理流程) kubectl -n rook-ceph patch cephcluster rook-ceph -p '{"spec":{"cleanupPolicy":{"confirmation":"yes-really-destroy-data"}}}' --type merge # 等待所有资源自动清理完成(约5-10分钟) watch kubectl -n rook-ceph get all ``` #### 步骤2:移除Rook相关Kubernetes对象 ```bash # 删除Rook命名空间及关联资源 kubectl delete ns rook-ceph # 清理CRD(关键!否则重建时会继承旧配置) kubectl delete crd cephclusters.ceph.rook.io kubectl delete crd cephblockpools.ceph.rook.io kubectl delete crd cephfilesystems.ceph.rook.io ``` #### 步骤3:虚拟机磁盘深度清理 ```bash # 确认磁盘设备路径(通常为/dev/sdb、/dev/vdb等) lsblk -f # 擦除磁盘头部元数据(对所有OSD磁盘执行) sudo dd if=/dev/zero of=/dev/{device} bs=1M count=100 status=progress # 彻底清理文件系统签名(可选) sudo wipefs -a /dev/{device} # 如果使用LVM: sudo vgremove -y ceph-$(uuidgen) sudo pvremove /dev/{device} ``` --- ### 二、重建部署阶段 #### 步骤1:准备基础环境 ```bash # 创建新命名空间 kubectl create ns rook-ceph # 下载最新部署文件 wget https://github.com/rook/rook/raw/master/deploy/examples/crds.yaml wget https://github.com/rook/rook/raw/master/deploy/examples/common.yaml wget https://github.com/rook/rook/raw/master/deploy/examples/operator.yaml wget https://github.com/rook/rook/raw/master/deploy/examples/cluster.yaml ``` #### 步骤2:调整关键配置(编辑cluster.yaml) ```yaml apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: dataDirHostPath: /var/lib/rook mon: count: 3 # 必须为奇数 allowMultiplePerNode: false storage: useAllNodes: false nodes: - name: "node1" # 节点名称需匹配k8s节点名 devices: - name: "sdb" # 确认虚拟机磁盘设备名 - name: "sdc" config: osdsPerDevice: "1" # 每磁盘创建1个OSD ``` #### 步骤3:执行部署 ```bash # 应用CRD和Operator kubectl apply -f crds.yaml -f common.yaml -f operator.yaml # 等待Operator就绪(约2分钟) kubectl -n rook-ceph rollout status deploy/rook-ceph-operator # 部署Ceph集群 kubectl apply -f cluster.yaml ``` --- ### 三、验证阶段 #### 健康检查 ```bash # 等待所有Pod进入Running状态(约10-15分钟) watch kubectl -n rook-ceph get pods # 通过工具容器验证集群状态 kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s ``` 期望输出: ```log health: HEALTH_OK mon: 3 daemons, quorum a,b,c osd: 6 osds: 6 up (since 2m), 6 in ``` --- ### 四、关键注意事项 1. **磁盘残留数据风险**: - 若未彻底清理旧磁盘数据,新集群启动时可能出现`bluestore meta`校验失败 - 解决方案:使用`ceph-volume lvm zap`彻底擦除: ```bash ceph-volume lvm zap --destroy /dev/{device} ``` 2. **虚拟机磁盘分配建议**: - 每个OSD磁盘建议预留20%空间作为缓冲 - 使用直通模式(Passthrough)而非虚拟磁盘文件,提升性能 3. **部署优化参数**: ```yaml # cluster.yaml 追加配置 cephVersion: allowUnsupported: false skipUpgradeChecks: false continueUpgradeAfterChecksEvenIfNotHealthy: false ``` --- ### 五、故障排除 #### 常见问题1:OSD无法启动 ```log error: failed to create OSD: failed to configure device: failed to initialize device sdb: failed to create new OSD: failed to get monitor info: failed to fetch mon config ``` **修复步骤**: ```bash # 检查mon Secret是否存在 kubectl -n rook-ceph get secret rook-ceph-mon # 若缺失,手动生成monmap kubectl -n rook-ceph exec deploy/rook-ceph-mon-a -- ceph-mon --mkfs -i a --monmap /tmp/monmap --keyring /etc/ceph/keyring.mon ``` #### 常见问题2:仲裁丢失 ```log mon: clock skew detected ``` **解决方案**: ```bash # 所有节点同步NTP sudo chronyc makestep ``` --- 通过以上步骤可确保虚拟机环境下Rook Ceph集群的干净重建。建议在清理前备份`/var/lib/rook`目录(若有重要数据),并验证虚拟机存储配置是否满足Ceph的[官方硬件要求](https://docs.ceph.com/en/latest/start/hardware-recommendations/)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值