В данной небольшой статье я расскажу про такой инструмент, как Xen Orchestra, который можно использовать для управления виртуальными машинами на гипервизорах XenServer (или его форке XCP-ng). Это удобно, когда гипервизоры географически разрознены, т.к. Xen Orchestra объединяет всё в одном месте. К тому же, под Linux нет удобного клиента для управления XenServer и для этого приходится держать виртуалку с Windows для запуска XenCenter, что бывает иногда крайне неудобно. Далее опишу основные функции, установку и последующую настройку.
Итак, основные функции Xen Orchestra:
- Централизованное управление гипервизорами XenServer;
- Создание и управление VM посредством web-интерфейса;
- Получение статистических данных и метрик;
- Резервное копирование VM.
Согласно документации, всё уже готово и настроено, нужно только на одном из хостов с XenServer развернуть готовый образ VM с минимальными системными требованиями:
- 2 vCPU;
- 15 HDD;
- 2 Gb RAM.
Такое готовое решение называется XOA (Xen Orchestra Virtual Appliance) и является отдельной виртуальной машиной, где всё работает из коробки. Это самый простой путь установки.
Архитектурно XOA состоит из следующих компонентов:
- xo-server;
- xo-web;
- xo-cli.
Но так вышло, что хостов с XenServer, где можно было бы разместить XOA, не нашлось, а потому остаётся одно решение, ради которого и написан данный текст. Собственно, установка из исходников на Debian 9 Strech на отдельной виртуальной машине (в моём случае ESXi, но не принципиально, это может быть любой гипервизор или bare metal). Такой вариант вполне себе допустим, ибо имеется понятная документация, но разработчики всё же не рекомендуют использовать такой вариант для production среды. Использовать или нет, каждый решает сам.
Установка
Перед началом нужно установить Node.js обязательно 8 версии:
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt install -y nodejs
А после – пакетный менеджер Yarn для Node.js (вместо npm):
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt update && apt install yarn
Доп. пакеты:
apt install build-essential redis-server libpng-dev git python-minimal libvhdi-utils lvm2 cifs-utils
Далее перейти в директорию, где физически будет располагаться будущий XO. В моём случае это /opt
cd /opt && git clone -b master http://github.com/vatesfr/xen-orchestra
cd xen-orchestra
yarn
yarn build
И дождаться завершения сборки и компилирования. По идее, никаких ошибок в процессе возникнуть не должно, если всё делать по инструкции. По окончании перейти в директорию:
cd packages/xo-server
И скопировать конфигурационный файл:
cp sample.config.toml .xo-server.toml
Открыть удобным редактором /opt/xen-orchestra/packages/xo-server/.xo-server.toml и внести правки:
[http.mounts]
'/' = '../xo-web/dist/'
На этом всё! Можно запускать и проверять:
yarn start
После запуска можно зайти на адрес сервера (80 порт) и убедиться, что всё работает.
Дефолтные логин и пароль:
admin@admin.net
admin
Дэшбоард выглядит так:
Автозапуск
Для настройки автозапуска XO можно можно воспользоваться решением из документации, установив пакет forever, но такой вариант мне непривычен. Изучив форумы, понял, что forever будет требовать дополнительной памяти, а потому пошёл более простым и привычным путём, создав юнит:
/etc/systemd/system/xo-server.service:
[Unit]
Description=Xen Orchestra server
After=network-online.target
[Service]
Restart=on-failure
WorkingDirectory=/opt/xen-orchestra/packages/xo-server/
ExecStart=/usr/bin/node ./bin/xo-server
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
А далее осталось лишь включить автозагрузку и запустить:
systemctl enable xo-server && systemctl start xo-server
После запуска ОС стартует не сразу, нужно немного подождать.
systemctl status -l xo-server
● xo-server.service - Xen Orchestra server
Loaded: loaded (/etc/systemd/system/xo-server.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2019-10-21 17:04:22 MSK; 2min 2s ago
Main PID: 1274 (node)
Tasks: 16 (limit: 4915)
CGroup: /system.slice/xo-server.service
├─1274 /usr/bin/node ./bin/xo-server
└─1499 /usr/bin/node /opt/xen-orchestra/node_modules/jest-worker/build/workers/processChild.js
Oct 21 17:05:08 xoa node[1274]: signal: undefined,
Oct 21 17:05:08 xoa node[1274]: [Symbol(originalCallSite)]: [ CallSite {}, CallSite {}, CallSite {}, CallSite {} ],
Oct 21 17:05:08 xoa node[1274]: [Symbol(mutatedCallSite)]: [ CallSite {}, CallSite {}, CallSite {}, CallSite {} ] } }
Oct 21 17:05:08 xoa node[1274]: 2019-10-21T14:05:08.374Z xo:xo-mixins:hooks DEBUG start finished
Oct 21 17:05:08 xoa node[1274]: 2019-10-21T14:05:08.374Z xo:xo-mixins:hooks DEBUG clean start…
Oct 21 17:05:08 xoa node[1274]: 2019-10-21T14:05:08.472Z xo:xo-mixins:hooks DEBUG clean finished
Oct 21 17:05:08 xoa node[1274]: Warning: connect.session() MemoryStore is not
Oct 21 17:05:08 xoa node[1274]: designed for a production environment, as it will leak
Oct 21 17:05:08 xoa node[1274]: memory, and will not scale past a single process.
Oct 21 17:05:08 xoa node[1274]: 2019-10-21T14:05:08.630Z xo:main INFO Setting up / → /opt/xen-orchestra/packages/xo-web/dist
Так как был использован метод установки из исходников, то обновления не поддерживаются. Меня данный вариант устроил, т.к. свои функции XO будет выполнять – управлять виртуалками. Фичи в виде инкрементных бэкапов и прочие лишь доступны в коммерческой версии, в данном случае можно будет пользоваться лишь бесплатными функциями. Также поддерживается авторизация через LDAP, ACL.
Были установлены:
xo-web 5.50.3
xo-server 5.50.1
UPD
Обнаружил, что на старых версиях XenServer, которые у меня используются (6.5.0 и 7.0) не работает консоль. Это известная проблема, решается патчами, которые можно установить прям из XO.
- XS65ESP1051 (for XenServer 6.5);
- XS70E033 (for XenServer 7.0).
Подробнее о проблемах с консолью: https://xen-orchestra.com/blog/xenserver-consoles/