В статье используются следующие термины:
Проблема
Виртуальная машина (ВМ) имеет статус «Недоступна». Как правило, проблема присутствует на узле кластера, где расположена проблемная ВМ, и связана:
- с некорректной работой службы libvirtd;
- с проблемами сертификата.
Диагностика
Чтобы подтвердить причину проблемы, выполните следующие проверки. Наличие хотя бы одного признака подтверждает проблему:
- На узле кластера, где расположена ВМ в статусе «Недоступна», проверьте статус службы libvirtd:
- Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Выполните команду:
systemctl status libvirtdПризнак проблемы: служба остановлена или в выводе есть ошибки, связанные с файлами сокетов.
Пример вывода с проблемой● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2026-02-25 05:06:57 CET; 7h ago Docs: man:libvirtd(8)
- На сервере с платформой проверьте лог vmwatch.log:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Выполните команду: Признак проблемы: присутствуют ошибки libvirtd или записи о проблемах с сертификатом.
docker exec -it vm_back tail -f /var/log/vmwatch.log
Пример ошибки подключения к libvirtdConnect to libvirt failed: virError(Code=38, Domain=7, Message='unable to connect to server') Connection to libvirt not active, reconnectПример ошибки сертификатаlibvirt: XML-RPC error : authentication failed: Failed to verify peer's certificate
Решение
Некорректная работа libvirtd
Если диагностика указала на проблемы с службой libvirtd, перезапустите сервис:
- Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Перезапустите службу libvirtd:
systemctl restart libvirtd - Проверьте статус:
systemctl status libvirtd - Если перезапуск не помог, выполните перезапуск файлов сокетов:
systemctl stop libvirtd-ro.socket systemctl stop libvirtd-admin.socket systemctl stop libvirtd.socket systemctl stop libvirtd.service systemctl start libvirtd-tls.socket systemctl start libvirtd-ro.socket systemctl start libvirtd-admin.socket systemctl start libvirtd.socket - Убедитесь, что в логе vmwatch.log нет ошибок сертификатов:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Выполните команду:
docker exec -it vm_back tail -f /var/log/vmwatch.log - Если ошибки есть, перевыпустите сертификат на узле по инструкции в разделе Проблемы с сертификатом.
Проблемы с сертификатом
Если в логе vmwatch.log присутствует ошибка, связанная с сертификатами, перевыпустите сертификат на узле кластера:
- Уточните ID узла кластера с недоступной ВМ:
- Перейдите в раздел Узлы → выберите нужный узел → столбец id.
- Сохраните полученное значение.
- Перевыпустите сертификат одним из следующих способов:
- через API-запрос:
- Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Выполните API-запрос:
curl -H 'internal-auth: on' input:1500/vm/v3/node/<node_id>/cert -d '{}'Пояснения
- через Swagger:
- В правом меню нажмите значок
Сервисы → Swagger. - В поле Select a definition выберите vm.
- Перейдите в раздел Node.
- Выберите следующий метод:
POST /node/{node_id}/cert Updating libvirt certificates on a host - Нажмите Try it out.
- Введите ID узла с недоступной ВМ. Получен в п. 1.
- Нажмите Execute.
- В правом меню нажмите значок
- через API-запрос:
Подробнее см. в статье Использование Swagger.
Перезапуск сервиса vmwatch
Если проблемы с libvirtd и сертификатом отсутствуют, но статус ВМ не обновился, перезапустите сервис vmwatch в контейнере vm_back:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Выполните команду:
docker exec -it vm_back supervisorctl restart vmwatch
Полезные ссылки