添加 OSD 实例(增)
磁盘清理
DISK="/dev/sdX" # Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean) sgdisk --zap-all $DISK # Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync # SSDs may be better cleaned with blkdiscard instead of dd blkdiscard $DISK # Inform the OS of partition table changes partprobe $DISK
删除 OSD 实例(删)
Rook Docs/Ceph OSD Management/Remove an OSD
Ceph OSD Management – Rook Ceph Documentation
需要部署 Rook Toolbox 容器,然后进入容器对 Rook-Ceph Cluster 进行管理操作;
当通过 Helm 部署 Ceph 时,能够在 values.yaml 中指定是否安装 toolbox 服务;
在 Rook Ceph 中,需要手动执行 OSD 删除,而无法自动删除;
第一步、删除前确认工作
在删除前,需要进行如下确认:
1)当删除 OSD 实例后,磁盘具有足够空间来容纳数据;
2)确定剩余 OSD 及 PG 的健康状况,以用于数据重平衡;
3)不要一次删除太多 OSD 实例,并且等待重平衡结束;
4)如果 PG 全部为 active+clean 状态,并且未提示空间不足,则可以安全进行操作;
第二步、进行 OSD 删除
通过手动进行 OSD 清理操作:
# ----------------------------------------------------------------------------- # 停止 Operator 运行 kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=0 # ----------------------------------------------------------------------------- # 进入工具箱进行操作 CEPH_TOOLBOX=$(kubectl get pods -l app=rook-ceph-tools -o=jsonpath='{.items[0].metadata.name}') # 移除 OSD 实例 kubectl exec $CEPH_TOOLBOX -- ceph osd out osd.<ID> # 等待所有 PG 进入 active+clean 状态(即数据开始同步) kubectl exec $CEPH_TOOLBOX -- ceph status # 更新 CephCluster CR 以避免再次使用该磁盘 # 如果 useAllDevices: true 则不需要调整 ... # 停止 OSD 实例 # 执行 ceph osd down osd.<ID> 无效果,需要删除 Deployment 才能 Down OSD 实例; kubectl -n rook-ceph scale deployment rook-ceph-osd-<ID> --replicas=0 kubectl exec $CEPH_TOOLBOX -- ceph osd down osd.<ID> kubectl delete deployment -n rook-ceph rook-ceph-osd-<ID> # 清除 OSD 磁盘 kubectl exec $CEPH_TOOLBOX -- ceph osd purge <ID> --yes-i-really-mean-it # 从物理主机中删除磁盘 ... # ----------------------------------------------------------------------------- # 恢复 Operator 运行 kubectl -n rook-ceph scale deployment rook-ceph-operator --replicas=1
通过 rook-ceph 插件(Krew),完成清理工作:
# https://rook.io/docs/rook/v1.10/Storage-Configuration/Advanced/ceph-osd-mgmt/#purge-the-osd-with-krew # https://github.com/rook/kubectl-rook-ceph#install kubectl rook-ceph rook purge-osd 0 --force # 实测,该命令不能直接用于 OSD 删除,其提示 cephosd: osd.0 is healthy. It cannot be removed unless it is 'down' 信息;