Ceph 和 Rook 问题疑难解答
这些主题提供对 Ceph 和 Rook 问题进行故障排除的说明。
OSD 创建失败疑难解答
问题
安装失败,因为未创建对象存储守护程序 (OSD)。
溶液
安装失败的一个常见原因是未创建对象存储守护程序 (OSD)。OSD 在群集节点上配置存储。由于磁盘资源不可用(如资源不足或磁盘空间分区不正确),可能无法创建 OSD。为防止由于磁盘空间不足而导致安装失败,请确保节点有足够的未格式化磁盘空间可用。
调试磁盘格式化问题
问题
当需要格式化磁盘时,安装失败。
溶液
确保有足够的未格式化的磁盘空间。
您必须检查作业的 rook-ceph-osd-prepare-hostname-*
日志,以确定是否需要重新格式化磁盘或分区。要重新格式化磁盘或分区,然后重新启动 Rook:
-
使用下列方法之一重新格式化现有磁盘或分区:
谨慎:这些命令会完全重新格式化您正在使用的磁盘或分区,您将丢失它们上的所有数据。
- 如果您有一个本应用于 Ceph 的块存储设备,但由于处于不可用状态而未使用,则可以完全重新格式化磁盘。
$ sgdisk -zap /dev/disk $ dd if=/dev/zero of=/dev/disk bs=1M count=100
- 如果您有一个应该用于 Ceph 的磁盘分区,则可以完全清除该分区上的数据。
$ wipefs -a -f /dev/partition $ dd if=/dev/zero of=/dev/partition bs=1M count=100
- 如果您有一个本应用于 Ceph 的块存储设备,但由于处于不可用状态而未使用,则可以完全重新格式化磁盘。
-
重新启动 Rook 以保存更改并重新尝试 OSD 创建过程。
$ kubectl rollout restart deploy -n rook-ceph rook-ceph-operator
Ceph OSD 故障排除
问题
Ceph OSD 出现故障。
溶液
您必须识别出现故障的 OSD 并将其删除。然后,您可以部分或全部重新格式化或替换磁盘。
要解决磁盘故障问题:
-
执行以下命令,查看命名空间中安装
rook-ceph
的 Rook 和 Ceph Pod 的状态。# kubectl get po -n rook-ceph
-
rook-ceph-osd-*
如果 Pod 处于Error
或CrashLoopBackoff
状态,则必须修复磁盘。按照以下步骤修复磁盘:
-
停止
rook-ceph-operator
。# kubectl scale deploy -n rook-ceph rook-ceph-operator --replicas=0
-
删除失败的 OSD 进程。
# kubectl delete deploy -n rook-ceph rook-ceph-osd-number
-
连接到工具箱。
$ kubectl exec -ti -n rook-ceph $(kubectl get po -n rook-ceph -l app=rook-ceph-tools -o jsonpath={..metadata.name}) -- bash
-
确定出现故障的 OSD。
# ceph osd status
-
将失败的 OSD 标记出来。
[root@rook-ceph-tools-/]# ceph osd out 5 marked out osd.5. [root@rook-ceph-tools-/]# ceph osd status ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE 0 10.xx.xx.210 4856M 75.2G 0 0 0 0 exists,up 1 10.xx.xx.215 2986M 77.0G 0 0 1 89 exists,up 2 10.xx.xx.98 3243M 76.8G 0 0 1 15 exists,up 3 10.xx.xx.195 4945M 75.1G 0 0 0 0 exists,up 4 10.xx.xx.170 5053M 75.0G 0 0 0 0 exists,up 5 10.xx.xx.197 0 0 0 0 0 0 exists
-
卸下故障的 OSD。
# ceph osd purge number --yes-i-really-mean-it
- 连接到托管失败 OSD 的节点,并执行下列操作之一:
- 在硬件故障时更换硬盘。
- 完全重新格式化磁盘。
$ sgdisk -zap /dev/disk $ dd if=/dev/zero of=/dev/disk bs=1M count=100
- 完全重新格式化分区。
$ wipefs -a -f /dev/partition $ dd if=/dev/zero of=/dev/partition bs=1M count=100
-
rook-ceph-operator
重新启动 。# kubectl scale deploy -n rook-ceph rook-ceph-operator --replicas=1
-
监控 OSD Pod。
# kubectl get po -n rook-ceph
如果 OSD 无法恢复,请使用相同的过程删除 OSD,然后删除磁盘或删除分区,然后再重新启动
rook-ceph-operator
。
-
另见
Rook 和 Ceph Pod 的调试问题
问题
当 Rook 和 Ceph Pod 处于该 error
状态时,安装可能会失败
溶液
硬件功率不足可能会导致 Rook 和 Ceph Pod 错误。Rook 和 Ceph pod 错误也可能导致安装失败。要解决 Rook 和 Ceph Pod 的大多数问题,请确保已安装的 Pod 处于该 running
状态。要确认这一点,您必须:
-
执行以下命令,查看命名空间中安装
rook-ceph
的 Rook 和 Ceph Pod 的状态。# kubectl get po -n rook-ceph
-
确保以下 Pod 处于该
running
状态:rook-ceph-mon-*
—通常为三个监视器容器-
rook-ceph-mgr-*
—一个管理器 Pod -
rook-ceph-osd-*
—三个或更多 OSD Pod -
rook-ceph-mds-cephfs-*
—元数据服务器 -
rook-ceph-rgw-object-store-*
—ObjectStore 网关 -
rook-ceph-tools*
- 对于其他调试选项要连接到工具箱,请使用以下命令:
$ kubectl exec -ti -n rook-ceph $(kubectl get po -n rook-ceph -l app=rook-ceph-tools \ -o jsonpath={..metadata.name}) -- bash
有关工具箱中其他常用命令的更多信息,请参阅 表 1。
表 1:其他命令 命令 说明 # ceph status
查看集群状态。 # ceph osd status
查看 OSD 图的摘要。 # ceph osd df
查看磁盘使用情况的详细信息(全局和每个池)。 # ceph osd utilization
查看 OSD 利用率。 # ceph osd pool stats
查看磁盘池使用情况。 # ceph osd tree
查看 OSD 树。 # ceph pg stat
查看 pg 状态和性能。