Проблема с получением инвентаря с хоста в кластере Ceph

#python #ceph

#python #ceph

Вопрос:

Я успешно установил Ceph(v15.2.6) кластер с помощью инструмента cephadm на нескольких виртуальных узлах (Centos7) . На каждом виртуальном узле отдельное блочное устройство /dev/sdb настроено как выделенное ceph-устройство. До этого момента все действия ceph выглядели нормально.

Через некоторое время мне пришлось переформатировать /dev/sdb второй виртуальный узел. Ceph-cluster получил переформатированное устройство, но я получил предупреждение о работоспособности CEPHADM_REFRESH_FAILED . После некоторого расследования я получил следующее:

 > ceph health detail

[WRN] CEPHADM_REFRESH_FAILED: failed to probe daemons or devices
    host node02 ceph-volume inventory failed: cephadm exited with an error code: 1, stderr:INFO:cephadm:/bin/docker:stderr  stderr: blkid: error: /dev/fd0: No such device or address
INFO:cephadm:/bin/docker:stderr -->  KeyError: 'ceph.cluster_name'
Traceback (most recent call last):
  File "<stdin>", line 5203, in <module>
  File "<stdin>", line 1115, in _infer_fsid
  File "<stdin>", line 1198, in _infer_image
  File "<stdin>", line 3321, in command_ceph_volume
  File "<stdin>", line 877, in call_throws
RuntimeError: Failed command: /bin/docker run --rm --net=host --ipc=host --privileged --group-add=disk -e CONTAINER_IMAGE=docker.io/ceph/ceph:v15.2.6 -e NODE_NAME=node02 -v /var/run/ceph/b2f1a03e-07c4-11eb-9602-005056010012:/var/run/ceph:z -v /var/log/ceph/b2f1a03e-07c4-11eb-9602-005056010012:/var/log/ceph:z -v /var/lib/ceph/b2f1a03e-07c4-11eb-9602-005056010012/crash:/var/lib/ceph/crash:z -v /dev:/dev -v /run/udev:/run/udev -v /sys:/sys -v /run/lvm:/run/lvm -v /run/lock/lvm:/run/lock/lvm --entrypoint /usr/sbin/ceph-volume docker.io/ceph/ceph:v15.2.6 inventory --format=json
 

Сбой при запуске вручную команды «docker run… ceph-volume inventory --format=json » в node02 журнале была указана следующая информация:

 [2020-11-27 15:00:46,486][ceph_volume][ERROR ] exception caught by decorator
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/ceph_volume/decorators.py", line 59, in newfunc
    return f(*a, **kw)
  File "/usr/lib/python3.6/site-packages/ceph_volume/main.py", line 151, in main
    terminal.dispatch(self.mapper, subcommand_args)
  File "/usr/lib/python3.6/site-packages/ceph_volume/terminal.py", line 194, in dispatch
    instance.main()
  File "/usr/lib/python3.6/site-packages/ceph_volume/inventory/main.py", line 38, in main
    self.format_report(Devices())
  File "/usr/lib/python3.6/site-packages/ceph_volume/inventory/main.py", line 48, in format_report
    print(json.dumps(inventory.json_report()))
  File "/usr/lib/python3.6/site-packages/ceph_volume/util/device.py", line 51, in json_report
    output.append(device.json_report())
  File "/usr/lib/python3.6/site-packages/ceph_volume/util/device.py", line 208, in json_report
    output['lvs'] = [lv.report() for lv in self.lvs]
  File "/usr/lib/python3.6/site-packages/ceph_volume/util/device.py", line 208, in <listcomp>
    output['lvs'] = [lv.report() for lv in self.lvs]
  File "/usr/lib/python3.6/site-packages/ceph_volume/api/lvm.py", line 789, in report
    'cluster_name': self.tags['ceph.cluster_name'],
KeyError: 'ceph.cluster_name'
 

Но если я запущу «docker run… ceph-volume inventory --format=plain » Я не получаю никакой ошибки:

 
Device Path               Size         rotates available Model name
/dev/fd0                  4.00 KB      True    False     
/dev/rbd0                 20.00 GB     False   False     
/dev/rbd1                 20.00 GB     False   False     
/dev/rbd2                 8.00 GB      False   False     
/dev/sda                  120.00 GB    True    False     Virtual disk
/dev/sdb                  500.00 GB    True    False     Virtual disk
 

На мой взгляд, где-то в образе docker определенно есть ошибка /usr/lib/python3.6/site-packages/ceph_volume/api/lvm.py docker.io/ceph/ceph:v15.2.6 .

Кто-нибудь знает, как преодолеть ceph-volume inventory --format=json проблему?

Или, может быть, кто-нибудь может подсказать, как отладить скрипт python, чтобы обнаружить ошибку?

Спасибо!