diff --git a/README-ru.md b/README-ru.md index 7f790008..c95fa9b9 100644 --- a/README-ru.md +++ b/README-ru.md @@ -42,6 +42,7 @@ Vitastor поддерживает QEMU-драйвер, протоколы NBD и - Установка - [Пакеты](docs/installation/packages.ru.md) - [Proxmox](docs/installation/proxmox.ru.md) + - [OpenNebula](docs/installation/opennebula.ru.md) - [OpenStack](docs/installation/openstack.ru.md) - [Kubernetes CSI](docs/installation/kubernetes.ru.md) - [Сборка из исходных кодов](docs/installation/source.ru.md) diff --git a/README.md b/README.md index 4b3cba2c..7a32d0f3 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Read more details below in the documentation. - Installation - [Packages](docs/installation/packages.en.md) - [Proxmox](docs/installation/proxmox.en.md) + - [OpenNebula](docs/installation/opennebula.en.md) - [OpenStack](docs/installation/openstack.en.md) - [Kubernetes CSI](docs/installation/kubernetes.en.md) - [Building from Source](docs/installation/source.en.md) diff --git a/docs/installation/opennebula.en.md b/docs/installation/opennebula.en.md new file mode 100644 index 00000000..e256bd79 --- /dev/null +++ b/docs/installation/opennebula.en.md @@ -0,0 +1,176 @@ +[Documentation](../../README.md#documentation) → Installation → OpenNebula + +----- + +[Читать на русском](opennebula.ru.md) + +## Automatic Installation + +OpenNebula plugin is packaged as `opennebula-vitastor` Debian and RPM package since Vitastor 1.9.0. So: + +- Run `apt-get install opennebula-vitastor` or `yum install vitastor` after installing OpenNebula on all nodes +- Check that it prints "OK, Vitastor OpenNebula patches successfully applied" or "OK, Vitastor OpenNebula patches are already applied" +- If it does not, refer to [Manual Installation](#manual-installation) and apply configuration file changes manually +- [Block VM access to Vitastor cluster](#block-vm-access-to-vitastor-cluster) + +## Manual Installation + +Install OpenNebula. Then, on each node: + +- Copy [opennebula/remotes](../../opennebula/remotes) into `/var/lib/one` recursively: `cp -r opennebula/remotes /var/lib/one/` +- Copy [opennebula/sudoers.d](../../opennebula/sudoers.d) to `/etc`: `cp -r opennebula/sudoers.d /etc/` +- Apply [downloader-vitastor.sh.diff](../../opennebula/remotes/datastore/vitastor/downloader-vitastor.sh.diff) to `/var/lib/one/remotes/datastore/downloader.sh`: + `patch /var/lib/one/remotes/datastore/downloader.sh < opennebula/remotes/datastore/vitastor/downloader-vitastor.sh.diff` - or read the patch and apply the same change manually +- Add `kvm-vitastor` to `LIVE_DISK_SNAPSHOTS` in `/etc/one/vmm_exec/vmm_execrc` +- If on Debian or Ubuntu (and AppArmor is used), add Vitastor config file path(s) to `/etc/apparmor.d/local/abstractions/libvirt-qemu`: for example, + `echo ' "/etc/vitastor/vitastor.conf" r,' >> /etc/apparmor.d/local/abstractions/libvirt-qemu` +- Apply changes to `/etc/one/oned.conf` + +### oned.conf changes + +1. Add deploy script override in kvm VM_MAD: add `-l deploy.vitastor` to ARGUMENTS: + +```diff + VM_MAD = [ + NAME = "kvm", + SUNSTONE_NAME = "KVM", + EXECUTABLE = "one_vmm_exec", +- ARGUMENTS = "-t 15 -r 0 kvm -p", ++ ARGUMENTS = "-t 15 -r 0 kvm -p -l deploy=deploy.vitastor", + DEFAULT = "vmm_exec/vmm_exec_kvm.conf", + TYPE = "kvm", + KEEP_SNAPSHOTS = "yes", + LIVE_RESIZE = "yes", + SUPPORT_SHAREABLE = "yes", + IMPORTED_VMS_ACTIONS = "terminate, terminate-hard, hold, release, suspend, + resume, delete, reboot, reboot-hard, resched, unresched, disk-attach, + disk-detach, nic-attach, nic-detach, snapshot-create, snapshot-delete, + resize, updateconf, update" + ] +``` + +2. Add `vitastor` to TM_MAD.ARGUMENTS and DATASTORE_MAD.ARGUMENTS: + +```diff + TM_MAD = [ + EXECUTABLE = "one_tm", +- ARGUMENTS = "-t 15 -d dummy,lvm,shared,fs_lvm,fs_lvm_ssh,qcow2,ssh,ceph,dev,vcenter,iscsi_libvirt" ++ ARGUMENTS = "-t 15 -d dummy,lvm,shared,fs_lvm,fs_lvm_ssh,qcow2,ssh,ceph,vitastor,dev,vcenter,iscsi_libvirt" + ] + + DATASTORE_MAD = [ + EXECUTABLE = "one_datastore", +- ARGUMENTS = "-t 15 -d dummy,fs,lvm,ceph,dev,iscsi_libvirt,vcenter,restic,rsync -s shared,ssh,ceph,fs_lvm,fs_lvm_ssh,qcow2,vcenter" ++ ARGUMENTS = "-t 15 -d dummy,fs,lvm,ceph,vitastor,dev,iscsi_libvirt,vcenter,restic,rsync -s shared,ssh,ceph,vitastor,fs_lvm,fs_lvm_ssh,qcow2,vcenter" + ] +``` + +3. Add INHERIT_DATASTORE_ATTR for two Vitastor attributes: + +``` +INHERIT_DATASTORE_ATTR = "VITASTOR_CONF" +INHERIT_DATASTORE_ATTR = "IMAGE_PREFIX" +``` + +4. Add TM_MAD_CONF and DS_MAD_CONF for Vitastor: + +``` +TM_MAD_CONF = [ + NAME = "vitastor", LN_TARGET = "NONE", CLONE_TARGET = "SELF", SHARED = "YES", + DS_MIGRATE = "NO", DRIVER = "raw", ALLOW_ORPHANS="format", + TM_MAD_SYSTEM = "ssh,shared", LN_TARGET_SSH = "SYSTEM", CLONE_TARGET_SSH = "SYSTEM", + DISK_TYPE_SSH = "FILE", LN_TARGET_SHARED = "NONE", + CLONE_TARGET_SHARED = "SELF", DISK_TYPE_SHARED = "FILE" +] + +DS_MAD_CONF = [ + NAME = "vitastor", + REQUIRED_ATTRS = "DISK_TYPE,BRIDGE_LIST", + PERSISTENT_ONLY = "NO", + MARKETPLACE_ACTIONS = "export" +] +``` + +## Create Datastores + +Example Image and System Datastore definitions: +[opennebula/vitastor-imageds.conf](../../opennebula/vitastor-imageds.conf) and +[opennebula/vitastor-systemds.conf](../../opennebula/vitastor-systemds.conf). + +Change parameters to your will: + +- POOL_NAME is Vitastor pool name to store images. +- IMAGE_PREFIX is a string prepended to all Vitastor image names. +- BRIDGE_LIST is a list of hosts with access to Vitastor cluster, mostly used for image (not system) datastore operations. +- VITASTOR_CONF is the path to cluster configuration. Note that it should be also added to `/etc/apparmor.d/local/abstractions/libvirt-qemu` if you use AppArmor. +- STAGING_DIR is a temporary directory used when importing external images. Should have free space sufficient for downloading external images. + +Then create datastores using `onedatastore create vitastor-imageds.conf` and `onedatastore create vitastor-systemds.conf` (or use UI). + +## Block VM access to Vitastor cluster + +Vitastor doesn't support any authentication yet, so you MUST block VM guest access to the Vitastor cluster at the network level. + +If you use VLAN networking for VMs - make sure you use different VLANs for VMs and hypervisor/storage network and +block access between them using your firewall/switch configuration. + +If you use something more stupid like bridged networking, you probably have to use manual firewall/iptables setup +to only allow access to Vitastor from hypervisor IPs. + +Also you need to switch network to "Bridged & Security Groups" and enable IP spoofing filters in OpenNebula. +Problem is that OpenNebula's IP spoofing filter doesn't affect local interfaces of the hypervisor i.e. when +it's enabled a VM can't talk to other VMs or to the outer world using a spoofed IP, but it CAN talk to the +hypervisor if it takes an IP from its subnet. To fix that you also need some more iptables. + +So the complete "stupid" bridged network filter setup could look like the following +(here `10.0.3.0/24` is the VM subnet and `10.0.2.0/24` is the hypervisor subnet): + +``` +# Allow incoming traffic from physical device +iptables -A INPUT -m physdev --physdev-in eth0 -j ACCEPT +# Do not allow incoming traffic from VMs, but not from VM subnet +iptables -A INPUT ! -s 10.0.3.0/24 -i onebr0 -j DROP +# Drop traffic from VMs to hypervisor/storage subnet +iptables -I FORWARD 1 -s 10.0.3.0/24 -d 10.0.2.0/24 -j DROP +``` + +## Testing + +The OpenNebula plugin includes quite a bit of bash scripts, so here's their description to get an idea about what they actually do. + +| Script | Action | How to Test | +| ----------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------ | +| vmm/kvm/deploy.vitastor | Start a VM | Create and start a VM with Vitastor disk(s): persistent / non-persistent / volatile. | +| datastore/clone | Copy an image as persistent | Create a VM template and instantiate it as persistent. | +| datastore/cp | Import an external image | Import a VM template with images from Marketplace. | +| datastore/export | Export an image as URL | Probably: export a VM template with images to Marketplace. | +| datastore/mkfs | Create an image with FS | Storage → Images → Create → Type: Datablock, Location: Empty disk image, Filesystem: Not empty. | +| datastore/monitor | Monitor used space in image datastore | Check reported used/free space in image datastore list. | +| datastore/rm | Remove a persistent image | Storage → Images → Select an image → Delete. | +| datastore/snap_delete | Delete a snapshot of a persistent image | Storage → Images → Select an image → Select a snapshot → Delete;
To create an image with snapshot: attach a persistent image to a VM; create a snapshot; detach the image. | +| datastore/snap_flatten | Revert an image to snapshot and delete other snapshots | Storage → Images → Select an image → Select a snapshot → Flatten. | +| datastore/snap_revert | Revert an image to snapshot | Storage → Images → Select an image → Select a snapshot → Revert. | +| datastore/stat | Get virtual size of an image in MB | No idea. Seems to be unused both in Vitastor and Ceph datastores. | +| tm/clone | Clone a non-persistent image to a VM disk | Attach a non-persistent image to a VM. | +| tm/context | Generate a contextualisation VM disk | Create a VM with enabled contextualisation (default). Common host FS-based version is used in Vitastor and Ceph datastores. | +| tm/cpds | Copy a VM disk / its snapshot to an image | Select a VM → Select a disk → Optionally select a snapshot → Save as. | +| tm/delete | Delete a cloned or volatile VM disk | Detach a volatile disk or a non-persistent image from a VM. | +| tm/failmigrate | Handle live migration failure | No action. Script is empty in Vitastor and Ceph. In other datastores, should roll back actions done by tm/premigrate. | +| tm/ln | Attach a persistent image to a VM | No action. Script is empty in Vitastor and Ceph. | +| tm/mkimage | Create a volatile disk, maybe with FS | Attach a volatile disk to a VM, with or without file system. | +| tm/mkswap | Create a volatile swap disk | Attach a volatile disk to a VM, formatted as swap. | +| tm/monitor | Monitor used space in system datastore | Check reported used/free space in system datastore list. | +| tm/mv | Move a migrated VM disk between hosts | Migrate a VM between hosts. In Vitastor and Ceph datastores, doesn't do any storage action. | +| tm/mvds | Detach a persistent image from a VM | No action. The opposite of tm/ln. Script is empty in Vitastor and Ceph. In other datastores, script may copy the image from VM host back to the datastore. | +| tm/postbackup | Executed after backup | Seems that the script just removes temporary files after backup. Perform a VM backup and check that temporary files are cleaned up. | +| tm/postbackup_live | Executed after backup of a running VM | Same as tm/postbackup, but for a running VM. | +| tm/postmigrate | Executed after VM live migration | No action. Only executed for system datastore, so the script tries to call other TMs for other disks. Except that, the script does nothing in Vitastor and Ceph datastores. | +| tm/prebackup | Actual backup script: backup VM disks | Set up "rsync" backup datastore → Backup a VM to it. | +| tm/prebackup_live | Backup VM disks of a running VM | Same as tm/prebackup, but also does fsfreeze/thaw. So perform a live backup, restore it and check that disks are consistent. | +| tm/premigrate | Executed before live migration | No action. Only executed for system datastore, so the script tries to call other TMs for other disks. Except that, the script does nothing in Vitastor and Ceph datastores. | +| tm/resize | Resize a VM disk | Select a VM → Select a non-persistent disk → Resize. | +| tm/restore | Restore VM disks from backup | Set up "rsync" backup datastore → Backup a VM to it → Restore it back. | +| tm/snap_create | Create a VM disk snapshot | Select a VM → Select a disk → Create snapshot. | +| tm/snap_create_live | Create a VM disk snapshot for a live VM | Select a running VM → Select a disk → Create snapshot. | +| tm/snap_delete | Delete a VM disk snapshot | Select a VM → Select a disk → Select a snapshot → Delete. | +| tm/snap_revert | Revert a VM disk to a snapshot | Select a VM → Select a disk → Select a snapshot → Revert. | diff --git a/docs/installation/opennebula.ru.md b/docs/installation/opennebula.ru.md new file mode 100644 index 00000000..225d85a8 --- /dev/null +++ b/docs/installation/opennebula.ru.md @@ -0,0 +1,179 @@ +[Документация](../../README-ru.md#документация) → Установка → OpenNebula + +----- + +[Read in English](opennebula.en.md) + +## Автоматическая установка + +Плагин OpenNebula Vitastor распространяется как Debian и RPM пакет `opennebula-vitastor`, начиная с версии Vitastor 1.9.0. Так что: + +- Запустите `apt-get install opennebula-vitastor` или `yum install vitastor` после установки OpenNebula на всех серверах +- Проверьте, что он выводит "OK, Vitastor OpenNebula patches successfully applied" или "OK, Vitastor OpenNebula patches are already applied" в процессе установки +- Если сообщение не выведено, пройдите по шагам инструкцию [Ручная установка](#ручная-установка) и примените правки файлов конфигурации вручную +- [Заблокируйте доступ виртуальных машин в Vitastor](#блокировка-доступа-вм-в-vitastor) + +## Ручная установка + +Сначала установите саму OpenNebula. После этого, на каждом сервере: + +- Скопируйте директорию [opennebula/remotes](../../opennebula/remotes) в `/var/lib/one`: `cp -r opennebula/remotes /var/lib/one/` +- Скопируйте директорию [opennebula/sudoers.d](../../opennebula/sudoers.d) в `/etc`: `cp -r opennebula/sudoers.d /etc/` +- Примените патч [downloader-vitastor.sh.diff](../../opennebula/remotes/datastore/vitastor/downloader-vitastor.sh.diff) к `/var/lib/one/remotes/datastore/downloader.sh`: + `patch /var/lib/one/remotes/datastore/downloader.sh < opennebula/remotes/datastore/vitastor/downloader-vitastor.sh.diff` - либо прочитайте патч и примените изменение вручную +- Добавьте `kvm-vitastor` в список `LIVE_DISK_SNAPSHOTS` в файле `/etc/one/vmm_exec/vmm_execrc` +- Если вы используете Debian или Ubuntu (и AppArmor), добавьте пути к файлу(ам) конфигурации Vitastor в файл `/etc/apparmor.d/local/abstractions/libvirt-qemu`: например, + `echo ' "/etc/vitastor/vitastor.conf" r,' >> /etc/apparmor.d/local/abstractions/libvirt-qemu` +- Примените изменения `/etc/one/oned.conf` + +### Изменения oned.conf + +1. Добавьте переопределение скрипта deploy в VM_MAD kvm, добавив `-l deploy.vitastor` в `ARGUMENTS`: + +```diff + VM_MAD = [ + NAME = "kvm", + SUNSTONE_NAME = "KVM", + EXECUTABLE = "one_vmm_exec", +- ARGUMENTS = "-t 15 -r 0 kvm -p", ++ ARGUMENTS = "-t 15 -r 0 kvm -p -l deploy=deploy.vitastor", + DEFAULT = "vmm_exec/vmm_exec_kvm.conf", + TYPE = "kvm", + KEEP_SNAPSHOTS = "yes", + LIVE_RESIZE = "yes", + SUPPORT_SHAREABLE = "yes", + IMPORTED_VMS_ACTIONS = "terminate, terminate-hard, hold, release, suspend, + resume, delete, reboot, reboot-hard, resched, unresched, disk-attach, + disk-detach, nic-attach, nic-detach, snapshot-create, snapshot-delete, + resize, updateconf, update" + ] +``` + +2. Добавьте `vitastor` в значения TM_MAD.ARGUMENTS и DATASTORE_MAD.ARGUMENTS: + +```diff + TM_MAD = [ + EXECUTABLE = "one_tm", +- ARGUMENTS = "-t 15 -d dummy,lvm,shared,fs_lvm,fs_lvm_ssh,qcow2,ssh,ceph,dev,vcenter,iscsi_libvirt" ++ ARGUMENTS = "-t 15 -d dummy,lvm,shared,fs_lvm,fs_lvm_ssh,qcow2,ssh,ceph,vitastor,dev,vcenter,iscsi_libvirt" + ] + + DATASTORE_MAD = [ + EXECUTABLE = "one_datastore", +- ARGUMENTS = "-t 15 -d dummy,fs,lvm,ceph,dev,iscsi_libvirt,vcenter,restic,rsync -s shared,ssh,ceph,fs_lvm,fs_lvm_ssh,qcow2,vcenter" ++ ARGUMENTS = "-t 15 -d dummy,fs,lvm,ceph,vitastor,dev,iscsi_libvirt,vcenter,restic,rsync -s shared,ssh,ceph,vitastor,fs_lvm,fs_lvm_ssh,qcow2,vcenter" + ] +``` + +3. Добавьте строчки с INHERIT_DATASTORE_ATTR для двух атрибутов Vitastor-хранилищ: + +``` +INHERIT_DATASTORE_ATTR = "VITASTOR_CONF" +INHERIT_DATASTORE_ATTR = "IMAGE_PREFIX" +``` + +4. Добавьте TM_MAD_CONF и DS_MAD_CONF для Vitastor: + +``` +TM_MAD_CONF = [ + NAME = "vitastor", LN_TARGET = "NONE", CLONE_TARGET = "SELF", SHARED = "YES", + DS_MIGRATE = "NO", DRIVER = "raw", ALLOW_ORPHANS="format", + TM_MAD_SYSTEM = "ssh,shared", LN_TARGET_SSH = "SYSTEM", CLONE_TARGET_SSH = "SYSTEM", + DISK_TYPE_SSH = "FILE", LN_TARGET_SHARED = "NONE", + CLONE_TARGET_SHARED = "SELF", DISK_TYPE_SHARED = "FILE" +] + +DS_MAD_CONF = [ + NAME = "vitastor", + REQUIRED_ATTRS = "DISK_TYPE,BRIDGE_LIST", + PERSISTENT_ONLY = "NO", + MARKETPLACE_ACTIONS = "export" +] +``` + +## Создайте хранилища + +Примеры настроек хранилищ образов (image) и дисков ВМ (system): +[opennebula/vitastor-imageds.conf](../../opennebula/vitastor-imageds.conf) и +[opennebula/vitastor-systemds.conf](../../opennebula/vitastor-systemds.conf). + +Скопируйте настройки и поменяйте следующие параметры так, как вам необходимо: + +- POOL_NAME - имя пула Vitastor для сохранения образов дисков. +- IMAGE_PREFIX - строка, добавляемая в начало имён образов дисков. +- BRIDGE_LIST - список серверов с доступом к кластеру Vitastor, используемых для операций с хранилищем образов (image, не system). +- VITASTOR_CONF - путь к конфигурации Vitastor. Имейте в виду, что этот путь также надо добавить в `/etc/apparmor.d/local/abstractions/libvirt-qemu`, если вы используете AppArmor. +- STAGING_DIR - путь к временному каталогу, используемому при импорте внешних образов. Должен иметь достаточно свободного места, чтобы вмещать скачанные образы. + +После этого создайте хранилища с помощью команд `onedatastore create vitastor-imageds.conf` и `onedatastore create vitastor-systemds.conf` (либо через UI). + +## Блокировка доступа ВМ в Vitastor + +Vitastor пока не поддерживает никакую аутентификацию, так что вы ДОЛЖНЫ заблокировать доступ гостевых ВМ +в кластер Vitastor на сетевом уровне. + +Если вы используете VLAN-сети для ВМ - удостоверьтесь, что ВМ и гипервизор/сеть хранения помещены в разные +изолированные друг от друга VLAN-ы. + +Если вы используете что-то более примитивное, например, мосты (bridge), вам, скорее всего, придётся вручную +настроить iptables / межсетевой экран, чтобы разрешить доступ к Vitastor только с IP гипервизоров. + +Также в этом случае нужно будет переключить обычные мосты на "Bridged & Security Groups" и включить фильтр +спуфинга IP в OpenNebula. Правда, реализация этого фильтра пока не полная, и она не блокирует доступ к +локальным интерфейсам гипервизора. То есть, включённый фильтр спуфинга IP запрещает ВМ отправлять трафик +с чужими IP к другим ВМ или во внешний мир, но не запрещает отправлять его напрямую гипервизору. Чтобы +исправить это, тоже нужны дополнительные правила iptables. + +Таким образом, более-менее полная блокировка при использовании простой сети на сетевых мостах может +выглядеть так (здесь `10.0.3.0/24` - подсеть ВМ, `10.0.2.0/24` - подсеть гипервизора): + +``` +# Разрешаем входящий трафик с физического устройства +iptables -A INPUT -m physdev --physdev-in eth0 -j ACCEPT +# Запрещаем трафик со всех ВМ, но с IP не из подсети ВМ +iptables -A INPUT ! -s 10.0.3.0/24 -i onebr0 -j DROP +# Запрещаем трафик от ВМ к сети гипервизора +iptables -I FORWARD 1 -s 10.0.3.0/24 -d 10.0.2.0/24 -j DROP +``` + +## Тестирование + +Плагин OpenNebula по большей части состоит из bash-скриптов, и чтобы было понятнее, что они +вообще делают - ниже приведены описания процедур, которыми можно протестировать каждый из них. + +| Скрипт | Описание | Как протестировать | +| ----------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------ | +| vmm/kvm/deploy.vitastor | Запустить виртуальную машину | Создайте и запустите виртуальную машину с дисками Vitastor: постоянным / непостоянным / волатильным (временным). | +| datastore/clone | Скопировать образ как "постоянный" | Создайте шаблон ВМ и создайте из него постоянную ВМ. | +| datastore/cp | Импортировать внешний образ | Импортируйте шаблон ВМ с образами дисков из Магазина OpenNebula. | +| datastore/export | Экспортировать образ как URL | Вероятно: экспортируйте шаблон ВМ с образами в Магазин. | +| datastore/mkfs | Создать образ с файловой системой | Хранилище → Образы → Создать → Тип: базовый блок данных, Расположение: пустой образ диска, Файловая система: любая непустая. | +| datastore/monitor | Вывод статистики места в хранилище образов | Проверьте статистику свободного/занятого места в списке хранилищ образов. | +| datastore/rm | Удалить "постоянный" образ | Хранилище → Образы → Выберите образ → Удалить. | +| datastore/snap_delete | Удалить снимок "постоянного" образа | Хранилище → Образы → Выберите образ → Выберите снимок → Удалить;
Чтобы создать образ со снимком: подключите постоянный образ к ВМ, создайте снимок, отключите образ. | +| datastore/snap_flatten | Откатить образ к снимку, удалив другие снимки | Хранилище → Образы → Выберите образ → Выберите снимок → "Выровнять" (flatten). | +| datastore/snap_revert | Откатить образ к снимку | Хранилище → Образы → Выберите образ → Выберите снимок → Откатить. | +| datastore/stat | Показать виртуальный размер образа в МБ | Неизвестно. По-видимому, в плагинах Vitastor и Ceph не используется. | +| tm/clone | Клонировать "непостоянный" образ в диск ВМ | Подключите "непостоянный" образ к ВМ. | +| tm/context | Создать диск контекстуализации ВМ | Создайте ВМ с контекстуализацией, как обычно. Но тестировать особенно нечего: в плагинах Vitastor и Ceph образ контекста хранится в локальной ФС гипервизора. | +| tm/cpds | Копировать диск ВМ/его снимок в новый образ | Выберите ВМ → Выберите диск → Опционально выберите снимок → "Сохранить как". | +| tm/delete | Удалить диск-клон или волатильный диск ВМ | Отключите волатильный или не-постоянный диск от ВМ. | +| tm/failmigrate | Обработать неудачную миграцию | Тестировать нечего. Скрипт пуст в плагинах Vitastor и Ceph. В других плагинах скрипт должен откатывать действия tm/premigrate. | +| tm/ln | Подключить "постоянный" образ к ВМ | Тестировать нечего. Скрипт пуст в плагинах Vitastor и Ceph. | +| tm/mkimage | Создать волатильный диск, без или с ФС | Подключите волатильный диск к ВМ, с или без файловой системы. | +| tm/mkswap | Создать волатильный диск подкачки | Подключите волатильный диск к ВМ, форматированный как диск подкачки (swap). | +| tm/monitor | Вывод статистики места в хранилище дисков ВМ | Проверьте статистику свободного/занятого места в списке хранилищ дисков ВМ. | +| tm/mv | Мигрировать диск ВМ между хостами | Мигрируйте ВМ между серверами. Правда, с точки зрения хранилища в плагинах Vitastor и Ceph этот скрипт ничего не делает. | +| tm/mvds | Отключить "постоянный" образ от ВМ | Тестировать нечего. Скрипт пуст в плагинах Vitastor и Ceph. В целом же скрипт обратный к tm/ln и в других хранилищах он может, например, копировать образ ВМ с диска гипервизора обратно в хранилище. | +| tm/postbackup | Выполняется после бэкапа | По-видимому, скрипт просто удаляет временные файлы после резервного копирования. Так что можно провести его и проверить, что на серверах не осталось временных файлов. | +| tm/postbackup_live | Выполняется после бэкапа запущенной ВМ | То же, что tm/postbackup, но для запущенной ВМ. | +| tm/postmigrate | Выполняется после миграции ВМ | Тестировать нечего. Однако, OpenNebula запускает скрипт только для системного хранилища, поэтому он вызывает аналогичные скрипты для хранилищ других дисков той же ВМ. Помимо этого в плагинах Vitastor и Ceph скрипт ничего не делает. | +| tm/prebackup | Выполнить резервное копирование дисков ВМ | Создайте хранилище резервных копий типа "rsync" → Забэкапьте в него ВМ. | +| tm/prebackup_live | То же самое для запущенной ВМ | То же, что tm/prebackup, но запускает fsfreeze/thaw (остановку доступа к дискам). Так что смысл теста - проведите резервное копирование и проверьте, что данные скопировались консистентно. | +| tm/premigrate | Выполняется перед миграцией ВМ | Тестировать нечего. Аналогично tm/postmigrate запускается только для системного хранилища. | +| tm/resize | Изменить размер диска ВМ | Выберите ВМ → Выберите непостоянный диск → Измените его размер. | +| tm/restore | Восстановить диски ВМ из бэкапа | Создайте хранилище резервных копий → Забэкапьте в него ВМ → Восстановите её обратно. | +| tm/snap_create | Создать снимок диска ВМ | Выберите ВМ → Выберите диск → Создайте снимок. | +| tm/snap_create_live | Создать снимок диска запущенной ВМ | Выберите запущенную ВМ → Выберите диск → Создайте снимок. | +| tm/snap_delete | Удалить снимок диска ВМ | Выберите ВМ → Выберите диск → Выберите снимок → Удалить. | +| tm/snap_revert | Откатить диск ВМ к снимку | Выберите ВМ → Выберите диск → Выберите снимок → Откатить. | diff --git a/docs/intro/features.en.md b/docs/intro/features.en.md index ed6976e7..be25acae 100644 --- a/docs/intro/features.en.md +++ b/docs/intro/features.en.md @@ -39,6 +39,10 @@ ## Plugins and tools +- [Proxmox storage plugin and packages](../installation/proxmox.en.md) +- [OpenNebula storage plugin](../installation/opennebula.en.md) +- [CSI plugin for Kubernetes](../installation/kubernetes.en.md) +- [OpenStack support: Cinder driver, Nova and libvirt patches](../installation/openstack.en.md) - [Debian and CentOS packages](../installation/packages.en.md) - [Image management CLI (vitastor-cli)](../usage/cli.en.md) - [Disk management CLI (vitastor-disk)](../usage/disk.en.md) @@ -46,9 +50,6 @@ - [Native QEMU driver](../usage/qemu.en.md) - [Loadable fio engine for benchmarks](../usage/fio.en.md) - [NBD proxy for kernel mounts](../usage/nbd.en.md) -- [CSI plugin for Kubernetes](../installation/kubernetes.en.md) -- [OpenStack support: Cinder driver, Nova and libvirt patches](../installation/openstack.en.md) -- [Proxmox storage plugin and packages](../installation/proxmox.en.md) - [Simplified NFS proxy for file-based image access emulation (suitable for VMWare)](../usage/nfs.en.md#pseudo-fs) ## Roadmap @@ -58,7 +59,6 @@ The following features are planned for the future: - Control plane optimisation - Other administrative tools - Web GUI -- OpenNebula plugin - iSCSI and NVMeoF gateways - Multi-threaded client - Faster failover diff --git a/docs/intro/features.ru.md b/docs/intro/features.ru.md index 58c5dd26..021fbeb0 100644 --- a/docs/intro/features.ru.md +++ b/docs/intro/features.ru.md @@ -41,6 +41,10 @@ ## Драйверы и инструменты +- [Плагин для Proxmox](../installation/proxmox.ru.md) +- [Плагин для OpenNebula](../installation/opennebula.ru.md) +- [CSI-плагин для Kubernetes](../installation/kubernetes.ru.md) +- [Базовая поддержка OpenStack: драйвер Cinder, патчи для Nova и libvirt](../installation/openstack.ru.md) - [Пакеты для Debian и CentOS](../installation/packages.ru.md) - [Консольный интерфейс управления образами (vitastor-cli)](../usage/cli.ru.md) - [Инструмент управления дисками (vitastor-disk)](../usage/disk.ru.md) @@ -48,9 +52,6 @@ - [Драйвер диска для QEMU](../usage/qemu.ru.md) - [Драйвер диска для утилиты тестирования производительности fio](../usage/fio.ru.md) - [NBD-прокси для монтирования образов ядром](../usage/nbd.ru.md) ("блочное устройство в режиме пользователя") -- [CSI-плагин для Kubernetes](../installation/kubernetes.ru.md) -- [Базовая поддержка OpenStack: драйвер Cinder, патчи для Nova и libvirt](../installation/openstack.ru.md) -- [Плагин для Proxmox](../installation/proxmox.ru.md) - [Упрощённая NFS-прокси для эмуляции файлового доступа к образам (подходит для VMWare)](../usage/nfs.ru.md#псевдо-фс) ## Планы развития @@ -58,7 +59,6 @@ - Оптимизация слоя управления - Другие инструменты администрирования - Web-интерфейс -- Плагин для OpenNebula - iSCSI и NVMeoF прокси - Многопоточный клиент - Более быстрое переключение при отказах diff --git a/opennebula/README.md b/opennebula/README.md new file mode 100644 index 00000000..0861d3e4 --- /dev/null +++ b/opennebula/README.md @@ -0,0 +1 @@ +See [../docs/installation/opennebula.en.md](../docs/installation/opennebula.en.md). diff --git a/opennebula/install.sh b/opennebula/install.sh index ff09c2b8..5ae0bc2c 100755 --- a/opennebula/install.sh +++ b/opennebula/install.sh @@ -4,16 +4,25 @@ set -e reapply_patch() { if ! patch -f --dry-run -l -R $1 < $2 >/dev/null; then + already_applied=0 if ! patch -l -f $1 < $2; then + applied_ok=0 echo "ERROR: Failed to patch file $1, please apply the patch $2 manually" fi fi } echo "Reapplying Vitastor patches to OpenNebula's oned.conf, vmm_execrc and downloader.sh" +already_applied=1 +applied_ok=1 reapply_patch /var/lib/one/remotes/datastore/downloader.sh /var/lib/one/remotes/datastore/vitastor/downloader-vitastor.sh.diff reapply_patch /etc/one/oned.conf /var/lib/one/remotes/datastore/vitastor/oned.conf.diff reapply_patch /etc/one/vmm_exec/vmm_execrc /var/lib/one/remotes/datastore/vitastor/vmm_execrc.diff -if [ -f /etc/apparmor.d/local/abstractions/libvirt-qemu ]; then +if [[ "$already_applied" = 1 ]]; then + echo "OK: Vitastor OpenNebula patches are already applied" +elif [[ "$applied_ok" = 1 ]]; then + echo "OK: Vitastor OpenNebula patches successfully applied" +fi +if [[ -f /etc/apparmor.d/local/abstractions/libvirt-qemu ]]; then if ! grep -q /etc/vitastor/vitastor.conf /etc/apparmor.d/local/abstractions/libvirt-qemu; then echo ' "/etc/vitastor/vitastor.conf" r,' >> /etc/apparmor.d/local/abstractions/libvirt-qemu fi diff --git a/opennebula/vitastor-imageds.conf b/opennebula/vitastor-imageds.conf index 72bb9590..a902d860 100644 --- a/opennebula/vitastor-imageds.conf +++ b/opennebula/vitastor-imageds.conf @@ -6,4 +6,5 @@ DISK_TYPE = "file" BRIDGE_LIST = "opennebula1" POOL_NAME = "test1" IMAGE_PREFIX = "my" -STAGING_DIR = /var/tmp +STAGING_DIR = "/var/tmp" +VITASTOR_CONF = "/etc/vitastor/vitastor.conf" diff --git a/opennebula/vitastor-systemds.conf b/opennebula/vitastor-systemds.conf index 71260c16..ba16e1bc 100644 --- a/opennebula/vitastor-systemds.conf +++ b/opennebula/vitastor-systemds.conf @@ -3,4 +3,5 @@ TM_MAD = "vitastor" TYPE = "SYSTEM_DS" BRIDGE_LIST = "opennebula1" POOL_NAME = "test1" -IMAGE_PREFIX = "my" +IMAGE_PREFIX = "one" +VITASTOR_CONF = "/etc/vitastor/vitastor.conf"