QEMU Guest Agent — это программа-демон, которая устанавливается на ВМ. QEMU Guest Agent обеспечивает выполнение команд на ВМ и обмен информацией между ВМ и узлом кластера.

VMmanager использует QEMU Guest Agent чтобы изменять сетевые настройки ВМ без перезагрузки. Если QEMU Guest Agent недоступен для платформы в течение пяти минут, VMmanager перезагрузит ВМ для применения настроек.

Чтобы управлять ВМ с ОС CentOS, в QEMU Guest Agent должна быть включена функция guest-exec.

Чтобы избежать незапланированного перезапуска ВМ, вы можете проверить статус QEMU Guest Agent перед изменением настроек. Это можно сделать на ВМ или узле кластера.

Диагностика на ВМ


  1. Подключитесь к ВМ по SSH.

  2. Определите статус QEMU Guest Agent:

    systemctl status qemu-guest-agent
    CODE

    Примеры ответов:

    QEMU Guest Agent запущен

    ● qemu-guest-agent.service - QEMU Guest Agent
       Loaded: loaded (/usr/lib/systemd/system/qemu-guest-agent.service; enabled; vendor preset: enabled)
       Active: active (running) since Вт 2021-08-10 05:25:54 UTC; 1 weeks 3 days ago
    CODE

    QEMU Guest Agent остановлен

    ● qemu-guest-agent.service - QEMU Guest Agent
       Loaded: loaded (/usr/lib/systemd/system/qemu-guest-agent.service; enabled; vendor preset: enabled)
       Active: inactive (dead) since Пт 2021-08-20 06:27:16 UTC; 2s ag
    CODE

    QEMU Guest Agent не установлен

    Unit qemu-guest-agent.service could not be found.
    CODE

Диагностика на узле кластера


  1. Подключитесь к узлу кластера по SSH.
  2. Определите статус QEMU Guest Agent:

    virsh qemu-agent-command <vm_id>_<vm_name> '{"execute": "guest-info", "arguments": {}}'
    CODE
    <vm_id>_<vm_name> — имя файла ВМ, содержащее id и имя ВМ. Например, для ВМ с id 12 и именем test-vm имя файла должно быть 12_test_vm

    Если QEMU Guest Agent запущен, вы получите ответ вида:

    Фрагмент ответа в JSON

    {"return":{"version":"2.12.0","supported_commands":[{"enabled":true,"name":"guest-get-osinfo","success-response":true}
    CODE

    Если QEMU Guest Agent не запущен или остановлен, вы получите ответ вида:

    ошибка: Guest agent is not responding: QEMU guest agent is not connected
    CODE
  3. Для ВМ с ОС CentOS определите статус функции guest-exec: 

    virsh qemu-agent-command <vm_id>_<vm_name> '{"execute":"guest-info"}' --pretty | grep -B1 "guest-exec"
    BASH

    <vm_id>_<vm_name> — имя файла ВМ, содержащее id и имя ВМ. Например, для ВМ с id 12 и именем test-vm имя файла должно быть 12_test_vm

    Фрагмент ответа, если функция включена

    "enabled": true,
    "name": "guest-exec",
    CODE

    Фрагмент ответа, если функция выключена

    "enabled": false,
    "name": "guest-exec",
    CODE

Восстановление работы


Если QEMU Guest Agent не установлен

  1. Подключитесь к ВМ по SSH.
  2. Установите QEMU Guest Agent:

    ОС CentOS

    yum install qemu-guest-agent
    CODE

    ОС Debian, Ubuntu

    apt install qemu-guest-agent
    CODE
  3. Добавьте QEMU Guest Agent в автозагрузку:

    systemctl enable --now qemu-guest-agent
    CODE
  4. Проверьте статус QEMU Guest Agent:

    systemctl status qemu-guest-agent
    CODE
  5. Проверьте статус службы SELinux:

    sestatus
    CODE

    Если статус отличается от disable:

    1. Отключите SELinux. Для этого замените в файле /etc/selinux/config строку

      SELINUX=enforcing
      CODE

      на

      SELINUX=disabled
      CODE
    2. Перезагрузите ВМ.
  6. Если в файле /etc/sysconfig/qemu-ga есть строка вида

    BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status
    CODE


    1. Закомментируйте или удалите эту строку.
    2. Перезапустите QEMU Guest Agent:

      systemctl restart qemu-guest-agent
      CODE

Если QEMU Guest Agent остановлен

  1. Подключитесь к ВМ по SSH.
  2. Запустите QEMU Guest Agent:

    systemctl start qemu-guest-agent
    CODE

Если функция guest-exec отключена

  1. Подключитесь к ВМ по SSH.
  2. Выполните команду: 

    sed -i '/BLACKLIST_RPC=/cBLACKLIST_RPC=' /etc/sysconfig/qemu-ga
    BASH
  3. Перезапустите QEMU Guest Agent: 

    systemctl restart qemu-guest-agent
    CODE