我有一个服务规范,将所有空闲的 SSD 分配给 OSD:
service\_type: osd
service\_id: dashboard-tintin-7634852880
service\_name: osd.dashboard-tintin-7634852880
placement:
host\_pattern: '*'
spec:
data\_devices:
rotational: false
filter\_logic: AND
objectstore: bluestore
我希望对每台服务器分配的驱动器有更好的控制权,因此我创建了一些新的规范,如下所示:
service_type: osd
service_id: dashboard-tintin-1715222958508
service_name: osd.dashboard-tintin-1715222958508
placement:
host_pattern: 'host1'
spec:
data_devices:
rotational: false
filter_logic: AND
objectstore: bluestore
在 Ceph Dashboard -> Services 中,我可以看到我的旧 OSD 守护进程继续在旧服务定义的控制下运行。我删除了旧的服务定义。我收到警告:
If osd.dashboard-tintin-7634852880 is removed the the following OSDs will remain, --force to proceed anyway ...
我认为让守护进程继续运行是我想要的,因此我继续使用--force
。现在 Ceph 仪表板 -> 服务列出了 OSD 和“未管理”,而新的服务定义仍然没有选择它们。我如何在新的服务规范下移动这些 OSD 守护进程?
如果我停止守护进程,新的守护进程将不会按照新的服务定义启动。如果我重新部署守护进程,它们仍会显示为“未管理”。我让它们按照新的服务定义运行的唯一方法是停止守护进程并清除驱动器。然而,考虑到集群的大小,这不是一个实用的解决方案。
鉴于数据是存在的并且是正确的,我很惊讶没有办法让流浪守护进程恢复。(我查看了有关流浪守护进程的文档,但它们仅参考了将集群升级到 cephadm 的上下文)。
这是我的一部分ceph orch ls osd --export
:
service_type: osd
service_id: dashboard-tintin-1706434852880
service_name: osd.dashboard-tintin-1706434852880
unmanaged: true
spec:
filter_logic: AND
objectstore: bluestore
---
service_type: osd
service_id: dashboard-tintin-1715222958508
service_name: osd.dashboard-tintin-1715222958508
placement:
host_pattern: ceph-pn-osd1
spec:
data_devices:
rotational: false
filter_logic: AND
objectstore: bluestore
---
service_type: osd
service_id: dashboard-tintin-1712545397532
service_name: osd.dashboard-tintin-1712545397532
placement:
host_pattern: ceph-pn-osd2
spec:
data_devices:
rotational: false
filter_logic: AND
objectstore: bluestore
---
service_type: osd
service_id: dashboard-tintin-1706421419210
service_name: osd.dashboard-tintin-1706421419210
placement:
host_pattern: ceph-pn-osd3
spec:
data_devices:
rotational: false
filter_logic: AND
objectstore: bluestore
---
service_type: osd
service_id: dashboard-tintin-1706421419211
service_name: osd.dashboard-tintin-1706421419211
placement:
host_pattern: ceph-pn-osd4
spec:
data_devices:
rotational: false
filter_logic: AND
objectstore: bluestore
---
service_type: osd
service_id: dashboard-tintin-1706425693555
service_name: osd.dashboard-tintin-1706425693555
placement:
host_pattern: ceph-pn-osd5
spec:
data_devices:
rotational: false
filter_logic: AND
objectstore: bluestore
一种方法是修改
unit.run
OSD 文件并将其指向service_name
您想要的:根据 Orchestrator 的刷新间隔,修改的内容
service_name
将在几分钟后显示出来。这看起来可能有点不靠谱,但由于不清楚为什么您当前的 OSD 服务规范似乎不起作用,因此这可能是一个合理的解决方法。