Содержание

Собственная облачная платформа на базе OpenNebula (single node installation)

Условия установки:

  • Ubuntu Live Server 20.04.5 LTS
  • OpenNebula 6.4.0

Перед началом установки обновляем версию ядра системы и устанавливаем необходимый набор дополнительного ПО:

1
2
apt-get update
apt-get -y install linux-image-5.15.0-46-generic linux-headers-5.15.0-46-generic linux-modules-extra-5.15.0-46-generic libblockdev-mdraid2 zsys zfsutils-linux gnupg wget apt-transport-https

1 Установка OpenNebula

Добавляем репозиторий OpenNebula в пакетный менеджер Apt:

1
2
3
wget -qO- https://downloads.opennebula.io/repo/repo.key | sudo tee /etc/apt/trusted.gpg.d/opennebula.asc > /dev/null
echo "deb https://downloads.opennebula.io/repo/6.4/Ubuntu/20.04 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
apt-get update

Устанавливаем основные пакеты OpenNebula:

1
2
apt-get update
apt-get -y install opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow opennebula-provision

Для того чтобы задать пароль администратора запускаем консоль от имени пользователя oneadmin:

1
sudo -u oneadmin /bin/sh

И записываем его в файл /var/lib/one/.one/one_auth с помощью следующей комманды:

1
echo 'oneadmin:changeme123' > /var/lib/one/.one/one_auth

Далее выполняем минимальный набор настроек

1.1 FireEdge

Изменить доменное имя хоста в файле /etc/one/sunstone-server.conf, поле :public_fireedge_endpoint:. Например:

1
:public_fireedge_endpoint: http://one.example.com:2616

1.2 OneGate (опционально)

  1. В файле /etc/one/onegate-server.conf можно изменить значение поля :host:. Например, так:
1
:host: 0.0.0.0
  1. В файле /etc/one/oned.conf
1
ONEGATE_ENDPOINT="http://one.example.com:5030"

1.3 OneFlow (опционально)

В файле /etc/one/oneflow-server.conf можно изменить значение поля :host:. Например:

1
:host: 0.0.0.0

1.4 Запуск сервисов

Запуск:

1
systemctl start opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow

Для автоматического запуска при загрузке:

1
systemctl enable opennebula opennebula-sunstone opennebula-fireedge opennebula-gate opennebula-flow

1.5 Проверка установки

После первого запуска OpenNebula вы можете выполнить следующую комманду для проверки соединения с OpenNebula демоном. Вы можете сделать это в консоли или с помощью графического интерфейса.

1.6 Проверка в консоли Linux

Для этого на хосте где установлен фронтенд выполните комманду от имени пользователя oneadmin (хотя от root-а тоже работает):

1
sudo -u oneadmin oneuser show

Результат вывода должен быть примерно таким:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
USER 0 INFORMATION                                                              
ID              : 0                   
NAME            : oneadmin               
GROUP           : oneadmin            
PASSWORD        : 9b1ef6a55032e0e08be83ab40f08a56545e0081e8d2bd40b9d654b5e329f8aa1
AUTH_DRIVER     : core                
ENABLED         : Yes                 

TOKENS                                                                          

USER TEMPLATE                                                                   
TOKEN_PASSWORD="c5fe450f51b67049826a5a9dbfc9521d60fdda8bc6ec962fbb472d6e238829ce"

VMS USAGE & QUOTAS                                                              

VMS USAGE & QUOTAS - RUNNING                                                    

DATASTORE USAGE & QUOTAS                                                        

NETWORK USAGE & QUOTAS                                                          

IMAGE USAGE & QUOTAS

Если вы получили сообщение о ошибке - значит OpenNebula-демон запустился не корректно:

1
Failed to open TCP connection to localhost:2633 (Connection refused - connect(2) for "localhost" port 2633)

1.7 Sunstone (графический интерфейс)

Теперь вы можете авторизоваться в Sunstone GUI. Чтобы это сделать, перейдите в браузере по адресу http://<frontend_address>:9869. Вы должны увидеть форму авторизации. Для авторизации используйте данные указанные в файле /var/lib/one/.one/one_auth создаваемом ранее

2 Настройка кластера

Источник

В рамках данной инструкции подразумевается что мы будем работать только с KVM виртуальными машинами.

Установка KVM-ноды OpenNebula

1
2
3
apt-get update
apt-get -y install opennebula-node-kvm
systemctl restart libvirtd

Добавляем в конфигурацию AppArmor /etc/apparmor.d/abstractions/libvirt-qemu следующую строку:

