Сегодня мы рассмотрим установку системы облачной виртуализации OpenNebula, которую можно использовать как альтернативу Hyper-V под Astra Linux.
OpenNebula – облачная платформа, главным элементом которой является кластер. К кластеру можно подключить до 1024 улов (node). Вы можете использовать множество кластеров и управлять ими из одной панели управления. Управление кластерами, узлами, виртуальными машинами и сетями, и всеми элементами возможно, как из командной строки, так и с помощью удобного web-интерфейса.
При этом OpenNebula не потребляет много ресурсов, сама служба управления кластером - FrontEnd потребует около 1Гб оперативной памяти, и на одном сервере вы можете установить сервер управления кластерами и узел, на котором будут работать виртуальные машины.
Мы будем использовать общее (shared) хранилище и таким образом избавимся от необходимости использовать SSH, что позволит почти мгновенно запускать и останавливать виртуальные машины на нашем локальном узле (host).
Сегодня мы рассмотрим установку OpenNebula на один сервер, и создадим и запустим виртуальную машину под Astra Linux.
Предварительная настройка сети
Для работы с OpenNebula на сервере нам потребуется как минимум два сетевых интерфейса. Это обязательное требование!
eth0 – интерфейс управления – management, через него будет производится управление и доступ к серверу.
eth1 – интерфейс на котором будут автоматически создаваться сетевые мосты (bridge) для виртуальных сетей.
Если вы настраиваете тестовый стенд, например, на ноутбуке, я рекомендую подключить usb-сетевой адаптер.
Для начала настроим сеть, если сеть у вас уже настроена, проверьте настройки на соответствие:
sudo mcedit /etc/network/interfaces.d/eth0
auto eth0
allow-hotplug etho
iface eth0 inet static
address 192.168.1.240
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 77.88.8.8 77.88.8.1
sudo mcedit /etc/network/interfaces.d/eth1
auto eth1
allow-hotplug eth1
iface eth1 inet manual
Для сервера нужно задавать статический сетевой адрес, чтобы в дальнейшем не возникло проблем в случае, если DHCP-сервер выйдет из строя или раздаст ip-адрес сервера другому устройству!
Обратите внимание! На интерфейсе eth1 мы не прописываем ip адрес, так как он будет включен в автоматически создаваемый сетевой мост (bridge) для виртуальных машин.
Добавление репозитория OpenNebula в apt
В стандартном репозитории Astra Linux отсутствуют пакеты для OpenNebula, так что придется пользоваться официальным репозиторием:
Создадим файл
sudo mcedit /etc/apt/sources.list.d/opennebula.list
С содержимым
deb https://downloads.opennebula.io/repo/6.0/Debian/9 stable opennebula
Обновим apt
sudo apt-get update
Вы можете получить ошибку:
W: Репозиторий «https://downloads.opennebula.io/repo/6.0/Debian/9 stable Release» не содержит файла Release.
N: Данные из этого репозитория нельзя аутентифицировать, и поэтому потенциально из небезопасно использовать.
N: Смотрите справочную страницу apt-secure(8) о создании репозитория и настройке пользователя.
E: Не удалось получить https://downloads.opennebula.io/repo/6.0/Debian/9/dists/stable/opennebula/binary-i386/Packages server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
E: Некоторые индексные файлы не скачались. Они были проигнорированы или вместо них были использованы старые версии.
Она связана с истекшим корневым сертификатом LetsEncrypt и и все еще всплывает на некоторых серверах!
Давайте её исправим.
Как временное решение можно временно отключить проверку сертификатов в apt.
Откроем файл:
sudo mcedit /etc/apt/apt.conf.d/99-astra-linux
И добавим в конец файла строки:
Acquire::https::Verify-Peer "false";
// Do not verify that certificate name matches server name
Acquire::https::Verify-Host "false";
Теперь эта ошибка должна исчезнуть.
Добавим GPG ключи для репозитория OpenNebula.
Добавление GPG ключей для репозитория OpenNebula
Установим
sudo apt -y install debian-keyring curl
Установим ключи
wget --no-check-certificate -O- https://downloads.opennebula.io/repo/repo.key | sudo apt-key add -
Запустим
sudo apt-get update
На этот раз обновление прошло без проблем!
Установка Node.js
Для работы OpenNebula необходим Node.js! Его установку мы уже рассматривали в этой статье.
Установка пакетов OpenNebula
sudo apt-get -y install opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow opennebula-provision
Дождемся окончания установки всех пакетов
Установка пароля администратора web-интерфейса OpenNebula
Во время установки OpenNebula был создан пользователь oneadmin. Создадим для него пароль. Его мы будем использовать для входа в админ панель!
sudo -u oneadmin /bin/sh
echo "oneadmin:Pa$$w0rd" > /var/lib/one/.one/one_auth
exit
Запуск служб
Запустим сервисы OpenNebula
sudo systemctl start opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow
Проверим что все работает нормально.
Обратите внимание! Запуск всех команд для работы с OpenNebula из консоли обязательно нужно запускать с использованием sudo!
sudo oneuser show
USER 0 INFORMATION
ID : 0
NAME : oneadmin
GROUP : oneadmin
PASSWORD : 97c94ebe5d7ХХХХХХХХХХХХХХХХХХХХХХХХХ73c3c150e2faa3d14c9da6
AUTH_DRIVER : core
ENABLED : Yes
TOKENS
USER TEMPLATE
TOKEN_PASSWORD="a7a980501e1ff8f1ХХХХХХХХХХХХХХХХХХХХХХ7ef30a152ea1a59ad286ce965b"
VMS USAGE & QUOTAS
VMS USAGE & QUOTAS - RUNNING
DATASTORE USAGE & QUOTAS
NETWORK USAGE & QUOTAS
IMAGE USAGE & QUOTAS
Всё в порядке.
Доступ к панели управления OpenNebula
Откроем адрес:
http://192.168.1.240:9869/
Где 192.168.1.240 адрес нашего сервера
Откроется страница
Войдём используя логин и пароль:
oneadmin
Pa$$w0rd
Откроется страница

