我有一个 OKD 集群,以 GlusterFS 作为存储类,以 Heketi 作为前端。在 Heketi 数据库被破坏之前,一切都运行良好。现在我无法对存储进行任何更改,也无法添加新的持久卷。GlusterFS 仍可正常工作,为 Pod 提供现有的持久卷。
我尝试通过加载拓扑文件重新创建 Heketi 数据库,但我认为 Heketi 正在尝试在已包含具有正常工作的 GlusterFS 的 LVM 的设备上创建 LVM 上的物理卷。当我尝试加载拓扑时,我在 Heketi 日志中看到以下行:
[kubeexec] DEBUG 2021/01/23 17:04:39 heketi/pkg/remoteexec/log/commandlog.go:34:log.(*CommandLogger).Before: Will run command [/usr/sbin/lvm pvcreate -qq --metadatasize=128M --dataalignment=256K '/dev/sdb'] on [pod:glusterfs-storage-vdm96 c:glusterfs ns:glusterfs (from host:okd-admdev-compute1 selector:glusterfs-node)]
Heketi 客户端在将设备添加到集群时挂起,然后超时。
[root@heketi-storage-12-wn652 tmp]# heketi-cli topology load --json=topo.json
Creating cluster ... ID: 6a65d3bce35760e5075db0cae6ed8e7e
Allowing file volumes on cluster.
Allowing block volumes on cluster.
Creating node okd-admdev-compute1 ... ID: 7da6b2b1e4f9a723cfd769618ef36a51
Adding device /dev/sdb ... Unable to add device: Initializing device /dev/sdb failed (failed to check device contents): timeout
Creating node okd-admdev-compute2 ... ID: e63f5366838492219a8f929ee4cc67a7
Adding device /dev/sdb ...
如何在不重新初始化设备的情况下重新创建 Heketi 数据库并使用现有数据重复使用设备?
答案1
这个问题没有解决办法,因为 Heketi 无法从 LVM 存储重新创建自己的数据库。但是有一个解决方法。
- 首先,我通过使用本机客户端安装卷来备份 GlusterFS 存储上的所有数据。
- 销毁 LVM 存储。
- 让我们从头开始初始化 Heketi 整个集群。
- 重新创建卷。
- 使用本机客户端挂载卷。
- 恢复数据。确保恢复所有属性。