1
/var/lib/one/datastores/** rwk,

Теперь необходимо поготовить сеть хоста и настроить соответствующим образом сеть KVM:

Модифицируем файл /etc/netplan/00-installer-config.yaml примерно до следующего состояние (имя физческого адаптера может отличаться):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
network:
  ethernets:
    enp5s0:
      dhcp4: no
      dhcp6: no
  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      addresses:
      - 192.168.0.2/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 192.168.0.1
        search:
        - lan
      interfaces:
      - enp5s0

применяем конфигурацию сети:

1
netplan try

Удаляем дефолтную сеть qemu:

1
2
virsh net-destroy default
virsh net-undefine default

Создаем файл настроек сети host-bridge.xml для работы KVM через bridge-интерфейс хоста:

1
2
3
4
5
6
7
cat > host-bridge.xml <<EOF
<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>
EOF

Применяем:

1
2
3
virsh net-define host-bridge.xml
virsh net-start host-bridge
virsh net-autostart host-bridge
Источник

Теперь можно создать виртуальную сеть использующую данный интерфейс через GUI, либо через консоль:

Создаем файл bridge-network.tmpl:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cat > bridge-network.tmpl <<EOF
NAME            = "static_pool"
VN_MAD          = "bridge"
BRIDGE          = "br0"
BRIDGE_TYPE     = "linux"
AR              = [
    TYPE = "IP4",
    IP   = "192.168.10.10",
    SIZE = "91"
]
DNS             = "192.168.0.1"
GATEWAY         = "192.168.10.1"
METHOD          = "static"
NETWORK_MASK    = "255.255.255.0"
DESCRIPTION = "A bridged network for VM communication with outer world"
EOF

И применяем его:

1
onevnet create bridge-network.tmpl

Добавляем хуки для автоматического перезапуска виртульных машин при перезагрузке хоста:

Создать файл autostart-host.tmpl:

1
2
3
4
5
6
7
8
9
cat > autostart-host.tmpl <<EOF
NAME            = autostart-host
TYPE            = state
COMMAND         = autostart/host
ARGUMENTS       = \$TEMPLATE
ARGUMENTS_STDIN = yes
RESOURCE        = HOST
STATE           = MONITORED
EOF

Создать файл autostart-vm.tmpl:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
cat > autostart-vm.tmpl <<EOF
NAME            = autostart-vm
TYPE            = state
COMMAND         = autostart/vm
ARGUMENTS       = \$TEMPLATE
ARGUMENTS_STDIN = yes
RESOURCE        = VM
STATE           = POWEROFF
LCM_STATE       = LCM_INIT
ON              = CUSTOM
EOF
1
2
onehook create autostart-host.tmpl
onehook create autostart-vm.tmpl

Чтобы созданные ранее хуки начали работать необходимо для виртуальной машины и хоста добавить аттрибут AUTOSTART=true

3 Создание собственного шаблона виртуальной машины

Источник

Принцип создания собственного образа заключается в создании следующих сущностей:

  • создание образа диска CD-ROM
  • создание образа системного диска
  • создание шаблона виртуальной машины

Создаем образ CD-ROM диска:

1
oneimage create --name arch-install --path https://mirror.yandex.ru/archlinux/iso/2022.08.05/archlinux-2022.08.05-x86_64.iso --type CDROM --datastore default

Создаем системный диск:

1
oneimage create --name arch --description "Base Arch Linux Installation" --type DATABLOCK --persistent --prefix vd --driver qcow2 --size 10240 --datastore default

Создаем шаблон ВМ:

1
onetemplate create --name arch-cli --cpu 1 --memory 1G --disk arch,arch-install --nic network --boot disk0,disk1 --vnc --raw "INPUT=[TYPE=tablet,BUS=usb]"

После чего мы можем создать из полученного шаблона виртуальную машину, произвести установку и последним штрихом будет удаление пакетов (если установлены) cloud-init, NetworkManager и установке пакета one-context соответствующего устанавливаемой операционной системе. Нужный пакет можно найти здесь https://github.com/OpenNebula/addon-context-linux/releases/. Так же для того чтобы работал мониторинг ресурсов ВМ, следует установить пакет qemu-guest-agent.

Удаляем cloud-init:

1
pacman -R cloud-init

Устанавливаем one-context:

1
2
pacman -Syu
pacman -S one-context qemu-gusest-agent

Так же если в системе настроен вывод через COM-порт (serial console), то эту опцию так же следует отключить в параметрах загрузчика GRUB.