Вот мы и установили OpenNebula на наш сервер!
Установка узла OpenNebula
Для запуска виртуальных машин мы должны добавить хотя бы один узел (node) в кластер OpenNebula. Узлы так же называются хостами (host). Кластер автоматически создается при установке облачной платформы.
В одном кластере может быть до 1024 узлов!
Установим пакет:
apt -y install opennebula-node-kvm
На этом установка узла на локальный сервер закончена!
Добавление узла в кластер
Запустим:
sudo onehost create localhost -i kvm -v kvm
Проверим список:
sudo onehost list
ID NAME CLUSTER TVM ALLOCATED_CPU ALLOCATED_MEM STAT
0 localhost default 0 - - init
Узлу потребуется некоторое время, для инициализации.
sudo onehost list
ID NAME CLUSTER TVM ALLOCATED_CPU ALLOCATED_MEM STAT
0 localhost default 0 0 / 800 (0%) 0G / 15.7G (0%) on
Локальный хост был успешно добавлен.
Настройка сети
Для начала мы просто создадим виртуальную сеть, через которую посредством сетевого моста, виртуальные машину смогут использовать ресурсы физической локальной сети и Интернет. Мы выделим этой сети пять адресов из нашей ЛВС.
Обратите внимание, что мы используем интерфейс eth1.
Если вы укажите eth0 то этот интерфейс автоматом будет включен в сетевой мост и при запуске виртуальной машины вы потеряете соединение с сервером!
А так как сетевые мосты создаются и удаляются автоматически это приведет к непредсказуемым результатам! Поэтому, чтобы гарантировать доступ к управлению сервером, нужно использовать отдельный интерфейс для управления!
Создадим файл для шаблона сети:
cd ~
mcedit vm1.tpl
NAME = "LAN"
VN_MAD = "bridge"
BRIDGE = "br0"
BRIDGE_TYPE="linux"
PHYDEV = "eth1"
AR=[
TYPE = "IP4",
IP = "192.168.1.241",
SIZE = "5"
]
DESCRIPTION = "LAN network for VM"
Обратите внимание – OpenNebula не выдает IP адреса! Вместо этого каждой виртуальной машине присваивается свой MAC адрес, основанный на назначенном ip адресе! Поэтому вам в любом случае придется или настраивать статический ip-адрес на виртуальной машине или добавить её MAC на уже настроенный в ЛВС DHCP-сервер. Узнать назначенный виртуальной машине MAC-адрес можно в свойствах виртуальной машины.
В отдельной статье мы рассмотрим по какому принципу генерируются mac-адреса для виртуальных машин!
Создадим саму виртуальную сеть:
sudo onevnet create vm1.tpl
ID: 0
Скопируем iso-файл с образом Astra Linux на сервер в папку
/var/tmp/
Вы можете использовать любой удобный для вас способ.
Изменим права доступа и группу для файла с образом
sudo chown oneadmin orel-current.iso
sudo chgrp oneadmin orel-current.iso
Настройка общего хранилища
Так как облако будет работать на локальной машине нам нужно создать общее (shared) хранилище. В этом случае не будет использовать SSH и скорость работы с образами значительно вырастет!
Создадим системное (system) хранилище
Создадим файл настроек:
cd ~
mcedit sysstor.tpl
С содержимым:
NAME = system_shared
TM_MAD = shared
TM_MAD_SYSTEM = shared
TYPE = SYSTEM_DS
Создадим само хранилище:
onedatastore create sysstor.tpl
ID: 103
Проверим:
onedatastore list
ID NAME SIZE AVA CLUSTERS IMAGES TYPE DS TM STAT
103 system_shared 899.4G 85% 0 0 sys - shared on
2 files 899.4G 85% 0 0 fil fs ssh on
1 default 899.4G 85% 0 0 img fs ssh on
0 system - - 0 0 sys - ssh on
Создадим хранилище для образов (image)
Создадим файл настроек:
cd ~
mcedit imgstor.tpl
С содержимым:
NAME = default_shared
TM_MAD = shared
TM_MAD_SYSTEM = shared
TYPE = IMAGE_DS
DS_MAD = fs
Создадим хранилище:
onedatastore create imgstor.tpl
ID: 104
Создадим хранилище для файлов (file)
Создадим файл настроек:
cd ~
mcedit filestor.tpl
С содержимым:
NAME = file_shared
TM_MAD = shared
TM_MAD_SYSTEM = shared
TYPE = FILE_DS
DS_MAD = fs
Создадим хранилище:
onedatastore create filestor.tpl
ID: 105
Вы можете удалить хранилища, созданные при установке:
sudo onedatastore delete 0
sudo onedatastore delete 1
sudo onedatastore delete 2
Проверим:
105 file_shared 899.4G 83% 0 0 fil fs shared on
104 default_shared 899.4G 83% 0 6 img fs shared on
103 system_shared 899.4G 83% 0 0 sys - shared on
ID хранилищам назначается автоматически, так что у вас они могут быть совсем другими!
Создание виртуального образа CD-ROM
Создадим cd-rom диск для установки операционной системы из образа:
sudo oneimage create -d 104 --name "Astra Linux Orel DVD" --path /var/tmp/orel-current.iso --type CDROM
ID: 0
Проверим статус:
sudo oneimage list
ID USER GROUP NAME DATASTORE SIZE TYPE PER STAT RVMS
0 oneadmin oneadmin Astra Linux Orel DVD default 3.8G CD No lock 0
Статус lock – LOCKED означает, что образ копируется в хранилище OpenNebula подождем, пока статус не изменится на rdy:
sudo oneimage list
ID USER GROUP NAME DATASTORE SIZE TYPE PER STAT RVMS
0 oneadmin oneadmin Astra Linux Orel DVD default 3.8G CD No rdy 0
Образ скопирован, можно продолжать настройку.
Создание виртуального образа для HDD
Создадим HDD диск для самой операционной системы:
sudo oneimage create -d 104 --name "Astra HDD 1" --type DATABLOCK --size 25G --persistent --format qcow2
ID: 1
Проверим статус:
sudo oneimage list
ID USER GROUP NAME DATASTORE SIZE TYPE PER STAT RVMS
1 oneadmin oneadmin Astra HDD 1 default 45G DB Yes rdy 0
0 oneadmin oneadmin Astra Linux Orel DVD default 3.8G CD No rdy 0
Все образы созданы и готовы к использованию.
Проверка кластера перед использованием
Перед созданием проверим, что наш кластер готов к развертыванию виртуальной машины:
sudo onecluster show 0
CLUSTER 0 INFORMATION
ID : 0
NAME : default
CLUSTER RESOURCES
TOTAL CPUs: 8
OCCUPIED CPUs: 0
AVAILABLE CPUs: 8
TOTAL RAM: 15
OCCUPIED RAM: 0
AVAILABLE RAM: 15
CLUSTER TEMPLATE
RESERVED_CPU=""
RESERVED_MEM=""
HOSTS
2
VNETS
1
DATASTORES
0
1
2
В разделах HOSTS, VNETS не должно стоять значений 0!
В OpenNebula у нас есть возможность использовать текстовый файл, для описания всех свойств виртуальной машины.
Создадим файл:
cd ~
mcedit astra.tpl
NAME = "Astra Linux Orel"
CONTEXT = [
NETWORK = "YES",
SSH_PUBLIC_KEY = "$USER[SSH_PUBLIC_KEY]" ]
CPU = "0.25"
DISK = [
IMAGE = "Astra Linux Orel DVD",
IMAGE_UNAME = "oneadmin" ]
DISK = [
DEV_PREFIX = "vd",
IMAGE = "Astra HDD 1",
IMAGE_UNAME = "oneadmin" ]
GRAPHICS = [
LISTEN = "0.0.0.0",
TYPE = "VNC" ]
HYPERVISOR = "kvm"
INPUTS_ORDER = ""
LOGO = "images/logos/linux.png"
MEMORY = "1024"
MEMORY_UNIT_COST = "MB"
NIC = [
NETWORK = "LAN",
NETWORK_UNAME = "oneadmin",
SECURITY_GROUPS = "0" ]
NIC_DEFAULT = [
MODEL = "virtio" ]
OS = [
BOOT = "disk1,disk0" ]
Создадим виртуальную машину:
sudo onevm create astra.tpl
ID: 0
Так как мы используем файловую систему, то виртуальная машина стать доступна для доступа очень быстро!
Проверим статус:
sudo onevm list
ID USER GROUP NAME STAT CPU MEM HOST TIME
7 oneadmin oneadmin Astra Linux Orel-7 runn 0.25 1024M mer-vm-server1 0d 00h19
Виртуальная машина запущена и готова к работе!
Определение MAC-адреса виртуальной машины
Прежде чем мы продолжим нам нужно узнать MAC-адрес виртуального сервера, для этого запустим:
sudo onevm show 7 | grep LAN
0 LAN br0 192.168.1.241 02:00:c0:a8:01:f1
0 LAN 0
ETH0_VLAN_ID="",
MAC адрес нашей виртуальной машины 02:00:c0:a8:01:f1
Теперь просто настройте свой локальный DHCP-сервер для выделения ip-адреса нашей виртуальной машине.
Доступ к виртуальной машине через VNC
Так как мы использовали вариант вывода графики VNC мы сможем подключиться с помощью VNC клиента, использование VNC через браузер может не работать! Поэтому лучше использовать VNC-клиент.
Я использую TightVNC - https://www.tightvnc.com/ вы можете использовать любой другой VNC-клиент.
При установке TightVNC выберите пользовательскую установку и установите только Viewer
Прежде чем продолжить, нам нужно узнать порт VNC для соединения с виртуальной машиной. Каждая виртуальная машина использует уникальный TCP порт для VNC.
Запустим
sudo onevm show 7 | grep PORT
PORT="5903",
Запустим TightVNC Viewer и укажем ip адрес сервера OpenNebula и порт:
192.168.1.240:5903
Нажмем Connect
Откроется окно с нашей виртуальной машиной.
В моем случае операционная система уже установлена. Вы можете видеть приглашение к установке ОС и рабочий стол.

