HowTo: VM in anderes Projekt transferieren

Einleitung

In der TelemaxX OpenCloud werden Ressourcen innerhalb von Projekten organisiert. Projekte dienen der logischen Trennung von Umgebungen, Berechtigungen, Netzwerken und Quotas. Eine bestehende VM ist daher immer fest an ihr aktuelles Projekt gebunden und kann nicht direkt per Klick in ein anderes Projekt verschoben werden.

Für die Migration einer VM in ein anderes Projekt müssen die zugrunde liegenden Ressourcen separat betrachtet und übertragen werden. Images können aus dem Quellprojekt exportiert und anschließend im Zielprojekt wieder importiert werden. Volumes lassen sich über die Funktion „Create Transfer“ an ein anderes Projekt übergeben und dort übernehmen. Zusätzlich besteht die Möglichkeit, Images oder Datenträger über die CLI zu exportieren und im Zielprojekt wieder bereitzustellen.

❗️

Führen Sie keine Arbeiten an Volumes, Snapshots oder Images ohne vorherige Datensicherung durch. Vor der Migration oder Konvertierung einer VM sollten alle relevanten Daten gesichert und die Wiederherstellung geprüft werden.

Änderungen an Root Volumes, Volume Snapshots oder exportierten Images können bei Fehlern zu Datenverlust oder nicht mehr startfähigen Instanzen führen.


Unterschied zwischen Root Volumes und Non-Root Volumes

Bei der Migration einer VM muss zwischen dem Root Volume der VM und zusätzlich angebundenen Volumes unterschieden werden.

Das Root Volume enthält das Betriebssystem der VM und ist direkt mit der Instanz verknüpft. Es kann daher nicht wie ein normales Daten-Volume direkt in ein Image konvertiert und exportiert werden. Für den Export eines Root Volumes ist ein Zwischenschritt erforderlich. In der Regel wird zunächst ein Snapshot des Root Volumes erstellt. Aus diesem Snapshot wird anschließend ein temporäres Volume erzeugt, welches danach als Image heruntergeladen werden kann.

Non-Root Volumes, also zusätzlich an eine VM angebundene Daten-Volumes, können einfacher verarbeitet werden. Sobald ein solches Volume von der VM getrennt wurde und den Status available hat, kann es direkt über die OpenStack CLI in ein Image konvertiert werden.

Für beide Varianten gilt, dass die VM bzw. das Volume vor der Konvertierung in einem konsistenten Zustand sein sollte. Die VM muss für die Arbeiten immer heruntergefahren sein.

🚧

Das Volume, dass zu einem Image konvertiert werden soll, muss immer den Status "Available" haben. Ansonsten ist eine Umwandlung nicht möglich.


Migrationswege

via Openstack CLI

📘

Die CLI Schritte erfordern die Nutzung der Application Credentials

Root-Volume zum Image konvertieren

Bei der Konvertierung eines Root-Volumes muss ein Zwischenschritt gegangen werden und ein Image via Volume -> Snapshot -> Volume -> Image erstellt werden.

openstack volume list
openstack volume snapshot create --volume <VOLUME-ID> <SNAPSHOT-NAME> --force
openstack volume create --snapshot <SNAPSHOT-ID> <VOLUME-NAME>
openstack image create --volume <VOLUME-ID> <IMAGE-NAME>

Export eines Image

# export
openstack image save --file <IMAGE_NAME>.qcow2 <IMAGE_ID>
# import im anderen Projekt
openstack image create \
  --file ubuntu-22.04-export.qcow2 \
  --disk-format qcow2 \
  --container-format bare \
  ubuntu-22.04-imported

Volume Transfer

🚧

Aktive Volumes "status = in-use" müssen vor dem Transfer getrennt werden. Root-Volumes von VMs können nicht via "Create Transfer" verschoben werden. Hier muss das Volume als Image exportiert werden oder ein neues Volume via Snapshot -> Volume erstellt werden.

# Alle Volumes auflisten
openstack volume list

# Falls das Volume noch an einer VM hängt: zuerst trennen
openstack server remove volume <SERVER_ID> <VOLUME_ID>
openstack volume transfer request create <VOLUME_ID>

# Application Credential des Zielprojektsladen
source zielprojekt-openrc.sh
openstack volume transfer request accept <TRANSFER_ID> <AUTH-KEY>

# Prüfen, ob das Volume im Zielprojekt vorhanden ist
openstack volume list

Anschließend kann aus dem Volume eine Instanz gestartet werden.

via Horizon

📘

Ein Image export kann nur vial Openstack CLI erfolgen

Volume transfer starten

Volumes -> Volumes -> VOLUME_NAME_OR_ID -> Actions (Dropdown) -> Create Transfer


Namen für den Transfer vergeben

Transfer Namen vergeben und "Create Volume Transfer" drücken

Transfer ID und Auth Key notieren

Projekt wechseln und ein "Accept Transfer" starten


Die notieren Transfer ID und Auth Key einfügen und "Accept Volume Transfer" klicken

Aus dem transferiertem Volume kann direkt ein "Launch as Instance" gestartet werden.

Einschränkungen

❗️

Es können keine Netzwerk, Security Groups oder Floating IPs mit verschoben werden. Diese erfordern eine Neuerstellung im anderen Projekt.