После установки операционной системы проверим наличие связи, если вы правильно указали mac-адрес в настройках вашего DHCP-сервера виртуальная машина должна получить ip-адрес!
Включение автозапуска служб
Когда у нас всё настроено включим автозапуск всех сервисов:
sudo systemctl enable opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow
Так как мы не будем настраивать публичное облако, то нам нужно закомментировать строку в файле конфигурации, чтобы избавиться от надоедливого сообщения:
Откроем файл
/etc/one/sunstone-server.conf
Изменим строку:
:public_fireedge_endpoint: http://localhost:2616
Добавив # в начало строки
#:public_fireedge_endpoint: http://localhost:2616
Запустим:
sudo systemctl restart opennebula-sunstone
Заключение
Сегодня мы рассмотрели настройку сервера облачной виртуализации OpenNebula.
Настроили на сервере сеть.
Настроили репозитории apt и установили требуемые пакеты.
Задали пароль администратора.
Запустили службы и проверили доступность панели администратора.
Установили узел (node) на этот же сервер.
Добавили узел в кластер.
Настроили и добавили виртуальную сеть.
Создали виртуальный cd-rom с образом Astra Linux Orel и HDD для виртуальной машины
Создали шаблон для виртуальной машины и развернули его в кластере.
Подключились к виртуальной машине используя VNC-клиент и проверили наличие сети на виртуальной машине.
В следующей статье мы рассмотрим установку Windows Server на виртуальную машину.